首页 > 数据库 > MySQL > 利用pt-heartbeat监控复制延迟
一般mysql主从监控通过show slave status查看SECONDS_BEHIND_MASTER的值来判断主从是否有延迟。但是SECONDS_BEHIND_MASTER并不能准确的反映出数据库的延迟情况,而且此值是秒级。如果有业务系统需要更精确的主从延迟级别(如毫秒级),这样可以通过pt-heartbeat实现对mysql或PostgreSQL主从复制的监控。
pt-heartbeat通过真实的主从数据复制来确认复制延迟,这样就避免了对复制机制本身的依赖,从而能得出准确的延迟时间。
pt-heartbeat默认一秒更新一次心跳记录,默认检查精度为0.01秒。
常用操作如下:
启用后台进程定时更新主库心跳记录
pt-heartbeat -D test --table=heartbeat --create-table -h master-host --daemonize --update 检查一次主从延迟后退出
pt-heartbeat -D test --table=heartbeat -h slave-host --check 持续监控主从延迟情况并将结果输出到/tmp/slave_delay.txt文件中
pt-heartbeat -D test --table=heartbeat -h slave-host --monitor --file /tmp/slave_delay.txt 默认--create-table会创建如下表,建议该表存储引擎改成memory。该表会一直更新ts和file、position,通过更新该表可以知道主从延迟的差距。 CREATE TABLE heartbeat (
ts varchar(26) NOT NULL,
server_id int unsigned NOT NULL PRIMARY KEY, file varchar(255) DEFAULT NULL, -- SHOW MASTER STATUS position bigint unsigned DEFAULT NULL, -- SHOW MASTER STATUS relay_master_log_file varchar(255) DEFAULT NULL, -- SHOW SLAVE STATUS exec_master_log_pos bigint unsigned DEFAULT NULL -- SHOW SLAVE STATUS );
常用参数:
对主库的心跳表定时写入
shell> pt-heartbeat -D test --table=heartbeat --create-table -h 10.141.8.92 -uroot -p --log=/tmp/log.log --daemonize --update mysql> select * from heartbeat;
+----------------------------+-----------+------------------+-----------+-----------------------+---------------------+ | ts | server_id | file | position | relay_master_log_file | exec_master_log_pos |
+----------------------------+-----------+------------------+-----------+-----------------------+---------------------+ | 2016-12-01T04:44:58.000920 | 92 | mysql-bin.000131 | 164361120 | NULL | NULL |
+----------------------------+-----------+------------------+-----------+-----------------------+---------------------+ 1 row in set (0.00 sec)
通过监控可以得知,延迟目前在58秒。
shell> pt-heartbeat -D test --table=heartbeat -h 10.141.8.101 -uroot -p --check
58.327
持续监控延迟状况
shell> pt-heartbeat -D test --table=heartbeat -h 10.141.8.101 -uroot -p --monitor
43.002s [ 0.717s, 0.143s, 0.048s ]
44.002s [ 1.450s, 0.290s, 0.097s ]
44.005s [ 2.184s, 0.437s, 0.146s ]
44.001s [ 2.917s, 0.583s, 0.194s ]
44.007s [ 3.650s, 0.730s, 0.243s ]
45.004s [ 4.400s, 0.880s, 0.293s ]
45.002s [ 5.150s, 1.030s, 0.343s ]
45.015s [ 5.901s, 1.180s, 0.393s ]
46.008s [ 6.667s, 1.333s, 0.444s ]
46.007s [ 7.434s, 1.487s, 0.496s ]
47.001s [ 8.218s, 1.644s, 0.548s ]
停止pt-heartbeat守护进程
shell> pt-heartbeat --stop
Successfully created file /tmp/pt-heartbeat-sentinel
此时服务器创建了一个/tmp/pt-heartbeat-sentinel文件,再次daemonize启动时,需要删除掉该文件,如果此文件存在,不能正常启动。
Seconds_Behind_Master值是通过将服务器当前的系统时间戳与二进制日志中的事件时间相对比得到的,而pt-heartbeat测试的是真实的数据复制过程中消耗的时间。一般来说Seconds_Behind_Master获取更为简单,基本上可以满足大多数主从延迟监控的需要,而pt-heartbeat更准确,推荐读写分离时对延迟精确度要求高的时候使用。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29733787/viewspace-1466177/ ,如需转载,请注明出处,否则将追究法律责任。