Percona Toolkit使用之pt-heartbeat

版权声明:本文为博主原创文章,转载敬请作出引用声明方便相互交流学习! https://blog.csdn.net/sweeper_freedoman/article/details/79797281

     pt-heartbeat的功能是监控MySQL复制延迟。

     用法如下:

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

     pt-heartbeat测算MySQL或者PostgreSQL服务器上的复制延迟。你可以使用它来更新master或者监控replica。如若可能,pt-heartbeat从你的.my.cnf配置文件读取MySQL连接参数。

     ①启动守护进程来更新master上的`test`.`heartbeat`库表:

pt-heartbeat -D test --update -h master-server --daemonize

     ②监控slave上的复制延迟(--dbi-driver Pg表示PostgreSQL):

pt-heartbeat -D test --monitor -h slave-server
pt-heartbeat -D test --monitor -h slave-server --dbi-driver Pg

     ③检查slave延迟一次然后退出(使用表示MySQL连接访问的DSN选项来指定slave服务器):

pt-heartbeat -D test --check h=slave-server

     pt-heartbeat是一个由两部分组成的MySQL和PostgreSQL复制延迟监控系统,通过察看具体的被复制的数据来测算延迟,这避免了对不可信的复制机制本身的依赖,例如MySQL的“ SHOW SLAVE STATUS ”。

     pt-heartbeat的第一个部分是“ --update ”实例,每“ --interval ”秒连接到master然后更新一个时间戳(“ 心跳记录 ”)。由于heartbeat表可能包含来自多个master的记录,使用服务器ID(@@server_id)来唯一标识记录。

     pt-heartbeat的第二个部分是“ --monitor ”或者“ --check ”实例,连接到slave检测从其直接的或者“ --master-server-id ”指定的master复制而来的heartbeat记录,然后计算与当前系统时间的差异。如果介于该master和slave之间的复制存在延迟或者故障,计算而来的差值将会大于零,如果指定“ --monitor ”选项,差值还会潜在增大。

     使用pt-heartbeat之前必须在master上要么手动要么使用“ --create-table ”选项创建heartbeat表。对于MySQL而言,推荐使用MEMORY存储引擎,当然这并不是必须的。heartbeat表必须包含一条心跳记录。如若没有默认情况下会插入一条。该特性可以通过“ --[no]insert-heartbeat-row ”选项禁用,以防数据库用户没有INSERT操作权限。heartbeat表的结构具体如下。

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
);

     pt-heartbeat仅仅依赖于将被复制到slave的心跳记录,因此不管是什么复制机制(内置复制、例如Continuent Tungsten的复制系统等等),它都能工作。它作用于复制层次的任何深度。例如,它可以可信地报告一个slave同它的master的master的master延迟有多久。而且即便复制被停止,它也会继续工作和(准确地)汇报slave越来越落后于master。

     pt-heartbeat最大可以精确到0.01秒。master和slave上的时钟必须通过NTP完全同步。默认情况下,“ --update ”检查发生于每一秒的开始(e.g 00:01)而“ --monitor ”检查发生于秒与秒的中间(e.g 00:01.5)。只要服务器间的时钟完全同步并且复制事件在半秒以内传送,pt-heartbeat就会给出零秒的延迟结果。

     如果连接报错,pt-heartbeat会尝试重新连接。但如果首次启动时无法获取连接,则不会重试。

     “ --dbi-driver ”选项允许你也可以使用pt-heartbeat来监控PostgreSQL。据说对于Slony-1复制工作良好。

     以下为个人本地环境的测试数据。

     首先是master启动“ --update ”实例来写入和更新心跳。

root@ubuntu:~# pt-heartbeat -h192.168.112.129 -P3306 -uroot -p123456 -Dplayer --interval=11 --create-table --update --daemonize
root@ubuntu:~# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.7.18-log Source distribution

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SELECT * FROM `player`.`heartbeat`\G
*************************** 1. row ***************************
                   ts: 2018-04-02T23:33:05.002410
            server_id: 1024
                 file: master-bin.000010
             position: 8301
relay_master_log_file: NULL
  exec_master_log_pos: NULL
1 row in set (0.00 sec)

mysql> 

     slave启动“ --monitor ”监控复制延迟,这里定义每11秒检查输出一次计算结果。测试中是存在3秒的延迟,但这其实是“ 假 ”的。因为我在master的“ --update ”和slave的“ --monitor ”都指定了“ --interval=11 ”。每一行具体延迟时间后面的中括号中给出了三个时间段的延迟均值,默认是1分钟、5分钟和15分钟,通过参数选项“ --frames ”控制。

root@ubuntu:~# pt-heartbeat -h192.168.112.128 -P3306 -uroot -p123456 -Dplayer --interval=11 --monitor

# A software update is available:
3.00s [  0.05s,  0.01s,  0.00s ]
3.00s [  0.10s,  0.02s,  0.01s ]
3.00s [  0.15s,  0.03s,  0.01s ]

     检查slave延迟1次然后退出。这里通过“ CHANGE MASTER TO MASTER_DELAY = N ”来设置了一下复制延迟(https://dev.mysql.com/doc/refman/5.7/en/replication-delayed.html),然后会发现延迟滞后了很多。但是就不会再额外输出区间段的延迟均值了。

root@ubuntu:~# mysql -h192.168.112.128 -P3306 -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 5.7.18 Source distribution

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> STOP SLAVE;
Query OK, 0 rows affected (0.01 sec)

mysql> CHANGE MASTER TO MASTER_DELAY = 36;
Query OK, 0 rows affected (0.01 sec)

mysql> START SLAVE;
Query OK, 0 rows affected (0.01 sec)

mysql> \q
Bye
root@ubuntu:~# pt-heartbeat -h192.168.112.128 -P3306 -uroot -p123456 -Dplayer --check
44.00
root@ubuntu:~# 

     “ --stop ”master上的“ --update ”守护进程取消监控。

root@ubuntu:~# ps aux | grep heartbeat
root       5198  0.0  1.0  97060 21576 ?        Ss   00:06   0:00 perl /usr/bin/pt-heartbeat -h192.168.112.129 -P3306 -uroot -p123456 -Dplayer --interval=11 --create-table --update --daemonize
root       5208  0.0  0.0  15984   972 pts/8    S+   00:06   0:00 grep --color=auto heartbeat
root@ubuntu:~# ls /tmp/ | grep ^pt
root@ubuntu:~# pt-heartbeat -h192.168.112.129 -P3306 -uroot -p123456 -Dplayer --sentinel=/tmp/pt-heartbeat-sentinel --stop
Successfully created file /tmp/pt-heartbeat-sentinel
root@ubuntu:~# ps aux | grep heartbeat
root       5215  0.0  0.0  15984  1016 pts/8    S+   00:07   0:00 grep --color=auto heartbeat
root@ubuntu:~# ls /tmp/ | grep ^pt
pt-heartbeat-sentinel
root@ubuntu:~# 



参考:

https://www.percona.com/doc/percona-toolkit/LATEST/pt-heartbeat.html

猜你喜欢

转载自blog.csdn.net/sweeper_freedoman/article/details/79797281
今日推荐