第十七周作业

栏目: 数据库 · Mysql · 发布时间: 6年前

内容简介:第十七周作业

1、结合图形描述LVS的工作原理;

工作方式:

LVS由前端的负载均衡器(Load Balancer,LB)和后端的真实服务器(Real Server,RS)群组成。RS间可通过局域网或广域网连接。LVS的这种结构对用户是透明的,用户只能看见一台作为LB的虚拟服务器(Virtual Server),而看不到提供服务的RS群。当用户的请求发往虚拟服务器,LB根据设定的包转发策略和负载均衡调度算法将用户请求转发给RS。RS再将用户请求结果返回给用户。

工作原理:

第十七周作业

1.当客户端的请求到达负载均衡器的内核空间时,首先会到达PREROUTING链。

2.当内核发现请求数据包的目的地址是本机时,将数据包送往INPUT链。

3.LVS由用户空间的ipvsadm和内核空间的IPVS组成,ipvsadm用来定义规则,IPVS利用ipvsadm定义的规则工作,IPVS工作在INPUT链上,当数据包到达INPUT链时,首先会被IPVS检查,如果数据包里面的目的地址及端口没有在规则里面,那么这条数据包将被放行至用户空间。

4.如果数据包里面的目的地址及端口在规则里面,那么这条数据报文将被修改目的地址为事先定义好的后端服务器,并送往POSTROUTING链。

5.最后经由POSTROUTING链发往后端服务器。

几种常用模型:

第十七周作业

①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。

②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的源MAC地址改为自己DIP的MAC地址,目标MAC改为了RIP的MAC地址,并将此包发送给RS。

③.RS发现请求报文中的目的MAC是自己,就会将次报文接收下来,处理完请求报文后,将响应报文通过lo接口送给eth0网卡直接发送给客户端。

优点:返回请求无需经过调度器,效率高

缺点:

1.配置复杂,需要修改内核参数使lo接口的VIP不能响应本地网络内的arp请求;

2.负载均衡器的DIP网卡与各RS必须在一个局域网中,不能跨网段;

3.无法做端口转换。

第十七周作业

①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP(客户端IP),后面统称为CIP),目标地址为VIP(负载均衡器前端地址,后面统称为VIP)。

②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的目标地址改为了后端服务器的RIP地址并将报文根据算法发送出去。

③.报文送到Real Server后,由于报文的目标地址是自己,所以会响应该请求,并将响应报文返还给LVS。

④.然后lvs将此报文的源地址修改为本机并发送给客户端。

优点:

1.RS端配置简单,只需配置私网IP即可;

2.支持端口转换。

缺点:由于请求与响应都经过调度器,所以性能较差,容易出现瓶颈;

第十七周作业

①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。

②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将在客户端请求报文的首部再封装一层IP报文,将源地址改为DIP,目标地址改为RIP,并将此包发送给RS。

③.RS收到请求报文后,会首先拆开第一层封装,然后发现里面还有一层IP首部的目标地址是自己lo接口上的VIP,所以会处理次请求报文,并将响应报文通过lo接口送给eth0网卡直接发送给客户端。

优点:

1.返回请求无需经过调度器,效率高;

2.负载均衡器与RS之间可以跨网段,甚至跨公网。

缺点:

1.配置复杂,需要修改内核参数使lo接口的VIP不能响应本地网络内的arp请求;

2.无法做端口转换。

2、搭建一套LVS-DR模型的高性能集群,并实现以下功能:

(1)、wordpress程序通过nfs共享给各个realserver;

(2)、后端realserver中的nginx和 php 分离

第十七周作业

1. 在两台rs节点上分别安装nginx

]# yum install nginx nfs-utils -y                                    #安装nfs-utils是为了后面能够正常挂在nfs分区

2. 安装Mariadb

]# yum install mariadb-server -y

3. 安装php-fpm和nfs

]# yum install php-fpm php-mysql php-mbstring php-gd php-xml nfs-utils -y

4. 在两个rs节点上分别修改nginx配置文件,添加下面内容:

]# vim /etc/nginx/nginx.conf
...
location / {
            root           /data/www;                                 #定义根目录
            index          index.php index.html index.htm;            #将index.php放在第一位置
        }

        location ~ \.php$ {
            root           /data/www;
            fastcgi_pass   192.168.0.24:9000;                         #指定php服务器地址和端口
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
...

5.在php服务器上修改php-fpm配置文件

]# vim /etc/php-fpm.d/www.conf                                                                
listen = 192.168.0.24:9000                                            #设置监听地址和端口
#listen.allowed_clients = 127.0.0.1                                   #默认只允许本机访问,注释该行后表示允许所有地址到本机的连接
]# systemctl start php-fpm.service

