keepalived脑裂解决方案

原创地址:https://blog.csdn.net/wdirdo/article/details/103011816

**

脑裂(split-brain)

**
指在一个高可用(HA)系统中,当联系着的两个节点断开联系时,本来为一个整体的系统,分裂为两个独立节点,这时两个节点开始争抢共享资源,结果会导致系统混乱,数据损坏。
对于无状态服务的HA,无所谓脑裂不脑裂;但对有状态服务(比如MySQL)的HA,必须要严格防止脑裂。(但有些生产环境下的系统按照无状态服务HA的那一套去配置有状态服务,结果可想而知…)

**

keepalived脑裂产生原因

**
①master node和backup node心跳线链路发生故障,导致无法正常通信。

②master node和backup node开启了iptables防火墙阻挡了心跳消息传输。

③master node和backup node心跳网卡地址等信息配置不正确,导致发送心跳失败。

④其他服务配置不当等原因,如心跳方式不同,心跳广插冲突、软件Bug等。

⑤Keepalived配置里同一 VRRP实例如果virtual_router_id两端参数配置不一致也会导致裂脑问题发生。

**

keepalived脑裂的解决办法

**
(1)硬件设施网线:

同时使用串行电缆和以太网电缆连接,同时用两条心跳线路,这样一条线路坏了,另一个还是好的,依然能传送心跳消息。
(2)划分一个专门的VLAN用于master node和backup node发送心跳
keepalived脑裂解决方案_第1张图片
**

keepalived脑裂解决方案

**
在备机执行监控,监控脚本如下

#!/bin/bash
#检查sprit-brain,在备节点执行
#set -x
LB01_VIP=10.110.60.166
LB01_IP=10.110.60.181
LB02_IP=10.110.60.191
#循环VIP是否可用,如果不可用让备节点启动VIP地址
while true
do
	ping -c 2 -W 3 $LB01_VIP &> /dev/null
		if [[ $? -eq 0 && `ip add | grep "$LB01_VIP" | wc -l` -eq 1 ]];then 
			echo "=======ha is split-brain========"
			echo "=======TODO 告警,执行备机切换========"
			break
		else
			echo "=======ha is ok========"
		fi
		sleep 5
done



#function ping_test(){
# ping -c 1 -w 3 $1 &>/dev/null
# if [[ $? -eq 0 ]]; then
#  echo $1 "ping 测试success"
# else
#  echo $1 "ping 测试failed"
# fi
#}


#ip_list=(10.110.60.181 10.110.60.192)
#for (( i = 0; i < ${#ip_list[@]}; i++ )); do
# ping_test ${ip_list[i]}
#done

你可能感兴趣的:(keepalived)