Percona Toolkit使用测试(9)PT-HEARTBEAT

PT-HEARTBEAT——监控MySQL复制延迟。
工作原理:

1,在主上创建一张heartbeat表,按照一定的时间频率更新该表的字段(把时间更新进去)。

2,从主库连接到从上检查复制的时间记录,和从库的当前系统时间进行比较,得出时间的差异。
使用:
在这里插入图片描述
pt-heartbeat测量MySQL或PostgreSQL服务器上的复制延迟。您可以使用它来更新主服务器或监视副本。如果可能,MySQL连接选项将从.my.cnf文件中读取。
启动守护进程来更新master上的test.heartbeat库表:
在这里插入图片描述监控slave上的复制延迟(mysql/PostgreSQL)
PostgreSQL
检查slave延迟一次然后退出(使用可选DSN指定从机主机)
在这里插入图片描述

描述

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

SMB(Seconds_Behind_Master)是通过将服务器当前的时间戳与二进制日志中的事件时间戳相对比得到的,而且是会产生误报的情况。比如主库执行一个大事物,时间执行很久,从库接收以后对比时间戳发现已经延迟了,就会瞬间增大SMB的值。

第一部分是pt-heartbeat的一个“- -update”实例,每“ - -interval ”秒连接到master然后更新一个时间戳(“ 心跳记录 ”)。由于heartbeat表可能包含来自多个master的记录,使用服务器ID(@@server_id)来唯一标识记录。
第二部分是连接到从属节点的pt-heartbeat的“ --monitor ”或者“ --check ”实例,检查从它的直接主节点或指定的- -master-server-id复制的心跳记录,并计算与当前系统时间的差异。如果从服务器和主服务器之间的复制延迟或中断,计算出的差异将大于零,如果指定了- -monitor,则可能会增加。

您必须在主服务器上手动创建heartbeat表,或者使用create-table。有关正确的心跳表结构,请参见- -create-table参数。对于MySQL,建议使用内存存储引擎,但当然不是必需的。

heartbeat表必须包含一个heartbeat行。默认情况下,如果心跳行不存在,则插入它。如果数据库用户没有插入特权,可以使用- -[no] INSERT -heartbeat-row选项禁用该特性。

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

pt心跳的最大分辨率为0.01秒。主服务器和从服务器上的时钟必须通过NTP紧密同步。默认情况下,“ --update ”检查发生于每一秒的开始(e.g 00:01)而“ --monitor ”检查发生于秒与秒的中间(e.g 00:01.5)。只要服务器的时钟是紧密同步的,复制事件在不到半秒的时间内传播,pt-heartbeat就会报告零秒的延迟。

如果连接有错误,pt-heartbeat将尝试重新连接,但是如果它在第一次启动时无法获得连接,则不会重试。

dbi-driver选项还允许使用pt-heartbeat监视PostgreSQL。据报道,它可以很好地与Slony-1复制合作。

如果复制层次结构有多个slave,这些slave是其他slave的master,比如“master -> slave1 -> slave2”,则可以在slave和master上运行- -update实例。
默认心跳表(参见- -create-table)在server_id列上键入,因此每个服务器将更新server_id=@@server_id的行。

对于- -monitor和- -check,如果没有指定- -master-server-id,工具将尝试发现并使用从服务器的直接主服务器。如果此操作失败,或者希望从另一个主服务器获得监视延迟,则可以指定要使用的- -master-server-id。
例如,如果复制层次结构是“master -> slave1 -> slave2”,并具有相应的服务器id 1、2和3,则可以:
在这里插入图片描述
检查(或监视) master到slave2的复制延迟 :
在这里插入图片描述
检查slave1到slave2的复制延迟:
在这里插入图片描述
默认心跳表(请参阅——create-table)具有用于保存来自SHOW MASTER STATUS和SHOW SLAVE STATUS的信息的列。这些列是可选的。如果有,则保存相应的信息。

参数

