pt-heartbeat 监控主从延迟

学习技术需要掌握

作用、原理、安装步骤、工具使用、模拟演示、注意细节、优点缺点

一、作用 

pt-heartbeat监听主从延迟不一致,因为如果根据seconds_behind_master变量来判断主从是否一致是不准的,因为 seconds_behind_master 统计的是 从机的IO线程写入event时间戳 和 Sql线程回放event当前时间戳对比,理论上是指的从机的延迟。所以我们需要使用 pt-heartbeat 监控主从延迟,更加准确。

二、原理

pt工具在主库上面创建一张测试表,

(root@localhost) [test]> select * from heartbeat;
+----------------------------+-----------+------------------+-----------+-----------------------+---------------------+
| ts                         | server_id | file             | position  | relay_master_log_file | exec_master_log_pos |
+----------------------------+-----------+------------------+-----------+-----------------------+---------------------+
| 2022-05-14T17:23:28.000840 |       129 | mysql-bin.000003 | 429368973 | NULL                  |                NULL |
+----------------------------+-----------+------------------+-----------+-----------------------+---------------------+

以一秒的频率去更新这个的记录并把当前时间写入到heartbeat表中,因为主从的关系,从库也会有这个表,从库也会不停的更新字段,通过从库的ts字段减去主库的ts字段,就得出了主从延迟的实时时间。

三、安装步骤

PT安装不讲哈

四、 如何使用

① 在主库 创建heartbeat表并每1s去更新这个表的时间戳

pt-heartbeat --user=root --password=123456  --host=127.0.0.1 --create-table -D test --interval=1 --update --replace --daemonize

 --daemonize:意思是后台运行,可以先不用这个变量,看一下这个命令执行是否正确

--user=root --password=123456  --host=127.0.0.1 -D test 主库的mysql连接信息和heartbeat表存放的数据库

--update 更新主的heartbeat表,这个参数是后台进程必须的参数也可以用--replace替代

--replace 使用replace替换--UPDATE操作

这步执行完以后,查看主库的heartbeat表和从库的heartbeat表有没有变化 

② 监控与那个从机的延迟信息

pt-heartbeat  -D test --table=heartbeat --master-server-id=129  --monitor -h 192.168.88.130 -uroot -p123456 --interval=1

--master-server-id=129 是主库的server-id,不写这个参数也是可以的

-h 192.168.88.130 -uroot -p123456 从机的信息

--monitor 监控从服务器的参数选项

下面就是返回的结果,第一列是实时延迟,第二列是1分钟延迟,第三列是5分钟延迟,第四列是15分钟延迟 

[root@master-129 mysql_data]# pt-heartbeat  -D test --table=heartbeat --master-server-id=129  --monitor -h 192.168.88.130 -uroot -p123456 --interval=1
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 ]
0.00s [  0.00s,  0.00s,  0.00s ]
0.00s [  0.00s,  0.00s,  0.00s ]

因为我们目前没有跑数据,所以延迟都是0,

五、模拟演示

我们现在需要模拟往主机插入数据。

我们这里不用sysbench工具,而是直接用mysqlslap工具,我们都是在主库进行操作,因为这样才能从机同步哈,我们才可以监听主从的延迟哈,

① 在2.sql中写入

insert into x value(null, 1, 'aaa');

② 执行mysqlslap命令

mysqlslap --query=2.sql -c 4 --number-of-queries=10000000 --create-schema=test

-c 4是4个线程并发执行

③ pt-heartbeat的结果

26.00s [ 20.28s,  4.59s,  1.53s ]
26.00s [ 20.53s,  4.68s,  1.56s ]
26.00s [ 20.78s,  4.77s,  1.59s ]
26.00s [ 21.02s,  4.85s,  1.62s ]
26.00s [ 21.25s,  4.94s,  1.65s ]
26.00s [ 21.48s,  5.03s,  1.68s ]
27.00s [ 21.72s,  5.12s,  1.71s ]

上面的结果可以看出延迟在26S,每秒的延迟在不断的增加,因为我这里主从同步采用的是异步复制。第一列是实时延迟,第二列是1分钟延迟,第三列是5分钟延迟,第四列是15分钟延迟 

六、其他的命令参数

Usage: pt-heartbeat [OPTIONS] [DSN] --update|--monitor|--check|--stop
其中--update, --moniter,--check,--stop都是单独使用的,并且--update, --monitor, and --check are mutually exclusive
--daemonize and --check are mutually exclusive.他们之间还是存在互斥。
Options:
  --ask-pass                  使用密码进行mysql连接时给予提示
  --charset=s             -A  默认的字符选项
  --check                     执行一次从库的监控就结束
  --check-read-only           如果是只读的服务器那么使用该选项会保持插入
  --config=A                  使用逗号分隔,如果指定了,那么该参数作为命令行的第一个选项
  --create-table              如果表不存在创建表heartbeat
  --daemonize                 创建后台的更新shell
  --database=s            -D  指定连接的数据库
  --dbi-driver=s              Specify a driver for the connection; mysql and Pg
                              are supported (default mysql)
  --defaults-file=s       -F  通过提供的文件进行mysql连接
  --file=s                    输出最新的  --monitor监控信息到指定的文件
  --frames=s                  设置时间周期(default 1m,5m,15m)
  --help                      显示帮助信息
  --host=s                -h  指定连接的host
  --[no]insert-heartbeat-row  在使用--tables的时候默认是插入一条记录到表heartbeat前提是表中不存在该记录行 
  --interval=f                指定更新和监控heartbeat表的频率默认是1S
  --log=s                     当使用daemonized进行后台更新操作时输出所有的信息到指定的该文件
  --master-server-id=s        指定主的server-id
  --monitor                   监控从服务器的参数选项
  --password=s            -p  指定密码
  --pid=s                     创建pid文件
  --port=i                -P  指定连接时使用的端口
  --print-master-server-id    打印输出master-server-id
  --recurse=i                 Check slaves recursively to this depth in --check
                              mode
  --recursion-method=a        Preferred recursion method used to find slaves (
                              default processlist,hosts)
  --replace                   使用replace替换--UPDATE操作
  --run-time=m                指定监控的时长,单位有: s=seconds, m=minutes, h=hours, d=days; 如果比指定默认是以秒为单位一直监控下去
  --sentinel=s                Exit if this file exists (default /tmp/pt-
                              heartbeat-sentinel)
  --set-vars=A                Set the MySQL variables in this comma-separated
                              list of variable=value pairs
  --skew=f                    指定执行从库检查的延时时长默认是0.5
  --socket=s              -S  指定连接时使用的socket文件
  --stop                      停止后台更新进程并生成--sentinel指定的文件                              
  --table=s                   指定更新的表(默认是heartbeat)
  --update                    更新主的heartbeat表,这个参数是后台进程必须的参数也可以用--replace替代
  --user=s                -u  指定用户名
  --utc                       忽略系统时间仅使用UTC
  --version                   显示版本信息
  --[no]version-check         Check for the latest version of Percona Toolkit,
                              MySQL, and other programs (default yes)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值