现场通过ifdown下载网卡的方式测试 keepalived部署的集群;
脚本大概如下:
#禁用网卡和启用网卡时间间隔,单位为秒
times=30
#操作网卡的名字
ethname="eth0"
ifdown $ethname
if [ $? -eq 0 ]; then
echo "ifdown $ethname succeed"
fi
for i in `seq 1 ${times}`
do
sleep 1
done
ifup $ethname
发现备机运行的keepalived一直拿不到VIP;
排查
keepalive配置不正确
通过比较发现配置皆正确
! Configuration File for keepalived
global_defs {
router_id NGINX1
}
vrrp_script chk_nginx {
script "pidof nginx"
interval 2
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 1111
}
unicast_src_ip 192.168.2.6
unicast_peer {
192.168.2.7
}
virtual_ipaddress {
192.168.2.8
}
track_script {
chk_nginx
}
}
ip被占用
ping 主机IP和ping VIP 都不通,说明IP未被占用
备机kp程序有问题
进入容器发现容器正常运行
网络白名单问题
添加过白名单IP,且后续测试时发现可正常切换
查看kp日志
当kp在容器中运行时,默认输出到docker容器的控制台日志中,并未在系统日志产生
通日志获取到:
发现备机处于SLAVE状态,且一起保持,可能说明他自己还收到ARRP的协议
问题解析
发现备机处于SLAVE状态,且一起保持,可能说明他自己还收到ARRP的协议
顺着这条思路查询
- 以前确实遇到过一次,手动ifdown网卡,竟然发现VIP有时候脑裂,有时候并没有迁移;
- 搜索的结果1
《虚拟机环境中Keepalived虚拟IP自动漂移的研究》
当我们使用ifdownens192命令关闭网络接口时,异常情况发生了:ens192接口被禁用后,在Backup节点仍然可以正常、持续收到Master节点发送的VRRP心跳包(prio值非0),但此时Master节点的IP地址已经不可用(ens192上的两条IP192.168.2.5、192.168.2.6均已丢失),而Master节点的Keepalived服务也因为获取不到IP信息进入inactive(dead)状态。由于Backup节点仍能持续收到Master节点发来的VRRP心跳包,因此Backup节点此时仍认为Master节点工作正常,导致虚拟IP不能漂移至Backup节点,故障转移失效。
- 搜索结果2
《执行ifdown命令后,为什么无法完全停止物理网卡?》
因为环境中部署了FusionInsight,假设FusionInsight的浮动ip eth*:0 启动在eth1上,此时执行ifdown eth1后,eth1网卡不会停止,因为FusionInsight会自动拉起eth1:0自己的浮动IP,导致eht1不会完全down掉。
结果2也是第一次发现时,就已经给出的一个答案,现在看下,越来越真实;
现场的问题也与这现象一致,果断重启主机keepalived,不再保留案发现场,问题结果