利用keepalived高可用lvs集群,主/备和主/主;

vrrp_script高可用双主nginx;


keepalived主备:lvs-dr工作模型

网络搭建:

在前端2台调度器:

DR1:172.18.11.111

DR2:172.18.11.112

VIP:172.18.11.7


后端2台web服务器,运行nginx;

RS1:172.18.11.11

RS2:172.18.11.12


搭建web服务器:

提供简单的测试页面,以便容易观测到哪台RS被调度响应:

在RS1上:

]# yum -y install nginx

]# systemctl start nginx.service

]# cd /usr/share/nginx/html/

]# cp index.html{,.bak}

]# vim index.html

<h1> RS2-172.18.11.11</h1>

在RS2上:

]# yum -y install nginx

]# systemctl start nginx.service

]# cd /usr/share/nginx/html/

]# cp index.html{,.bak}

]# vim index.html

<h1> RS2-172.18.11.12</h1>


在RS1上为方便设置内核参数,编写自动设置脚本:

]# vim skp.sh

wKioL1c7B_njhjPXAABPNYyd9Is219.png

]# chmod +x skp.sh

]# ./skp.sh start

查看内核参数,确保生效:

]# cat /proc/sys/net/ipv4/conf/all/arp_ignore

]# cat /proc/sys/net/ipv4/conf/all/arp_announce


此脚本传递给RS2:

]# scp skp.sh root@172.18.11.12:/root

在RS2主机运行:

]# ./skp.sh start

查看是否arp设置成功

]# cat /proc/sys/net/ipv4/conf/all/arp_ignore

]# cat /proc/sys/net/ipv4/conf/all/arp_announce


在两个调度器上安装keepalived程序并编辑配置文件

]# yum -y install keepalived


分别编辑两个调度器keepalived配置文件

DR1配置:

]# vim /etc/keepalived/keepalived.conf

wKiom1c7G7_hTbinAABg_Z46wY8278.png

wKioL1c7HJXAy7H1AAAeww8mqeQ170.png


DR2配置:

只需修改state为备用和优先级即可,其它都保存不变:

]# vim /etc/keepalived/keepalived.conf

wKioL1c7HTnjRibzAABY2hOp8PM855.png

wKiom1c7HFOC3VyDAAAb2fO6XKU163.png


在两台调度器上安装ipvsadm命令工具;

安装ipvsadm并查看lvs集群:

]# yum -y install ipvsadm

]# ipvsadm -Ln

显示内容:

wKioL1c7HjOyN_bNAAAxVTYGNZ8527.png

可在DR1查看接口上的VIP,已经获得:

wKiom1c7HVOwuhFCAABiVBxiR48398.png


找一台主机多次执行测试:

]# curl http://172.18.11.7

会发现,访问请求是由两台RS交替响应的服务;即:

wKioL1c7HvfRvqgQAABi0hlBIYA922.png


使DR1掉线即手动停止keepalived服务,观察DR2获得VIP负责集群调度;也可同时手动关闭一台RS上的web服务;仍能正常请求web服务;

这就是keepalived基于主备工作模式健康状态检测,来提供高可用nginx的lvs集群服务;



再做keepalived的主/模式主,来提供高可用nginx的lvs集群服务;

只不过就是两个vrrp实例,一个是A的主B的备,一个是B的主A的备;

DR1:172.18.11.111

DR2:172.18.11.112

VIP1:172.18.11.7

VIP2:172.18.11.77


RS1:172.18.11.11

RS2:172.18.11.12


在DR1上配置keepalived:

wKiom1c7Nr7BDzj8AABSnPLYb1M616.png

wKioL1c7N6nBSgXTAABUnaSX3VY959.png

wKioL1c7N6rRgJ_tAABanmReDas039.png

wKiom1c7NsLQ7Au6AAAOjLuCRds377.png

注意:centos7中可能没有killall命令需要安装psmisc程序包,才能使用;

]# yum -y install psmisc


在DR2上配置keepalived:

wKiom1c7N76wF7wjAABd4WwMEHA759.png

wKioL1c7OLbzHWLhAABJfkxT8pk138.png

wKiom1c7N8-QYDFRAABZi7-n4I0193.png

wKioL1c7OLjxsZ3KAAAGAuTZKyQ612.png


编辑脚本通知机制:

wKioL1c7OY7hVfvpAABG0Mnd3gg806.png


配置RS:

在RS1上为方便设置内核参数,编写自动设置脚本:

wKioL1c7P6XAhoEnAABhhCH__O4178.png

注意:此处有一大坑!要在两台RS上分别添加lo:1的本机路由条目:

以便实现172.18.11.77能够被访问调度:

]# ifconfig lo:1 172.18.11.77 netmask 255.255.255.255 broadcast 172.18.11.77

]# route add -host 172.18.11.77 dev lo:1


]# chmod +x skp.sh

]# ./skp.sh start

查看内核参数,确保生效:

]# cat /proc/sys/net/ipv4/conf/all/arp_ignore

]# cat /proc/sys/net/ipv4/conf/all/arp_announce


此脚本传递给RS2:

]# scp skp.sh root@172.18.11.12:/root

在RS2主机运行:

]# ./skp.sh start

查看是否arp设置成功

]# cat /proc/sys/net/ipv4/conf/all/arp_ignore

]# cat /proc/sys/net/ipv4/conf/all/arp_announce


两台DR上的keepalived都启动,两台RS上的web服务都启动,分别查看两台DR的ip地址:

wKioL1c7QJTQ5ELsAABjUcHRIpA353.png

wKiom1c7P6zSWONoAABaG2ooTO0046.png

分别获取到不同VIP,即DR1是VIP1的主用,是VIP2的备用,DR2是VIP1的备用,是VIP2的主用;


测试:访问VIP1和VIP2

wKioL1c7QYrSlU9gAACrZtP9-x0235.png


可继续测试,手动停止DR1上的keepalived,查看DR2上的ip地址:

wKiom1c7QRXCNDdEAABugg4SKDQ281.png

在另一台主机curl测试两个VIP:在一台调度器掉线时,对于两个VIP提供的服务,使用curl测试两个VIP,没有任何影响;


同时,再手动停止RS2的nginx服务,在另一台主机curl测试两个VIP:

wKioL1c7Qw3w5YBFAABkv8drLc8626.png

此时,一台调度器掉线,一台RS掉线,仍能能保持两个VIP提供客户端的服务;

实现了keepalived高可用lvs-dr集群调度,双主nginx的应用。