基于 pt-heartbeat 监控 MySQL 主从
文章目录
- pt-heartbeat 是 percona 公司下 percona-toolkit 中的一款主从状态监控工具
- 由于 MySQL 的 show slave status 命令中的 Seconds_Behind_Master 实际上是 slave 节点 SQL thread 与 IO thread 之间的延迟,也就是本地 relaylog 中未被执行完的那部分的差值,所以基于 Seconds_Behind_Master 计算主从延迟是不准确的
- pt-heartbeat 的实现方式是在 master 节点创建一个表,不断更新表内时间戳,然后再开启一个进程,获取 slave 节点同步过来的时间,将时间的差值打印出来或写入文件中中,通过定时查询文件,进行延迟报警
安装
参数
连接相关
- –host/-h:主机地址
- –port/-P:连接数据库的端口
- –user/-u:连接数据库的用户名
- –password/-p:连接数据库的密码
- –ask-pass:交互输入密码
- –socket/-S:连接数据库的套接字
- –charset:指定编码
- –master-server-id:指定 master id,如未指定,pt-heartbeat 会尝试连接到服务器的主服务器,并确定它的服务器 id
- –slave-user:指定连接从服务器的用户
- –slave-password:连接从服务器的密码
监控相关
- –database:pt-heartbeat 连接的库,在库中指定表写入时间戳信息
- –table:pt-heartbeat 连接的表,在表中写入时间戳(心跳)信息
- –create-table:如果心跳表不存在,则创建
- –dbi-driver:指定连接的驱动程序(mysql/Pg),默认为 mysql
- –[no]insert-heartbeat-row:默认为 yes,指定表后,会在心跳表中写入一行记录时间戳信息,如果 –table 指定的表没有 INSERT 权限,可配置 –no-insert-heartbeat-row
- –interval:更新心跳表的时间间隔(默认为1s)
- –update:更新 master 的心跳表
- –monitor:每秒检查从服务器延迟,并报告给 STDOUT,或者 –file
- –recurse:递归发现从服务器的深度(检查从库的从库的延迟)
- –recursion-method:查找从服务器的首选递归方法(如果服务使用非3306端口,则须使用hosts方法)
- –skew: 允许的复制延迟大小,默认为 0.5s
运行状态相关
- –fail-successive-errors:pt-heartbeat 将在给定的连接错误后失败
- –pid:创建 pid 文件并指定路径
- –run-time:运行时间,运行指定事件后退出
- –sentinel:默认为( /tmp/pt-heartbeat-sentinel),此文件存在则程序停止
- –stop:停止服务,如果 –sentinel 使用的非默认路径,需手动指定,否则无法关闭
- –daemonize:fock至后台运行
输出相关
- –frames:指定开启 –moniter 后,输出的平均值的时间区间(m,h,d),默认为 1m,5m,15m。此致值影响内存开销大小
- –file:开启 –moniter 参数时,将输出打印到指定文件而不是 STDOUT
- –log:后台运行时,将日志写入此文件中
实践
监控主从并将数据写入文件中
- master 创建库存储心跳表并配置权限
|
|
- master 开启 –update
|
|
- slave 开启 –moniter
|
|
- 停止 pt-heartbeat
- 如果启动时配置 –sentinel,停止时也需指定
- 如果使用 –stop 停止后,下次启动前要手动删除 sentinel 文件
|
|
文章作者 Xiang
上次更新 2021-07-12