指定至少一个- -stop、- -update、- -monitor或- -check。
– --update, --monitor, and --check 是互斥的
– --daemonize and --check是互斥的
- -ask-pass
连接数据库询问密码
- -charset
默认字符集
- -check
检查从延迟一次并退出。如果您还指定- -recurse,该工具将尝试发现给定奴隶的奴隶,并检查和打印他们的延迟。每个从服务器的主机名或IP和端口在延迟之前打印出来。–recurse只适用于MySQL。
在这里插入图片描述
- -check-read-only
检查服务器是否已启用read_only;如果是,该工具将跳过任何插入操作。
- -config
读取这个逗号分隔的配置文件列表;如果指定,这必须是命令行上的第一个选项。
- -create-table
创建heartbeat --table表,如果心跳表不存在的话。
这个选项将使用以下表定义创建由- -database和- -table指定的表:
在这里插入图片描述
heartbeat表至少需要一行。如果您手动创建heartbeat表,那么您必须通过以下操作插入一行:
INSERT INTO heartbeat (ts, server_id) VALUES (NOW(), N);
或者如果使用- -utc:
INSERT INTO heartbeat (ts, server_id) VALUES (UTC_TIMESTAMP(), N);
其中N为服务器ID;不要使用@@server_id,因为它将进行复制,从服务器将插入自己的服务器ID而不是主服务器ID。
这是由- -create-table自动完成的。
心跳表的旧版本仍然支持:
在这里插入图片描述
遗留表不支持对多奴隶层次结构的每个奴隶(如“master ->slave1 -> slave2”)上的“——update”实例。要手动将所需的一行插入到遗留表中:
INSERT INTO heartbeat (id, ts) VALUES (1, NOW());

INSERT INTO heartbeat (id, ts) VALUES (1, UTC_TIMESTAMP());
该工具自动检测heartbeat表是否是遗留的。

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

- -create-table-engine
类型:字符串
设置要用于心跳表的引擎。默认的存储引擎是MySQL 5.5.5版本的InnoDB。
- -daemonize
后台运行程序。只有POSIX操作系统。
- -database
连接的数据库
- -dbi-driver
默认值:mysql;类型:字符串
指定连接的驱动程序;支持mysql和Pg。
- -defaults-file
mysql配置文件
- -file
类型:字符串
–打印最新–monitor的输出到此文件
–当--monitor给定时,将输出打印到指定的文件而不是STDOUT。文件每隔一段时间就会被打开、截断和关闭,因此它只包含最新的统计信息。当- -daemonize给定时非常有用。
- -frames
类型:字符串;默认值:1m,5m,15m
给定时间内的平均延迟
指定给定–monitor时计算移动平均值的时间范围。指定为带后缀的以逗号分隔的数字列表。后缀可以是s代表秒,m代表分钟,h代表小时,d代表天。最大帧的大小决定了最大的内存使用量,因为内存中最多保留指定数量的每秒采样数来计算平均值。您可以指定任意多的时间框架。
- -help
帮助并退出
- -host
连接主机名、ip
- -[no]insert-heartbeat-row
默认yes
在心跳表中插入一个心跳行(如果不存在)。
heartbeat表需要一个heartbeat行,否则就没有什么要更新、监视或检查的了!默认情况下,如果心跳行不存在,该工具将插入心跳行。如果数据库用户没有插入特权,可以通过指定——no-insert-heartbeat-row来禁用此功能
- -interval
类型:小数;默认值:1.0
更新检查心跳表的频率
- -log
开启daemonized模式的所有日志输出到文件
- -master-server-id
从这个主服务器ID计算延迟,用于–monitor or --check。如果没有给出,pt-heartbeat将尝试连接到服务器的主服务器并确定其服务器id。
- -monitor
持续监控从机延迟。
指定pt heartbeat应每秒检查从属服务器的延迟,并向stdout报告(或者,如果给定了–file,则向该文件报告)。输出是当前延迟,然后是在 --frames给定的时间段内移动的平均值 。例如,
在这里插入图片描述
在这里插入图片描述
- -fail-successive-errors
类型:int
如果指定,在给定数量的连续DBI错误(连接到服务器或发出查询失败)之后,pt-heartbeat将失败。
在开启程序后关闭了mysql服务,则程序也自动停止
在这里插入图片描述
- -password
数据库连接密码
- -pid
创建pid文件
- -port
数据库连接端口
- -print-master-server-id
打印自动检测到的或给定的 - -master-server-id,如果指定了- -check或- -monitor,指定此选项将在每行末尾打印自动检测到的或给定的- -master-server-id。
在这里插入图片描述
- -read-only-interval
类型int
当 - -check-read-only被指定时,当服务器被发现为只读时,要休眠的时间间隔。如果未指定,则使用- -interval。
- -recurse
类型:int
在- -Check模式下递归地检查从节点到这个深度。
尝试递归地发现指定深度的从服务器。在发现服务器之后,对每个服务器运行检查并打印主机名(如果可能的话),然后是从服务器延迟。
这目前只适用于MySQL。
- -recursion-method
类型:数组;默认值:processlist,hosts
优先使用递归方法查找从属项。
可能的方法有:
在这里插入图片描述
processlist方法是首选的,因为SHOW SLAVE HOSTS不可靠
但是,如果服务器使用非标准端口(不是3306),则需要使用hosts方法。通常,pt-heartbeat会做正确的事情并找到从服务器,但是您可能会给出一个首选的方法,并且它将首先被使用。如果没有找到任何slave,将尝试其他方法。
- -replace
在指定–update时,使用REPLACE代替UPDATE
- -run-time
程序运行多久结束。
- -sentinel
类型:字符串;默认值:/ tmp / pt-heartbeat-sentinel
如果存在此文件,则退出。
- -slave-user
类型:字符串
设置用于连接从服务器的用户。此参数允许您拥有对从服务器具有较少特权的不同用户,但该用户必须存在于所有从服务器上
- -slave-password
设置用于连接从服务器的用户的密码
- -set-vars
设置mysql参数
- -skew
类型小数,默认0.5
检查延迟多长时间
默认值是将检查延迟半秒。由于更新是在主服务器上的第二次更新开始后尽快进行的,因此在报告从服务器比主服务器慢一秒之前,允许有半秒的复制延迟。如果您的时钟不完全准确,或者您希望或多或少地延迟从服务器的某些其他原因,您可以调整这个值。
- -socket
连接用的socket文件
- -stop
通过创建标记文件来停止运行实例。
这应该具有停止所有正在运行的实例的效果,这些实例正在监视同一个标记文件。如果没有指定—update、—monitor或—check,那么创建文件后pt-heartbeat将退出。如果指定了其中之一,pt-heartbeat将等待——interval给出的间隔,然后删除文件并继续工作

