关于使用pt-heartbeat监测MySQL主从复制延迟的方法( 二 )

 
三、自动化监控
注意:如果想把这个输出结果加入自动化监控,那么可以使用如下命令使监控输出写到文件,然后使用脚本定期过滤文件中的最大值作为预警即可:注意--log选项必须在有--daemonize参数的时候才会打印到文件中,且这个文件的路径最好在/tmp下,否则可能因为权限问题无法创建# pt-heartbeat -D test --table=heartbeat --monitor --user=root --password=pwd --log=/opt/master-slave-delay.log --daemonize[root@master-server ~]# tail -f /opt/master-slave-delay.txt //可以测试,在主库上更新数据时,从库上是否及时同步,如不同步,可以在这里看到监控的延迟数据0.00s [ 0.00s, 0.00s, 0.00s ]0.00s [ 0.00s, 0.00s, 0.00s ]0.00s [ 0.00s, 0.00s, 0.00s ]0.00s [ 0.00s, 0.00s, 0.00s ]0.00s [ 0.00s, 0.00s, 0.00s ]0.00s [ 0.00s, 0.00s, 0.00s ].......下面是编写的主从同步延迟监控脚本,就是定期过滤--log文件中最大值(此脚本运行的前提是:启动更新主库heartbeat命令以及带上--log的同步延迟检测命令) 。如果发生延迟,发送报警 。# cat /root/check-slave-monitor.sh#!/bin/bashcat /opt/master-slave-delay.log > /opt/master_slave_delay.logecho -e > /opt/master-slave-delat.logmax_time=`cat /opt/master_slave_delay.log |grep -v '^$' |awk '{print $1}' |sort -k1nr |head -1`NUM=$(echo "$max_time"|cut -d"s" -f1)if [ $NUM == "0.00" ];thenecho "MySQL主从同步延迟一致"elseecho "Mysql主从数据同步有延迟"# TODO 这里添加报警fi结合crontab,每隔一分钟检查一次# mysql主从同步延迟检查* * * * * /bin/bash -x /root/check-slave-monitor.sh > /dev/null 2>&1 
关闭上面在主库上执行heartbeat的守护进程
方法一:可以用参数--stop去关闭# pt-heartbeat --stopSuccessfully created file /tmp/pt-heartbeat-sentinel这样就把在主上开启的进程杀掉了 。但是后续要继续开启后台进行的话,记住一定要先把/tmp/pt-heartbeat-sentinel 文件删除,否则启动不了方法二:直接kill掉进程pid(推荐这种方法)#ps -ef|grep heartbeatkill -9 15152 
最后总结:
通过pt-heartbeart工具可以很好地弥补默认主从延迟的问题,但需要搞清楚该工具的原理 。
重点了:默认的Seconds_Behind_Master值是通过将服务器当前的时间戳与二进制日志中的事件时间戳相对比得到的,所以只有在执行事件时才能报告延迟 。从库复制线程没有运行,也会报延迟 。
还有一种情况:大事务,一个事务更新数据长达一个小时,最后提交 。这条更新将比它实际发生时间要晚一个小时才记录到二进制日志中 。当从库执行这条语句时,会临时地报告备库延迟为一个小时,执行完后又很快变成0 。
以上就是今天的内容,希望读者朋友看完这篇文章后有所启发 。

【关于使用pt-heartbeat监测MySQL主从复制延迟的方法】


推荐阅读