; 第十七周作业 | Linux运维部落

第十七周作业

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

工作原理

LVS分为两个组件:ipvs和ipvsadm

        ipvs:工作于内核空间,主要用于使用户定义的策略生效;

        ipvsadm : 工作于用户空间,主要用于用户定义和管理集群服务的工具


上图所示,ipvs工作于内核空间的INPUT链上,当收到用户请求某集群服务时,经过PREROUTING链,经检查本机路由表,送往INPUT链;在进入netfilter的INPUT链时,ipvs强行将请求报文通过ipvsadm定义的集群服务策略的路径改为FORWORD链,将报文转发至后端真实提供服务的主机。

几种常用模型:

                                                                       LVS-DR

1)client向目标vip发出请求,Director接收.此时IP包头及数据帧头信息如(1),(2);

2)LVS根据负载均衡算法选择一台active的RS,将此RIP所在网卡的mac地址作为目标mac地址,发送到局域网里.此时IP包头及数据帧头信息如(3);

3)RS在局域网中收到这个帧,拆开后发现目标IP(VIP)与本地匹配,于是处理这个报文.随后重新封装报文,发送到局域网.此时IP包头及数据帧头信息如(4);

LVS DR类型的特性:
 1)RS可以使用私有地址;但也可以使用公网地址,此时可以直接通过互联网连入RS以实现配置、监控等;
 2)RS的网关一定不能指向DIP;
 3)RS跟DR要在同一物理网络内(不能由路由器分隔);
 4)请求报文经过DR,但响应报文一定不经过DR
 5)不支持端口映射;
 6)RS可以使用大多数的操作系统;


                                                               LVS-NAT


此模型中,DR只需要将VIP配置到DR上,它的工作机制是,将收到的集群服务请求报文目标地址转换成经调度算法计算得出的后端主机IP地址,然后端主机将响应报文发送至DR,再由DR将源地址转换成VIP的地址;此机制与iptables中我们学习的DNAT类似;

NAT的特性:

  1> RS应该使用私有地址;

  2> RS的网关的必须指向DIP;

  3> RIP和DIP必须在同一网段内;

  4> 请求和响应的报文都得经过Director;在高负载场景中,Director很可能成为系统性能瓶颈;

  5> 支持端口映射;

  6> RS可以使用任意支持集群服务的OS


                                                                      LVS-TUN

在数据包必须传递到另一个网络或因特网上时,可以使用ip隧道,ip隧道能够将数据包从一个子网或虚拟局域网(VLAN)转发到另一个子网或虚拟局域网(VLAN),建立ip隧道是Linux内核功能的一部分,LVS-TUN转发方法允许你将集群节点放在与Director不同的网络上。

wKiom1PHUB-hMKfKAAErFLpoOdo937.jpg

请留意DR将数据包转发给RS时的IP数据报文;由于DR,RS都不在同一局域网内,而DR要将client请求报文转发给RS时,DR是直接在数据包中直接添加IP首部(源IP:DR和目标IP:RS),这样就是隧道技术了。

同样,该模型下RS都将配置VIP地址,且不能被外界所获知VIP存在于RS上;

LVS TUN类型:IP隧道
 1)RIP、DIP、VIP都得是公网地址;
 2)RS的网关不会指向也不可能指向DIP;
 3)请求报文经过DR,但响应报文一定不经过DR;
 4)不支持端口映射;
 5)RS的OS必须得支持隧道功能;

                                                                          LVS-FullNat

LVS当前应用主要采用DR和NAT模式,但这2种模式要求RS和DR在同一个vlan中,导致部署成本过高;TUN模式虽然可以跨vlan,但RS上需要部署ipip模块等,网络拓扑上需要连通外网,较复杂,不易运维。为了解决上述问题,我们在DR上添加了一种新的转发模式:FullNat,该模式和NAT模式的区别是:Packet IN时,除了做DNAT,还做SNAT(用户ip->内网ip),从而实现DR-RS间可以跨vlan通讯,RS只需要连接到内网;

wKiom1PHT-qiq_nGAAEJ7XqVIUQ769.jpg

LVS FullNat:

 1)DR,RS可以不在同一网络内,但它与TUN不同,所有IP报文头部信息变更都在DR上进行,所以性能方面比LVS_NAT更差一些;

 2)需要注意配置路由,保证能正常通信;

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

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

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

LVS-VIP   192.168.31.100

LVS- DIP  192.168.31.10

nginx1    192.168.31.11

nginx2     192.168.31.12

PHP/NFS  192.168.31.13

MySQL     192.168.31.14

                                                                            架构图


1、在两台nginx上安装nginx服务,我这里选择源码编译安装

[root@server ~]# tar -zxvf nginx-1.10.3.tar.gz

[root@server ~]# ./configure –prefix=/usr/local/nginx –sbin-path=/usr/local/nginx/sbin/nginx –conf-path=/etc/nginx/nginx.conf  –error-log-path=/var/log/nginx/error.log  –http-log-path=/var/log/nginx/access.log  –pid-path=/var/run/nginx/nginx.pid  –lock-path=/var/lock/nginx.lock  –user=nginx –group=nginx   –with-http_ssl_module –with-http_flv_module –with-http_stub_status_module –with-http_gzip_static_module  –http-client-body-temp-path=/var/tmp/nginx/client/  –http-proxy-temp-path=/var/tmp/nginx/proxy/ –http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ –http-uwsgi-temp-path=/var/tmp/nginx/uwsgi –http-scgi-temp-path=/var/tmp/nginx/scgi –with-pcre

[root@server ~]#make && make install

