我们线上DB的高可用部分采用的是官方原版的MySQL-MMM(http://mysql-mmm.org),但在最近几日出现2次写VIP自动切换到了备Master节点上(双Master单写),其实主Master也是正常的,于是就去MySQL-MMM Monitor节点查看了一下日志,
# cd /var/log/mysql-mmm
# tail -30 mmm_mond.log

wKioL1S0uzGyiRWlAAJ4YEvfUUw605.jpg

初步看来是因为存在主从复制延迟,导致了写VIP切换。查阅了一下官方文档,在monitor节点,与此相关的参数为max_backlog,而此参数的默认值为60,于是我们将其修改300,详细如下:

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

......

<check default>
        check_period  5
        trap_period     10
        timeout            2
        restart_after     10000
        max_backlog   300
</check>

......

然后重启服务:

# /etc/init.d/mysql-mmm-monitor restart

随后输出如下信息:

# cd /var/log/mysql-mmm
# tail -30 mmm_mond.log

wKiom1S0vOjAWlUpAAHj6o_6C6M774.jpg

同时也加了一些简单监控:

(1)、进程个数监控脚本

# vim /data/scripts/monitor_proc_cnt.sh

#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin
 
PROC_NAME=$1
SRV_NAME=$2
PROC_CNT=$3
 
[[ $# -ne 3 ]] && echo "$0 进程名称 服务名称 进程数量" && exit 1
 
MONITOR="/usr/local/oms/agent/alarm/BusMonitorAgent"
TOKEN="ha_monitor"
 
TITLE="${PROC_NAME}服务异常监控"
CONTENT="${PROC_NAME}服务进程数存在异常,请及时检查!"
 
if  [[ `ps aux | grep ${PROC_NAME} | grep -v grep | grep -v $0 | wc -l` -ne ${PROC_CNT} ]]; then
    kill -9 `ps aux | grep ${PROC_NAME} | grep -v grep | grep -v $0 | awk '{print $2}'` >/dev/null 2>&1
    /sbin/service ${SRV_NAME} start >/dev/null 2>&1
    ${MONITOR} -c 2 -f ${TOKEN} -t "${TITLE}" -i "${CONTENT}"
fi

(2)、在线DB的监控脚本

# vim /data/scripts/monitor_db_is_online.sh

#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin
 
MONITOR="/usr/local/oms/agent/alarm/BusMonitorAgent"
TOKEN="ha_monitor"
 
TITLE="MySQL-MMM Online异常监控"
CONTENT="处于Online状态的DB数量与实际DB数量不匹配,请及时确认!"
 
MYSQL_SRV_CNT=`awk '/ping_ips/{print $2}' /etc/mysql-mmm/mmm_mon.conf | sed 's/,/\n/g;/^$/d' | wc -l`
CURRENT_ONLINE_SRV_CNT=`/usr/sbin/mmm_control show | grep ONLINE | wc -l`
 
[[ ${MYSQL_SRV_CNT} -eq ${CURRENT_ONLINE_SRV_CNT} ]] || ${MONITOR} -c 2 -f ${TOKEN} -t "${TITLE}" -i "${CONTENT}"

(3)、crontab信息添加

agent节点:

*/5 * * * * /data/scripts/monitor_proc_cnt.sh mmm_agentd mysql-mmm-agent 2 >/dev/null 2>&1

monitor节点:

*/5 * * * * /data/scripts/monitor_proc_cnt.sh mmm_mond mysql-mmm-monitor 2 >/dev/null 2>&1

*/5 * * * * /data/scripts/monitor_db_is_online.sh >/dev/null 2>&1

也顺便排查了一下导致主从复制延迟的问题,并观察了几天,没有再次出现之前的写VIP切换与报错日志。虽然恢复了正常,但总会出现如下信息:

wKioL1S0wc_CY1w8AABs5zu33Hs371.jpg

查阅了一些资料,也没找到太好的解决办法,虽然影响不大,但总觉得是个隐患,看来得花点时间硬着头皮看看perl源码 j_0066.gif


最近发现大众点评--卢钧轶开源了一个修改版本,据说修复了很多BUG,有空可以试试:

https://github.com/cenalulu/mysql-mmm