当前位置:主页 > 查看内容

Percona Toolkit系列 — pt-heartbeat

发布时间:2021-07-09 00:00| 位朋友查看

简介:前言 说起MySQL主从延迟,相信大家都不陌生,关于主从延迟的监控,可以通过命令SHOW SLAVE STATUS去实现,但是这种方式在某些情况下并不是那么可靠(具体原因这里不展开介绍);因此,percona推出了一个更加可靠的监控工具,也就是今天要给大家介绍的pt-hear……

前言

说起MySQL主从延迟,相信大家都不陌生,关于主从延迟的监控,可以通过命令SHOW SLAVE STATUS去实现,但是这种方式在某些情况下并不是那么可靠(具体原因这里不展开介绍);因此,percona推出了一个更加可靠的监控工具,也就是今天要给大家介绍的pt-heartbeat。

pt-heartbeat,主要有两部分组成。第一部分是定期连接上主库,更新心跳表的时间戳;第二部分是定期连接上从库,获取心跳表的时间戳,并与操作系统时间对比计算时间差,从而得出主从延迟大小。接下来我们也可以通过general log来观察一下具体实现原理。

(1)主库:获取主从状态信息,并更新心跳表

2021-05-18T17:00:33.000477+08:00           19 Query     SHOW MASTER STATUS
2021-05-18T17:00:33.000646+08:00           19 Query     SHOW SLAVE STATUS
2021-05-18T17:00:33.000956+08:00           19 Query     UPDATE `percona_schema`.`heartbeat` SET ts='2021-05-18T17:00:33.000850', file='mysql-bin.000083', position='332025', relay_master_log_file='mysql-bin.000085', exec_master_log_pos='191163241' WHERE server_id='571'
2021-05-18T17:00:34.000333+08:00           19 Query     SHOW MASTER STATUS
2021-05-18T17:00:34.000545+08:00           19 Query     SHOW SLAVE STATUS
2021-05-18T17:00:34.000877+08:00           19 Query     UPDATE `percona_schema`.`heartbeat` SET ts='2021-05-18T17:00:34.000740', file='mysql-bin.000083', position='332716', relay_master_log_file='mysql-bin.000085', exec_master_log_pos='191163913' WHERE server_id='571'

(2)从库:BEGIN ... COMMIT是在回放日志,然后获取心跳表的时间戳

2021-05-18T17:00:01.009506+08:00            3 Query     BEGIN
2021-05-18T17:00:01.009654+08:00            3 Query     COMMIT /* implicit, from Xid_log_event */
2021-05-18T17:00:01.500351+08:00           16 Query     SELECT ts/*!50038, @@hostname AS host*/, server_id FROM `percona_schema`.`heartbeat` WHERE server_id='571' LIMIT 1
2021-05-18T17:00:02.022146+08:00            3 Query     BEGIN
2021-05-18T17:00:02.022311+08:00            3 Query     COMMIT /* implicit, from Xid_log_event */
2021-05-18T17:00:02.500345+08:00           16 Query     SELECT ts/*!50038, @@hostname AS host*/, server_id FROM `percona_schema`.`heartbeat` WHERE server_id='571' LIMIT 1

pt-heartbeat

基本用法

(1)基本语法

pt-heartbeat [OPTIONS] [DSN] --update|--monitor|--check|--stop

(2)常见选项

--host:-h,IP地址
--port:-P,端口
--socket:-S,套接字文件
--user:-u,用户名
--password:-p,密码
--charset:-A,字符集
--database:-D,数据库
--table:表名
--ask-pass:提示手动输入密码
--daemonize:后台运行
--file:指定存储最新主从延迟信息的文件
--log:指定存储所有主从延迟信息的文件
--create-table:创建心跳表
--create-table-engine:指定心跳表的存储引擎
--[no]insert-heartbeat-row:如果心跳表没有记录,指定是否插入一条记录,默认为是
--dbi-driver:指定连接的数据库类型,目前支持mysql和pg
--frames:指定主从延迟平均值的统计时间跨度,默认是1m,5m,15m
--update:持续更新心跳表
--replace:使用replace替代update
--monitor:持续检测主从延迟
--check:检测主从延迟一次,然后退出
--check-read-only:检测主从延迟一次(在实例read_only=on的情况下,该工具跳过任何insert操作)
--stop:停止运行
--run-time:运行时间,默认永久
--interval:update/monitor/check的时间间隔
--read-only-interval:check-read-only的时间间隔
--master-server-id:指定主节点的server id
--print-master-server-id:打印主节点的server id
--recurse:递归查找从节点信息
--recursion-method:递归查找从节点的方法,默认processlist,hosts(可选processlist:HOW PROCESSLIST,hosts:SHOW SLAVE HOSTS,none:Do not find slave)
--slave-user:指定从节点的连接用户
--slave-password:指定从节点的连接用户密码
--fail-successive-errors:指定连接失败多少次后,该工具退出

(3)DSN选项

h:IP地址
P:端口
S:套接字文件
u:用户名
p:密码
A:字符集
D:数据库
t:表

具体输出

(1)主库

$ pt-heartbeat h=10.1.4.9,P=10057,u=test,p=xxx --database percona_schema --table heartbeat --create-table --update --daemonize

(2)从库:

$ pt-heartbeat h=10.1.4.5,P=10057,u=test,p=xxx --database percona_schema --table heartbeat --print-master-server-id --monitor
0.00s [  0.00s,  0.00s,  0.00s ] 571
0.00s [  0.00s,  0.00s,  0.00s ] 571
0.00s [  0.00s,  0.00s,  0.00s ] 571
0.00s [  0.00s,  0.00s,  0.00s ] 571
0.00s [  0.00s,  0.00s,  0.00s ] 571
0.00s [  0.00s,  0.00s,  0.00s ] 571
0.00s [  0.00s,  0.00s,  0.00s ] 571
0.00s [  0.00s,  0.00s,  0.00s ] 571
0.00s [  0.00s,  0.00s,  0.00s ] 571
0.00s [  0.00s,  0.00s,  0.00s ] 571
0.00s [  0.00s,  0.00s,  0.00s ] 571
0.00s [  0.00s,  0.00s,  0.00s ] 571
0.00s [  0.00s,  0.00s,  0.00s ] 571
0.00s [  0.00s,  0.00s,  0.00s ] 571

总结

pt-heartbeat这个工具,可以更加准确地监控主从延迟,建议大家尝试用一下。


本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