如果需要,您可能会发现这对于优雅地停止cron作业或者用另一个正在运行的实例替换一个正在运行的实例非常方便。例如,如果您想每小时停止并重新启动pt-heartbeat(只是为了确保它每小时重新启动一次,以防服务器崩溃或其他问题),您可以使用如下crontab行:
在这里插入图片描述
非默认值——sentinel将确保每小时的cron作业只停止先前使用相同选项启动的实例(即来自相同cron作业的实例)。

- -table
类型:字符串;默认值:heartbeat
用于心跳的表。
不要指定database.table;使用–database指定数据库。
- -update
更新master的心跳。
- -user
连接mysql的用户
- -utc
忽略系统时区,只使用UTC。默认情况下,pt-heartbeat不针对不同的系统或MySQL时区进行检查或调整,因为这些时间可能会导致工具计算延迟不正确。指定此选项是一个好主意,因为它确保该工具在任何时区都能正确工作。
在这里插入图片描述
如果使用此选项,则必须对所有pt-heartbeat实例使用此选项:——update、——monitor、——check等等。

您可能应该在—config文件中设置该选项。将此选项与不使用此选项的pt-heartbeat实例混合使用,会由于不同的时区而导致误报延迟读数(除非您的所有系统都设置为使用UTC,在这种情况下不需要此选项)。
- -version
显示版本并退出
- -[no]version-check
检查工具等版本

用例:
主库运行:
pt-heartbeat --user=root --password=123456 --host=10.10.80.16 --port=5000 -D test --interval=1 --update --replace --daemonize --create-table

连接从库检查延迟:
pt-heartbeat -D test --check -h 10.10.80.16 -P 5004 -u root -p123456 --utc

pt-heartbeat -D test --monitor -h 10.10.80.16 -P 5004 -u root -p123456 --utc
在这里插入图片描述
停止程序:将会创建停止文件,删除后才可以再次开启程序
pt-heartbeat --user=root --password=123456 --host=10.10.80.16 --port=5000 -D test --stop
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值