MHA环境下,如果人工重启了MHA Master上的网卡后,MHA的虚IP会丢失。由于网卡重启的时间很短,并且重启后原物理IP还在,ssh是可以通的,
所以并不会触发MHA虚IP的切换。
但此时MHA的写IP将不能提供服务?如何自动修复这个问题呢?# ip a
ip a|grep eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
inet 172.31.18.84/27 brd 172.31.18.95 scope global eth0
inet 172.31.18.93/32 scope global eth0
在执行完 service network restar 命令后,原本在eth0上的VIP 172.31.18.93 丢失。
# service network restart
# ip a
ip a|grep eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
inet 172.31.18.84/27 brd 172.31.18.95 scope global eth0
在重启网卡后,手工执行命令重新绑定VIP。这个操作对于熟悉MHA的人来说,这个操作或许可行。
但如果是不懂MHA的同事误操作,则会影响到线上环境的运行。
ip addr add 172.31.18.93/32 dev eth0现在要做的是把这个命令加入到重启网卡的脚本中即可。
CentOS release 6.*中重启网卡用的是/etc/init.d/network 这个脚本,我们在这个脚本里做个小小的改动,就可以解决这个问题。
#vi /etc/init.d/network
153 [ -n "${NETWORKDELAY}" ] && /bin/sleep ${NETWORKDELAY}
154 /bin/sh /usr/local/bin/bondvip.sh
bondvip.sh脚本内容如下:
#!/bin/bash
if
ping -c 2 172.31.18.93 |grep -q 'ttl='
then
exit 0
else
ip addr add 172.31.18.93/32 dev eth0
fi
这样当网络重启时,只要mysql服务正常,是不会影响MHA绑定的VIP的。