CentOS下keepalived脑裂处理


工作需要在CentOS8搭一套双Nginx+keepalived的测试环境,本以为搭建过程能够比较顺利的进行,但是还是遇到了keepalived脑裂的问题。

名词解释

脑裂:指keepalived的主备节点同时拥有了虚ip地址。正常情况虚ip应该只存在于主节点,只有在主节点无效的时候才会漂移至备节点。

平常有时会处理一些涉及些安全方便的问题,所以我一般安装或管理的操作系统,无论Windows或Linux,只要系统自带防火墙,我就没有关防火墙的习惯,我的习惯是在需要的时候去防火墙做相应的策略。

这个问题首先想到的是配置问题,查看keepalived配置文件无误后,确定应该是防火墙阻止了相应的数据报文,主备节点无法正常通信导致脑裂。

登录两台服务器分别查看ip地址信息。如下图:

发现无论主备节点都有虚ip,其中193是主节点,194是备节点,199是虚ip。

一开始准备通过开放端口的形式进行处理。查看相关资料后发现,keepalived使用VRRP协议进行通信,它是一个组播协议,在IPv4下使用组播地址224.0.0.18通信。这样就不能使用简单的开放端口方式进行处理了,需要写对应的协议规则进行匹配,主备节点都需要配置。

先在防火墙public区域开放VRRP协议,命令如下:

firewall-cmd --zone=public --add-protocol=vrrp --permanent

再写入对应协议在相应网络端口的匹配规则,命令如下:

firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface eth0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT

重载防火墙配置

firewall-cmd --reload

以上命令执行如下图:

查看一下防火墙信息,发现已经有vrrp协议。如下图:

查看主备节点ip地址信息,发现虚ip已经只存在于主节点,说明脑裂已经解决。如下图: