keepalived脑裂问题及解决方案

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
posted on 2022-03-27 14:37  杨文昭  阅读(709)  评论(0编辑  收藏  举报