首先,来说下什么是脑裂
脑裂:顾名思义就是脑袋炸裂,也就是左脑、右脑同时强制大脑资源,导致大脑不能正常工作,而左脑和右脑都认为对方损坏,而抢占资源。
再来说,Keepalived 脑裂
Keepalived 脑裂:在设置了虚拟VIP时,KEP会设置Master Backup 权值不同,虽然分主备但是在实际运行中,如果权值相同则会不分MB,从ip addr 看到的结果 双 IP同时抢占VIP 致使 kep只能给权值大的那一方。
原理分析:
首先来说kep的原理是利用网络vrrp协议来进行心跳判断故障的。那么基础环境必须支持VRRP,基础环境采用的是centos7.2 系统 防火墙为 firewall ,两个主备服务器通过心跳nginx线程是否激活判断故障,通过日志分析,抓包得知,主服务器挂掉时,会发送VRRP数据包给备用服务器,但是被对方防火墙拦截。
解决问题:
通过查看firewall官方文档得知,firewall默认拒绝VRRP包,默认拦截,这就不好玩了,也是问题的主要原因!
firewall-cmd –direct –permanent –add-rule ipv4 filter INPUT 0 –protocol vrrp -j ACCEPT
我们通过firewallcmd永久开启 对与ipv4的 vrrp 为 允许 ,主备服务器都要开启。
测试:
同时开KEP M权值 3 S权值 2 VIP默认给M ipaddr 查看 S已经没有虚拟VIP了 !
测试成功!
总结:
从原理出发,不能钻牛角,基础环境要具备协议流通。