解决keepalived的主备服务器都持有VIP——出现脑裂现象

一、问题描述

1.1、脑裂

当我们使用keepalived方案给服务做主备高可用时,若我们的防火墙是开启状态,那么就会出现主备服务器的网卡都绑定上了VIP(即:两主,这也称为脑裂【本来在一个高可用HA的系统中,主备服务器是一个整体的系统,同一时间只能有一个提供服务,但现在却分裂为了两个独立的节点,这样就会两个节点争抢共享资源,会导致系统混乱、数据损坏等情况】,因此必须防止脑裂)【这是由于keepalived软件是MASTER【192.168.1.10】定时发送vrrp到BACKUP【192.168.1.40】来维持主备关系的,若是BACKUP收不到从主机发送来的vrrp包,则BACKUP会升级为MASTER】。

通过keepalived搭建MySQL双主模式的MySQL集群https://blog.csdn.net/xiaochenXIHUA/article/details/152114041?spm=1001.2014.3001.5501

1.2、观察日志

我们可以手动模拟keepalived的服务故障后,观察【/var/log/messages】日志内容(即可以新开一个终端直接运行【tail -f /var/log/messages】命令持续查看日志内容)。通过观察日志可以发现,当MASTER上的服务或keepalived重启后,先是BACKUP状态,然后会去争抢MASTER后变为了MASTER状态;而BACKUP服务故障或者重启后也是一样先进入BACKUP状态,然后会去争抢MASTER后变为了MASTER状态,如下图所示:

二、问题分析

之所以出现以上的keepalived主备都持有VIP,结合keepalived的vrrp原理,应该是主备服务器直接的vrrp失效了(即:当MASTER定时发送vrrp流量给BACKUP来维持主备关系时,由于BACKUP没有收到,因此去争抢了MASTER权限),我们可以通过使用【tcpdump】抓包工具来查看广播情况,相信操作如下:

bash 复制代码
#抓包分析keeaplived的vrrp广播数据

#1-安装tcpdump抓包工具
yum install tcpdump -y

#2-可在keepalived主备服务器所在局域网内的任意一台机器上执行抓包命令查看广播情况(注意:如下的ens33是网卡名称需要根据自己的实际网卡修改【ip addr】命令可以查询到网卡等信息)
#【正常情况下应该BACKUP这个备的服务器是不应该发送vrrp广播的】
tcpdump -i ens33 vrrp -n


#3-关闭keepalived的主备所在服务器的防火墙后再抓取vrrp广播数据包
#【可以看到只有MASTER(192.168.1.10)在发vrrp广播了】
systemctl stop firewalld
tcpdump -i ens33 vrrp -n

根据抓包的实际情况可以看到我们关闭了防火墙就可以让keepalived的主备高可用成功运行而不产生脑裂;若我们的防火墙开启就会有问题,也就是说我们需要给防火墙放开vrrp的广播数据包,详细操作如下图所示:

三、解决方法

配置防火墙允许VRRP流量通过https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html/load_balancer_administration/s1-lvs-connect-vsa#firewallrequirements-VSA

bash 复制代码
#方法一:若我们开启的是【firewalld】防火墙则添加vrrp广播的操作如下
#【keepalived的主备所在服务器都需要操作】查看firewalld防火墙状态,若没启动则启动,然后添加允许vrrp广播通过的规则
systemctl status firewalld.service
systemctl restart firewalld.service
firewall-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanent
firewall-cmd --reload
firewall-cmd --list-all


#方法二:若我们开启的是【iptables】则打开【iptables】文件添加接收vrrp的规则
#【keepalived的主备所在服务器都需要操作】查看iptables状态,然后添加允许vrrp广播通过的规则
systemctl status iptables
systemctl restart iptables
cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak
iptables -I INPUT -p vrrp -j ACCEPT
iptables-save > /etc/sysconfig/iptables
systemctl restart iptables
iptables -nL

《1》【keepalived的主备所在服务器】通过firewalld添加允许vrrp广播通过的规则实操流程:

《2》【keepalived的主备所在服务器】通过iptables添加允许vrrp广播通过的规则实操流程:

文档 - 手册页 - firewalld.richlanguage |防火墙dhttps://firewalld.org/documentation/man-pages/firewalld.richlanguage.htmlVRRP的原理与配置(附实验)https://www.cnblogs.com/weq0805/p/14817519.htmlVRRP 的原理与配置,你了解多少?https://www.zhihu.com/question/512114545

相关推荐
YuMiao14 小时前
gstatic连接问题导致Google Gemini / Studio页面乱码或图标缺失问题
服务器·网络协议
chlk1231 天前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
舒一笑2 天前
Ubuntu系统安装CodeX出现问题
linux·后端
改一下配置文件2 天前
Ubuntu24.04安装NVIDIA驱动完整指南(含Secure Boot解决方案)
linux
碳基沙盒2 天前
OpenClaw 多 Agent 配置实战指南
运维
深紫色的三北六号2 天前
Linux 服务器磁盘扩容与目录迁移:rsync + bind mount 实现服务无感迁移(无需修改配置)
linux·扩容·服务迁移
SudosuBash2 天前
[CS:APP 3e] 关于对 第 12 章 读/写者的一点思考和题解 (作业 12.19,12.20,12.21)
linux·并发·操作系统(os)
哈基咪怎么可能是AI3 天前
为什么我就想要「线性历史 + Signed Commits」GitHub 却把我当猴耍 🤬🎙️
linux·github
十日十行3 天前
Linux和window共享文件夹
linux
Sinclair3 天前
简单几步,安卓手机秒变服务器,安装 CMS 程序
android·服务器