6. 在php服务器上配置nfs服务

]# mkdir -p /data/www
]# vim /etc/exports
/data/www 192.168.0.0/24(rw,no_root_squash)                           #将/data/www通过nfs服务共享出去
]# systemctl start nfs.service

7.在两个rs节点上创建共享目录并挂在共享盘

]# mkdir -p /data/www/
]# mount -t nfs 192.168.0.24:/data/www /data/www
]# systemctl start nginx.service

8.在php服务器上创建测试页,并在浏览器上分别打开rs1和rs2的主页,检查nginx和php的联动

]# vim /data/www/index.php
<?php
        phpinfo();
?>

9. 在 MySQL 服务器上设置必要的优化参数并重新初始化数据文件目录

]# vim /etc/my.cnf
[mysqld]
...
datadir = /mydata/data
innodb_file_per_table = ON
skip_name_resolve = ON

]# mkdir -p /mydata/data
]# mysql_install_db --user=mysql --datadir=/mydata/data
]# systemctl start mariadb.service

10.测试php与Mariadb联动

]# mysql
MariaDB [(none)]> grant all on *.* to 'root'@'192.168.0.%' identified by 'magedu';                 #在mysql中创建远程连接账号用于联动测试
MariaDB [(none)]> flush privileges;

]# vim /data/www/index.php              #在php服务器上创建测试页面
<?php
        $conn = mysql_connect('192.168.0.25','root','magedu');
        if ($conn)
                echo "OK";
        else
                echo "Failure";
?>

11. 在MySQL中创建wordpress数据库和用户

MariaDB [(none)]> create database wpdb;                                                  
MariaDB [(none)]> grant all on wpdb.* to wpuser@'192.168.0.%' identified by 'magedu';   
MariaDB [(none)]> flush privileges;

12.在php服务器上部署wordpress

]# cd /data/www
]# unzip wordpress-3.3.1-zh_CN.zip
]# cd wordpress
]# cp wp-config-sample.php wp-config.php          #生成wordpress配置文件
]# vim wp-config.php
define('DB_NAME', 'wpdb');                        #修改为实际库名

/** MySQL 数据库用户名 */
define('DB_USER', 'wpuser');                      #修改为实际用户名

/** MySQL 数据库密码 */
define('DB_PASSWORD', 'magedu');                  #修改为实际密码

/** MySQL 主机 */
define('DB_HOST', '192.168.0.25');               #修改为实际IP

13.使用浏览器完成后续的图形化安装步骤

浏览器输入:http://192.168.0.21/wordpress/wp-admin/install.php

第十七周作业

14. 在lvs服务器上安装lvs

]# yum install ipvsadm -y

15. 在lvs物理网卡上配置VIP

]# ifconfig eno16777736:0 192.168.0.20 netmask 255.255.255.255 broadcast 192.168.0.20

16.在两台rs上修改内核参数,禁止lo对VIP的广播做响应

]# echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
]# echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore
]# echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce 
]# echo 2 >/proc/sys/net/ipv4/conf/lo/arp_announce

17.在两台rs的lo网卡上配置VIP并添加到lvs的vip的路由

]# ifconfig lo:0 192.168.0.20 netmask 255.255.255.255 broadcast 192.168.0.20
]# route add -host 192.168.0.20 dev lo:0

18.在lvs上配置ipvsadm规则

]# ipvsadm -A -t 192.168.0.20:80 -s rr
]# ipvsadm -a -t 192.168.0.20:80 -r 192.168.0.22 -g -w 1 
]# ipvsadm -a -t 192.168.0.20:80 -r 192.168.0.23 -g -w 1 
]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.0.20:80 rr
  -> 192.168.0.22:80              Route   1      0          0         
  -> 192.168.0.23:80              Route   1      0          0

19.在浏览器中访问lvs的vip,测试是否成功

第十七周作业

3、基于heartbeat v2 crm实现HA LAMP组合;要求,部署wordpress,用于编辑的文章中的任何数据在节点切换后都能正常访问;

第十七周作业

1. 在两台rs节点上分别安装httpd,php并配置

]# yum install httpd php php-mysql php-mbstring php-gd php-xml nfs-utils -y 
]# vim /etc/httpd/conf/httpd.conf
...
<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>
...
AddType application/x-httpd-php .php
]# /etc/init.d/httpd start

2.配置nfs服务器

]# mkdir -p /data/www
]# vim /etc/exports
/data/www 192.168.0.0/24(rw,no_root_squash)                          
]# systemctl start nfs.service

