一、背景
-
脑裂(split-brain):指在一个高可用(HA)系统中,当联系着的两个节点断开联系时,本来为一个整体的系统,分裂为两个独立节点,这时两个节点开始争抢共享资源,结果会导致系统混乱,数据损坏。
对于无状态服务的HA,无所谓脑裂不脑裂;但对有状态服务(比如MySQL)的HA,必须要严格防止脑裂。
MASTER 192.168.1.124:安装Lvs+Keepalived
BACKUP 192.168.1.126:安装Lvs+Keepalived
VIP:192.168.1.110
安装完Lvs+keepalived后,正常情况下,应该是master主机拥有vip,但是当你在两台keepalived主机上执行
ip addr
如果看到两台机器都绑定了vip那么就是出现了双vip的现象,即脑裂现象。例如下面
-
master
-
backup
二、解决
1.查看keepalived日志情况
- 分别重启一下两台机器的keepalived服务
systemctl restart keepalived
- 观察日志
tail -f /var/log/messages
-
此处我的情况发现,Master重启后,它会直接去争抢master;BackUp重启后,先是进入BackUp状态,然后马上又会争抢进入Master状态。
- 出现这种情况,应该是两者之前VRRP失效了,有可能backup主机没有收到master主机的广播,所以自己去争抢了master权限。下面在主机上看看广播情况。
- 安装tcpdump抓包工具
yum install tcpdump -y
- 在局域网内的任意一台机器上执行命令,查看广播情况(注意自己的网卡名称此处我的是ens33)
tcpdump -i ens33 vrrp -n
-
master:192.168.1.124 与 backUp:192.168.1.126都在广播,正常情况下backUp应该是不广播才对。
- 尝试关闭防火墙,将master与backup的防火墙都关闭
systemctl stop firewalld.service
-
就会发现只有Master在发广播了
-
并且会发现在backUp主机上执行 ip addr ,其没有绑定vip了。情况恢复正常。
三、结论
- 我此处发现的脑裂,应该是防火墙将vrrp 广播给过滤掉了,导致backup接受不到master的广播,然后自己去争抢了vip。所以此处我将防火墙关闭了,如果有对防火墙要求,可以只将防火墙的vvrp开启。注意命令中要修改自己的网卡名称ens33
firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface ens33 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --reload