天天看点

采用MySQL-MMM做DB高可用时,遇到的一个小坑

一、服务器分布

采用MySQL-MMM做DB高可用时,遇到的一个小坑

二、MySQL-MMM 配置

(1)、公共配置【所有DB节点:Master1、Master2、Slave1、Slave2   Monitor节点】

# vim /etc/mysql-mmm/mmm_common.conf

(2)、Agent节点【所有DB节点:Master1、Master2、Slave1、Slave2】

Master1节点:

三、问题描述及解决方案

1、问题描述

当Master1发生故障,导致DB不可用时,VIP会自动漂移到Master2上,以实现高可用。但出现了一个问题,由于ARP老化时间过长,导致漂移过去的VIP不可用,也无法ping通。也就是说,MySQL-MMM没有考虑到ARP老化时间过长的情况而采取强刷ARP的方式。

2、解决方案

方法一(手动命令强刷)

获取网关地址:

采用MySQL-MMM做DB高可用时,遇到的一个小坑

# arping -I eth1 -c 3 -s10.222.5.224 10.222.0.1

采用MySQL-MMM做DB高可用时,遇到的一个小坑

方法二(代码级别修正)

# vim /usr/share/perl5/vendor_perl/MMM/Agent/Helpers/Actions.pm

采用MySQL-MMM做DB高可用时,遇到的一个小坑

方法三(SHELL脚本方式)

# vim /data/scripts/refresh_vip.sh

需要添加的crontab信息【每10秒刷新一次】:

* * * * * sleep 10; /data/scripts/refresh_vip.sh >/dev/null 2>&1

* * * * * sleep 20; /data/scripts/refresh_vip.sh >/dev/null 2>&1

* * * * * sleep 30; /data/scripts/refresh_vip.sh >/dev/null 2>&1

* * * * * sleep 40; /data/scripts/refresh_vip.sh >/dev/null 2>&1

* * * * * sleep 50; /data/scripts/refresh_vip.sh >/dev/null 2>&1