网卡重启后,如何恢复MHA的虚IP

时间:2023-01-09 00:20:18

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的。