天天看點

采用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