解决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

相关推荐
洛水水13 小时前
图解式讲解内存池:告别内存碎片与随机coredump
linux·内存池
NightReader13 小时前
SSH Client推荐集
运维·ssh
小章UPUP14 小时前
2025-2026 新FFmpeg GUI工具推荐
linux
探索宇宙真理.14 小时前
Nginx UI MCP接口绕过认证漏洞 | CVE-2026-33032复现&研究
运维·经验分享·网络安全·nginx-ui
llm大模型算法工程师weng15 小时前
负载均衡做什么?nginx是什么
运维·开发语言·nginx·负载均衡
byoass15 小时前
企业云盘私有化部署:存储架构设计与安全运维全流程实战
运维·网络·安全·云计算
fTiN CAPA15 小时前
服务器无故nginx异常关闭之kauditd0 kswapd0挖矿病毒 CPU占用200% 内存耗尽
运维·服务器·nginx
北山有鸟16 小时前
相机的水平消隐与垂直消隐
linux·驱动开发·相机
love530love16 小时前
修复 ComfyUI 插件 ComfyUI-BiRefNet-ZHO 报错 - Windows
服务器·人工智能·windows·python·birefnet-zho
还不秃顶的计科生16 小时前
多模态模型下载
java·linux·前端