使用pt-heartbeat监控MySQL主从复制

安装
在132.224.128.113/114/105上安装Percona Toolkit,安装过程略,见Percona Toolkit学习文档

部署

  1. 首先在主服务器132.224.128.113上创建一个定期更新的heartbeat表,以bcp数据库为例:
    pt-heartbeat -D bcp --update -u heg --ask-pass -S /app/mysql/3306/mysql.sock --create-table --daemonize
    默认更新时间为1秒一次,可以使用interval参数来指定

参数说明:
-D 需要监控的数据库,这里选择监控bcp数据库
–update会在指定的时间更新一个时间戳,-u 用户,–ask-pass 交互式输入密码
–create-table自动生成heartbeat表,–daemonize在后台运行
如果想查看更多的参数可以使用pt-heartbeat --help
执行完毕以后可以在bcp库下看到新生成了一张heartbeat的表

查看进程及表:

  1. 监控复制在从库上的落后程度
    有了heartbeat表之后,就可以监控复制在从库上的落后程度了。
    pt-heartbeat -D bcp -u heg --ask-pass -S /app/mysql/3306/mysql.sock --master-server-id=1281133306 --monitor
    参数说明:
    –monitor会连接到从库上检查的心跳记录,并与当前的时间相比,得出复制的延迟,也可以通过-h来指定备库的地址,注意这里要求提供主库的server_id,否则会启动报错,如果没有heartbeat表也会报错,当运行正常时,以132.224.128.114为例,显示如下:

由于当前压力较小,如上,备库可以跟上主库的进度,复制延迟一直为0,模拟大的数据DML操作并产生延时已经在测试环境上进行过,生产环境不再模拟。
输出当中,0表示没有延迟,[ 0.00s, 0.00s, 0.00s ] 表示1m,5m,15m的平均值。可以通过–frames去设置。
将–monitor选项替换为–check选项,可以只监控一次之后就退出,以132.224.128.105为例:

  1. 后台更新heartbeat在二进制日志中的体现
    mysqlbinlog --no-defaults mysql-bin.000072 |tail -n 30

可以看到heartbeat表的更新。
以上是测试环境的二进制日志,生产环境二进制日志刷新较快,不再查看。

  1. 主库上heartbeat表默认的更新频率是每秒一次,可以设置为2秒一次如下:
    pt-heartbeat -D bcp -u root --ask-pass -P 3306 -h localhost --interval=2 --update --daemonize
    注意检查进程

  2. 停止主库上的pt-heartbeat守护进程
    pt-heartbeat --stop

可以看到已经没有pt-heartbeat后台进程,且heartbeat表不再更新,此时在从库上进行检查,会发现延迟值不断增大

当然了,也可以直接通过kill -9 进程号的方式来停止守护进程。
以上是测试环境进行的停止,生产环境不再模拟。

  1. 重新启动主库上的守护进程,换成管理员账号heg
    pt-heartbeat --user=heg --ask-pass -S /app/mysql/3306/mysql.sock -D bcp --master-server-id=1281053306 --update --daemonize

启动会失败,需要先删除之前–stop时候生成的/tmp/pt-heartbeat-sentinel文件,然后再启动。
以上是测试环境进行的重启,生产环境不再模拟。

  1. 使用守护进程监控从库并输出日志,以132.224.128.105为例:
    pt-heartbeat -u heg --ask-pass -h 132.224.128.105 --port 3306 --master-server-id=1281133306 --monitor -D bcp --print-master-server-id --daemonize --log=/app/heg/pt-heartbeat/slave_lag_128105_bcp.log
    注意–log选项必须在有–daemonize参数的时候才会打印到文件中,且这个文件的路径最好在/tmp下,否则可能因为权限问题无法创建。

监控
在两台从库132.224.128.105和132.224.128.114上部署了监控脚本和定时任务如下:
#!/bin/bash
#本脚本用于获取pt-heartbeat monitor日志文件的内容并加入IT网管监控

LogFile=/app/heg/pt-heartbeat/slave_lag_128105_bcp.log
UnionmonLogFile=/app/heg/pt-heartbeat/slave_lag_unionmon.log
UnionmonLogTxt=/app/heg/pt-heartbeat/slave_lag_unionmon.txt

#清空临时处理文件

$UnionmonLogFile

#获取当前pt-heartbeat monitor日志文件到临时处理文件
cat $LogFile > $UnionmonLogFile

