keepalive的高可用集群
一、keepalived概述
1.keepalive的工作原理
keepalive是专门为了lvs集群开发出来的,但是适用场景不仅仅局限于lvs。而且keepalive为后台的真实服务器做了一个健康检查,当服务不可用时,会自动的移除ipvs的转发策略,服务恢复时,会自动重新把策略加入到ipvs。
基于vrrp协议(虚拟路由的冗余协议)实现的调度器的高可用方案。
2.keepalive功能
-
主备切换
通过优先级确定主备身份,当主出现故障时,可以自动切换到备,主恢复之后,如果主的优先级比备的高,还是会自动的切换到主
-
故障检测和恢复功能
-
主备之间通信
通过组播地址:224.0.0.18,互相发送健康检查的报文,确定主备之间的通信(确定双方是否工作正常)
-
通过配置vip来实现集群的入口
vrrp是一个冗余协议,主在工作,备完全不参与集群的工作,只是监听主的状态。
3.keepalive实例一
#lvs的DR模式结合keepalive
nginx1 主调度器
vip 192.168.206.100
nginx2 备调度器
#主备的配置
apt -y install ipvsadm keepalived
cp /usr/share/doc/keepalived/samples/keepalived.conf.sample /etc/keepalived/keepalived.conf
vim /etc/keepalived/keepalived.conf
主备几乎一致,除了id号、state、priority
下图为备的keepalived配置
#keepalived.conf配置文件里的模块
global_desf:整个vrrp的全局配置
vrrp_instance VI_1:指定网卡设备和vip地址的模块,以及确定vrrp的主备关系
virtual_server:指定转发的策略,以及lvs的工作模式和负载均衡的算法
小模块
check:负责健康检查,主要是检查服务的端口。(监控服务状态一般都是监听端口)
script:文本模式,也可以支持脚本形式的健康检查
systemctl restart keepalived.servive
ipvsadm -ln
ip a #主和备只能有一个vip
#检查步骤
1、检查配置的转发策略是否生效
2、检查主的vip地址是否生成
3、检查备服务器上是否有vip地址
4、模拟故障切换,主的vp能否飘到备服务器
5、主恢复之后vip是否能够会到主服务器
#下面的配置主备都一样
vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens37.send_redirects = 0
sysctl -p
route add -host 192.168.206.100 dev ens33
两个后端服务器都需要添加第二个网卡(ens36)
vim /etc/sysctl.conf
net.ipv4.conf.ens36.arp_ignore = 1 net.ipv4.conf.ens36.arp_announce = 2 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.default.arp_ignore = 1 net.ipv4.conf.default.arp_announce = 2
sysctl -p
route add -host 192.168.206.100 dev ens36
4.keepalive实例二
用keepalived做主备的高可用,主备服务器做七层交换连通后端服务器
Nginx1和nginx2作为主备代理服务器,nginx3、ubuntu4、ubuntu5作为后端真实服务器
Nginx1 192.168.206.60 nignx2 192.168.206.70 nginx3 192.168.206.80
Ubuntu4 192.168.206.50 ubuntu5 192.168.206.55 vip 192.168.206.100
主要配置都在nginx1和nginx2上。
Nginx1配置如下:
apt -y install curl keepalived
cp /usr/share/doc/keepalived/samples/keepalived.conf.sample /etc/keepalived/keepalived.conf
vim /etc/keepalived/keepalived.conf
#配置如下图所示
cd /opt
vim check_nginx.sh
#!/bin/bash
/usr/bin/curl -I http://localhost &> /dev/null
if [ $? -ne 0 ]
then
systemctl stop keepalived
fi
chmod 777 check_nginx.sh
systemctl restart keepalived
Nginx2配置如下:
apt -y install curl keepalived
scp root@192.168.206.60:/etc/keepalived/keepalived.conf /etc/keepalived/
vim /etc/keepalived/keepalived.conf
#配置如下图所示
systemctl restart keepalived
#检测主备是否成功
主 ip a 看是否有192.168.206.100 主有
备 ip a 看是否有192.168.206.100 备没有
主 systemctl stop nginx,ip a 看是否有192.168.206.100 主没有
备 ip a 看是否有192.168.206.100 备有
主 systemctl restart nginx,systemctl restart keepalived,ip a 看是否有192.168.206.100 主有
备 ip a 看是否有192.168.206.100 备没有
#主备七层交换连通后端服务器,主备都一样的设置
Nginx3:echo 8080 > /usr/local/nginx/html/index.html
Ubuntu4:echo 5050 > /usr/local/nginx/html/index.html
Ubuntu5:echo 5555 > /usr/local/nginx/html/index.html
#检测
二、脑裂问题
1.脑裂的概念
在HA系统,只要是通过vip这个机制实现的,都有可能会出现这个问题。vip地址同时出现在了主和备。
2.出现脑裂的原因
- 防火墙屏蔽了主备之间的224.0.0.18的报文,导致互相都收不到,就认为对方已经挂起,都认为自己是主
- 网卡出现故障(硬件故障),配置出问题:ip地址冲突
- 心跳线:网线,网线之间连接故障,断开,老化。
- keepalived的配置文件有问题,配置的相关项出现问题(80%)
3.解决脑裂的办法
(1)软件层面
- 抓包进行定位,查看组播的报文是否正常
- 配置文件进行排查(网卡配置,应用配置)
(2)硬件层面
- 更换心跳线(网线)
- 网卡硬件的问题:内存,CPU,磁盘空间不足也会出现脑裂