2、建立nginx用户,保证和php服务器上的nginx用户id号,组id号一致

groupadd -r -g 409 nginx

useradd -r -u 409 -g 409 nginx

3、在PHP/NFS服务起上安装php及nfs

yum install php-mysql php-mbstring php-gd php-xml nfs-utils -y

[root@php ~]#tar -zxvf php-5.5.15.tar.gz

[root@php ~]#./configure –prefix=/usr/local/php –with-mysql  –with-pdo-mysql  –with-mysqli  –with-openssl  –enable-fpm  –enable-sockets   –enable-sysvshm –enable-mbstring  –with-freetype-dir  –with-jpeg-dir  –with-png-dir  –with-zlib-dir –with-libxml-dir=/usr  –enable-xml  –with-mhash  –with-mcrypt  –with-config-file-path=/etc  –with-config-file-scan-dir=/etc/php.d  –with-bz2 –with-curl

[root@php ~]#make && make install

提供配置文件

[root@php php-5.5.15]# cp php.ini-production /etc/php.ini

为php-fpm提供脚本

cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm 

chmod +x /etc/init.d/php-fpm 

chkconfig –add php-fpm 

chkconfig php-fpm on

4、在PHP服务器上,建立nginx用户,要保证和nginx服务器上的nginx用户id号、组id号一致:

groupadd -r -g 409 nginx

useradd -r -u 409 -g 409 nginx

5、修改php-fpm配置文件,并重启:

vim /usr/local/php/etc/php-fpm.conf

listen = 192.168.31.13:9000
user = nginx
group = nginx
service php-fpm restart
6.在PHP服务器上创建/www目录,并开启nfs服务
mkdir /www
chown nginx.nginx /www -R

vim /etc/exports
/www    192.168.31.0/24(rw,no_root_squash)
service nfs start

7.整合nginx与php

nginx服务器建立网页文件存放目录/www,并修改其权限

mkdir /www

chown -R nginx:nginx /www

vim /etc/nginx/nginx.conf

location / {
            root   /www;
            index  index.php index.html index.htm;
        }

location ~ \.php$ {
            root           /www;
            fastcgi_pass   192.168.31.13:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
8、nginx服务器挂载nfs,并测试php

mount -t nfs 192.168.31.13:/www  /www

vim /www/index.php

<?php

phpinfo();

?>

9、整合PHP与mysql,安装mysql

9.1添加用户

useradd -r mysql

mkdir -pv /mydata/data

chown -R mysql.mysql /mydata/data

9.2解压并初始化mysql

tar xf mariadb-10.0.20-linux-x86_64.tar.gz -C /usr/local/
cd /usr/local/
ln -sv mariadb-10.0.20-linux-x86_64 mysql
cd mysql/
chown -R root:mysql .
scripts/mysql_install_db –user=mysql –datadir=/mydata/data/

9.3修改配置文件

cp support-files/my-large.cnf /etc/my.cnf 

vim /etc/my.cnf

添加以下几行

datadir = /mydata/data

innodb_file_per_table = ON

skip_name_resolve = ON

9.4提供脚本文件

cp support-files/mysql.server /etc/init.d/mysqld
chkconfig –add mysqld
chkconfig mysqld on
service mysqld start

10.测试php与Mariadb联动

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

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

11、在php服务器上部署wordpress

cd  /www

tar -zxvf wordpress-4.7.4-zh_CN.tar.gz

12、使用浏览器完成后续的图形化安装步骤。。。。省略

13、lvs服务器上安装lvs

yum -y install  ipvsadm

在lvs物理网卡上配置vip,并添加路由

ifconfig eth0:0 192.168.31.100 netmask 255.255.255.255 broadcast 192.168.31.100

route add -host 192.168.31.100 dev eth0:0

14、在两台rs上配置VIP,添加路由,并修改内核参数,禁止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
ifconfig lo:0 192.168.31.100 netmask 255.255.255.255 broadcast 192.168.31.100

route add -host 192.168.31.100 dev lo:0

15、在lvs上配置ipvsadm规则

ipvsadm -A -t 192.168.31.100:80 -s rr
ipvsadm -a -t 192.168.31.100:80 -r 192.168.31.11 -g -w 1
ipvsadm -a -t 192.168.31.100:80 -r 192.168.31.12 -g -w 1
ipvsadm -L -n

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



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

Apache1/PHP     VIP:192.168.31.100     RIP:192.168.31.11

Apache2/PHP     VIP:192.168.31.100     RIP:192.168.31.12

NFS                   RIP:192.168.31.13

MYSQL              RIP:192.168.31.14

                                                        架构图

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

service httpd start


2.配置nfs服务器

mkdir -pv /data/www

vim /etc/exports

/data/www  192.168.0.0/24(rw,no_root_squash)

service nfs start

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
service mysqld start
mysql
MariaDB [(none)]> create database wpdb;                                                  
MariaDB [(none)]> grant all on wpdb.* to root@’192.168.0.%’ identified by ‘mysql’;   
MariaDB [(none)]> flush privileges;

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

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

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

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

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

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

3)各节点之间时间同步

7.在各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
8.在两个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,依然正常,说明高可用实现成功。

嗯,差不多了!

原创文章,作者:N27_Vicent,如若转载,请注明出处:/78598

发表评论

电子邮件地址不会被公开。 必填项已用*标注

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1660809109@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班

友情链接:万达招商  万达注册  万达娱乐开户  万达主管  guoqibee.com  万达招商QQ  万达主管QQ  万达娱乐主管QQ  万达招商QQ  万达娱乐直属QQ