故障现象:bash
主机名 | director-A | director-B |
IP | 192.168.14.128 | 192.168.14.131 |
默认主备 | MASTER | BACKUP |
优先级 | 90 | 80 |
VIP为 192.168.14.201ssh
先启动主节点keepalived服务,后启动备节点keepalived,发现主备节点都配置了vip。tcp
分析与解决过程:
理应主节点启动keepalived后发送vrrp广播报文,备节点启动keepalived后由于配置同一个广播域,能收到vrrp广播报文,从而运行在BACKUP状态,一直监听着MASTER发送的vrrp广播。ide
首先检查BACKUP节点message日志,发现keepalived先进入BACKUP状态(根据keepalived.conf配置,正常行为),但间隔4s后vrrp实例切换为MASTER状态,这行为不符合正常逻辑。spa
而备vrrp实例切换为MASTER的缘由一般是必定时间内没有收到MASTER节点发出的vrrp广播报文,所以在备节点物理网卡上tcpdump抓包可见,主节点192.168.14.128发出的vrrp广播报文已经到达备节点。这种状况下,keepalived仍认为主节点是down,极可能是OS对物理网卡收到的vrrp广播报文并未送进内核,keepalived进程没法从捕获主节点发出的vrrp报文。.net
所以要检查Linux防火墙Selinux和iptables规则
跟踪iptables规则发现,默认的iptables规则仅容许22端口和icmp报文经过
尝试经过另外一个客户端192.168.14.129访问备节点80端口,在客户端就能抓包icmp 通知报文。
此iptables链表结构为系统默认配置,该链结构太过复杂,且多有iptables链为空链。所以将多余的iptables规则清理掉,多余的iptables链删除,容许全部报文经过便可。
此时问题已解决,keepalived只有MASTER节点配置vip,且主备节点之间切换vip正常。
不过vip切换的问题虽然解决了,但iptables的遗留问题是在配置文件/etc/sysconfig/iptables中并未配置以上复杂的iptables规则,且重启系统以后,也仍然会生成以上复杂的iptables规则。修改了/etc/sysconfig/iptables-config配置也在重启系统后被复原。定是那系统启动脚本搞得鬼,还得继续排查。
原文转载至:
http://blog.51cto.com/13599730/2161622