3.安装并配置mariadb服务器

]# vim /etc/my.cnf
[mysqld]
...
datadir = /mydata/data
innodb_file_per_table = ON
skip_name_resolve = ON

]# mkdir -p /mydata/data
]# mysql_install_db --user=mysql --datadir=/mydata/data
]# systemctl start mariadb.service
]# mysql
MariaDB [(none)]> create database wpdb;                                                  
MariaDB [(none)]> grant all on wpdb.* to wpuser@'192.168.0.%' identified by 'magedu';   
MariaDB [(none)]> flush privileges;

4.在nfs服务器上修改wordpress配置文件

]# cd /data/www
]# unzip wordpress-3.3.1-zh_CN.zip
]# cd wordpress
]# cp wp-config-sample.php wp-config.php          
]# vim wp-config.php
define('DB_NAME', 'wpdb'); 

/** MySQL 数据库用户名 */
define('DB_USER', 'wpuser');    

/** MySQL 数据库密码 */
define('DB_PASSWORD', 'magedu');

/** MySQL 主机 */
define('DB_HOST', '192.168.0.25');

5.在两个rs上分别挂在nfs目录

]# mount -t nfs 192.168.0.24:/data/www /var/www/html

6. 使用浏览器完成后续的图形化安装步骤,确保通过每个rs节点都能正常访问wordpress

7.配置heartbeat v2 crm的准备工作

1)各节点hosts中添加自己和对端节点的名称解析

2)各节点之间建立ssh互信关系

3)各节点之间时间同步

8.在各rs节点安装heartbeat

]# yum install net-snmp-libs libnet PyXML libtool-ltdl gnutls gettext -y
]# rpm -ivh heartbeat-2.1.4-12.el6.x86_64.rpm heartbeat-pils-2.1.4-12.el6.x86_64.rpm heartbeat-stonith-2.1.4-12.el6.x86_64.rpm

9.在两个rs节点上分别配置heartbeat

]# cp /usr/share/doc/heartbeat-2.1.4/{ha.cf,authkeys} /etc/ha.d/
]# cd /etc/ha.d/
]# chmod 600 authkeys
]# vim authkeys
auth2
#1 crc
2 sha1 1q2w3e4R
#3 md5 Hello!

]# vim /etc/ha.d/ha.cf
logfile /var/log/ha-log                 #只用heartbeat日志
#logfacility    local0                  #禁用rsyslog的local0
mcast eth0 225.23.190.1 694 1 0         #设定组播地址
keepalive 2                             #监听频率为2秒
deadtime 30                             #死亡判定时间为30秒
warntime 10                             #异常警告时间为10秒
auto_failback on                        #修复后自动上线
node node1.magede.com                   #设置节点1
node node2.magedu.com                   #设置节点2
ping 192.168.0.1                        #设定第三方仲裁设备
crm on                                  #开启crm,同时也会禁用haresources

10.打开hb_gui图形界面

]# echo "magedu"|passwd --stdin hacluster                           #为hacluster设定密码,用于后面图形化登录时身份验证
]# service heartbeat start;ssh node2 service heartbeat start
]# hb_gui &

输入hacluster密码后进入hb_gui主界面

第十七周作业

创建资源组ha_wordpress

第十七周作业

创建资源webip,用于启停VIP

第十七周作业

创建资源nfs,用于挂载nfs共享磁盘

第十七周作业

创建资源webserver,用于启停httpd服务

第十七周作业

创建colocation约束,用于将不同资源绑定在一起

第十七周作业

创建约束nfs_with_webip,即nfs服务必须与webip在同一个节点上

第十七周作业

创建约束webserver_with_nfs,即webserver必须与nfs在同一个节点上

第十七周作业

创建顺序约束,用来指定资源服务的启停顺序

第十七周作业

创建约束nfs_after_webip,即nfs必须在webip启动之后才能启动

第十七周作业

创建约束webserver_after_nfs,即webserver服务必须在nfs服务启动之后才能启动

第十七周作业

启动资源ha_wordpress之后,可以发现所有节点均启动在节点2上,此时访问http://192.168.0.20/wordpress正常。

第十七周作业

将节点2置为standby

第十七周作业

可以发现所有的资源均已漂移到节点1上,再次访问 http://192.168.0.20/wordpress,依然正常,说明高可用实现成功。

第十七周作业


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Perl高效编程

Perl高效编程

霍尔 / 胜春、王晖、张东亮、蒋永清 / 人民邮电出版社 / 2011-5 / 65.00元

《Perl高效编程(第2版)》,本书是Perl编程领域的“圣经级”著作。它提供了一百多个详实的应用案例,足以涵盖编程过程中经常遇到的方方面面,由此详细阐释出各种高效且简洁的写法。一起来看看 《Perl高效编程》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

在线进制转换器
在线进制转换器

各进制数互转换器