1.何为keepalived脑裂
Keepalived的BACKUP主机在收到不MASTER主机报文后就会切换成为master,如果是它们之间的通信线路出现问题,无法接收到彼此的组播通知,但是两个节点实际都处于正常工作状态,这时两个节点均为master强行绑定虚拟IP,导致不可预料的后果,这就是脑裂。
2.产生原因
1.高可用服务器对之间心跳线链路发生故障,导致无法正常通信;
2.心跳线线路断开,老化;
3.网卡及相关驱动坏了,ip配置及冲突问题;
4.心跳线间连接的设备故障;
5.仲裁机器出现问题;
6.其他服务配置不当;
7.vrrp实例名字不一致、优先级一致;
8.高可用服务器上开启了iptables防火墙规则阻挡了心跳消息传输;
9.高可用服务器上心跳网卡地址等信息配置不正确,导致发送心跳失败;
10.Keepalived配置里同一 VRRP实例如果virtual_router_id两端参数配置不一致。
3.解决方案
1.当检测到脑裂时强行关闭一个心跳节点,关闭备用节点的监听;
2.多节点集群中,可以通过增加仲裁的机制,确定谁该获得资源;
3.对脑裂的监控报警,脚本监测;
检测思路:正常情况下keepalived的VIP地址是在主节点上的,如果在从节点发现了VIP,就设置报警信息。脚本(在从节点上)如下:
vim check.sh
#!/bin/bash
# 检查脑裂的脚本,在备节点上进行部署
LB01_VIP=192.168.100.100
LB01_IP=192.168.100.11
LB02_IP=192.168.100.12
#通过状态信息,过滤结果,并统计
while true
do
ping -c 2 -W 3 $LB01_VIP &>/dev/null
if [ $? -eq 0 -a `ip add|grep "$LB01_VIP"|wc -l` -eq 1 ];then
echo "machine is brain."
else
echo "machine is ok"
fi
sleep 5
done