#为避免pt-heartbeat monitor日志文件持续增长,清空之

$LogFile

max_time=cat $UnionmonLogFile |grep -v '^$' |awk '{print $1}' |sort -k1nr |head -1
NUM= ( e c h o " (echo " (echo"max_time"|cut -d"s" -f1)
if [ $NUM == “0.00” ];then
echo Time: $(date +%Y%m%d%H%M%S) >> $UnionmonLogTxt
echo Max Lag Time: $NUM seconds >> $UnionmonLogTxt
echo “Mysql主从数据一致” >> U n i o n m o n L o g T x t e l i f [ ‘ e c h o &quot; UnionmonLogTxt elif [ `echo &quot; UnionmonLogTxtelif[echo"NUM < 5.00" | bc` -eq 1 ];then
echo Time: $(date +%Y%m%d%H%M%S) >> $UnionmonLogTxt
echo Max Lag Time: $NUM seconds >> $UnionmonLogTxt
echo “Mysql主从数据同步有较小延迟” >> $UnionmonLogTxt
else
echo Time: $(date +%Y%m%d%H%M%S) >> $UnionmonLogTxt
echo Max Lag Time: $NUM seconds >> $UnionmonLogTxt
echo “Mysql主从数据同步有较大延迟,请注意检查复制状况” >> $UnionmonLogTxt
echo “Mysql replication delay,please check manually” >> $UnionmonLogTxt
fi

#crontab
#0,10,20,30,40,50 * * * * /app/heg/pt-heartbeat/slave_lag_monitor.sh
参数
pt-heartbeat [OPTIONS] [DSN] --update|–monitor|–check|–stop

注意:需要指定的参数至少有 --stop,–update,–monitor,–check。其中–update,–monitor和–check是互斥的,–daemonize和–check也是互斥。
–ask-pass 隐式输入MySQL密码
–charset 字符集设置
–check 检查从的延迟,检查一次就退出,除非指定了
–check-read-only 如果从服务器开启了只读模式,该工具会跳过任何插入。
–create-table 在主上创建心跳监控的表,如果该表不存在,可以自己手动建立,建议存储引擎改成memory。通过更新该表知道主从延迟的差距。
–daemonize 执行时,放入到后台执行
–user=-u, 连接数据库的帐号
–database=-D, 连接数据库的名称
–host=-h, 连接的数据库地址
–password=-p, 连接数据库的密码
–port=-P, 连接数据库的端口
–socket=-S, 连接数据库的套接字文件
–file 【–file=output.txt】 打印–monitor最新的记录到指定的文件,很好的防止满屏幕都是数据的烦恼。
–frames 【–frames=1m,2m,3m】 在–monitor里输出的[]里的记录段,默认是1m,5m,15m。可以指定1个,如:–frames=1s,多个用逗号隔开。可用单位有秒(s)、分钟(m)、小时(h)、天(d)。
–interval 检查、更新的间隔时间。默认是见是1s。最小的单位是0.01s,最大精度为小数点后两位,因此0.015将调整至0.02。
–log 开启daemonized模式的所有日志将会被打印到制定的文件中。
–monitor 持续监控从的延迟情况。通过–interval指定的间隔时间,打印出从的延迟信息,通过–file则可以把这些信息打印到指定的文件。
–master-server-id 指定主的server_id,若没有指定则该工具会连到主上查找其server_id。–print-master-server-id 在–monitor和–check 模式下,指定该参数则打印出主的server_id。–recurse 多级复制的检查深度。模式M-S-S…不是最后的一个从都需要开启log_slave_updates,这样才能检查到。
–recursion-method 指定复制检查的方式,默认为processlist,hosts。
–update 更新主上的心跳表。
–replace 使用–replace代替–update模式更新心跳表里的时间字段,这样的好处是不用管表里是否有行。
–stop 停止运行该工具(–daemonize),在/tmp/目录下创建一个“pt-heartbeat-sentinel” 文件。后面想重新开启则需要把该临时文件删除,才能开启(–daemonize)。
–table 指定心跳表名,默认heartbeat。

注意事项
使用pt-heartbeat来监控的主从库服务器之间应该通过NTP来保证时钟的一致性。
参考文档
https://blog.csdn.net/qq_33285112/article/details/78794075
https://blog.csdn.net/z1547840014/article/details/10174667
https://blog.csdn.net/leshami/article/details/41791687
https://blog.csdn.net/leshami/article/details/41645493

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值