pt-heartbeat

1、pt-heartbeat的作用

pt-heartbeat measures replication lag on a MySQL or PostgreSQL server.  You can use it to update a master or monitor a replica.  If possible, MySQL connection options are read from your .my.cnf file.  For more details, please use the --help option, or try ‘perldoc /usr/bin/pt-heartbeat‘ for complete  documentation.

pt-heartbeat is a two-part MySQL and PostgreSQL replication delay monitoring system that measures delay by looking at actual replicated data. This avoids reliance on the replication mechanism itself, which is unreliable. (For example, SHOW SLAVE STATUS on MySQL).

2、pt-heartbeat的原理

The first part is an --update instance of pt-heartbeat that connects to a master and updates a timestamp (“heartbeat record”) every --interval seconds. Since the heartbeat table may contain records from multiple masters (see “MULTI-SLAVE HIERARCHY”), the server’s ID (@@server_id) is used to identify records.

主库上存在一个用于检查延迟的表heartbeat,可手动或自动创建

pt-heartbeat使用--update参数连接到主库上并持续(根据设定的--interval参数)使用一个时间戳更新到表heartbeat

The second part is a --monitor or --check instance of pt-heartbeat that connects to a slave, examines the replicated heartbeat record from its immediate master or the specified --master-server-id, and computes the difference from the current system time. If replication between the slave and the master is delayed or broken, the computed difference will be greater than zero and otentially increase if --monitor is specified.

pt-heartbeat使用--monitor 或--check连接到从库,检查从主库同步过来的时间戳,并与当前系统时间戳进行比对产生一个差值,

该值则用于判断延迟。(注,前提条件是主库与从库应保持时间同步)

You must either manually create the heartbeat table on the master or use --create-table. See --create-table for the proper heartbeat table structure. The MEMORY storage engine is suggested, but not re-quired of course, for MySQL.

The heartbeat table must contain a heartbeat row. By default, a heartbeat row is inserted if it doesn’t exist. This feature can be disabled with the --[no]insert-heartbeat-row option in case the database user does not have INSERT privileges.

pt-heartbeat depends only on the heartbeat record being replicated to the slave, so it works regardless of the replication mechanism (built-in replication, a system such as Continuent Tungsten, etc). It works at any depth in the replication hierarchy; for example, it will reliably report how far a slave lags its master’s master’s master. And if replication is   stopped, it will continue to work and report (accurately!) that the slave is falling further and further behind the master.

pt-heartbeat has a maximum resolution of 0.01 second. The clocks on the master and slave servers must be closely synchronized via NTP. By default, --update checks happen on the edge of the second (e.g. 00:01) and --monitor checks happen halfway between seconds (e.g. 00:01.5). As long as the servers’ clocks are closely synchronized and replication events are propagating in less than half a second, pt-heartbeat will report zero seconds of delay.

pt-heartbeat will try to reconnect if the connection has an error, but will not retry if it can’t get a connection when it first starts.

The --dbi-driver option lets you use pt-heartbeat to monitor PostgreSQL as well. It is reported to work well  with Slony-1 replication.

3、获取pt-heartbeat帮助信息

a、获取帮助信息

[[email protected] ~]# pt-heartbeat #直接输入pt-heartbeat可获得一个简要描述,使用pt-heartbeat --help获得一个完整帮助信息

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

Errors in command-line arguments:

* Specify at least one of --stop, --update, --monitor or --check

* --database must be specified

4、演示使用pt-heartbeat

[python] view plain copy print?在CODE上查看代码片派生到我的代码片

a、首先添加表

[[email protected] ~]# pt-heartbeat --user=root --password=xxx -S /tmp/mysql.sock -D test  --master-server-id=11 --create-table --update

MASTER> select * from heartbeat;

+----------------------------+-----------+------------------+-----------+-----------------------+---------------------+

| ts                         | server_id | file             | position  | relay_master_log_file | exec_master_log_pos |

+----------------------------+-----------+------------------+-----------+-----------------------+---------------------+

| 2014-12-01T09:48:14.003020 |        11 | mysql-bin.000390 | 677136957 | mysql-bin.000179      |                 120 |

+----------------------------+-----------+------------------+-----------+-----------------------+---------------------+

b、更新主库上的heartbeat

[[email protected] ~]# pt-heartbeat --user=root --password=xxx -S /tmp/mysql.sock -D test --master-server-id=11 --update &

[1] 31249

c、从库上监控延迟

[[email protected] ~]# pt-heartbeat --user=root --password=xxx -S /tmp/mysql.sock -D test  --master-server-id=11 --monitor --print-master-server-id

1.00s [  0.02s,  0.00s,  0.00s ] 11  #实时延迟,1分钟延迟,5分钟延迟,15分钟延迟

1.00s [  0.03s,  0.01s,  0.00s ] 11

1.00s [  0.05s,  0.01s,  0.00s ] 11

1.00s [  0.07s,  0.01s,  0.00s ] 11

1.00s [  0.08s,  0.02s,  0.01s ] 11

1.00s [  0.10s,  0.02s,  0.01s ] 11

1.00s [  0.12s,  0.02s,  0.01s ] 11

1.00s [  0.13s,  0.03s,  0.01s ] 11

d、其他操作示例

#将主库上的update使用守护进程方式调度

[[email protected] ~]# pt-heartbeat --user=root --password=xxx -S /tmp/mysql.sock -D test  --master-server-id=11 --update --daemonize

#修改主库上的更新间隔为2s

[[email protected] ~]# pt-heartbeat --user=root --password=xxx -S /tmp/mysql.sock -D test  --master-server-id=11 --update --daemonize --interval=2

#停止主库上的pt-heartbeat守护进程

[[email protected] ~]# pt-heartbeat --stop

Successfully created file /tmp/pt-heartbeat-sentinel

[[email protected] ~]# rm -rf /tmp/pt-heartbeat-sentinel

#单次查看从库上的延迟情况

[[email protected] ~]$ pt-heartbeat --user=root --password=xxx -S /tmp/mysql.sock -D test  --master-server-id=11 --check

1.00

#使用守护进程监控从库并输出日志

[[email protected] ~]#  pt-heartbeat --user=root --password=xxx -S /tmp/mysql.sock -D test --master-server-id=11 --monitor --print-master-server-id --daemonize --log=/tmp/slave-lag.log

5、常用参数:

注意:需要指定的参数至少有 --stop,--update,--monitor,--check。其中--update,--monitor和--check是互斥的,--daemonize和--check也是互斥。

--ask-pass

隐式输入MySQL密码

--charset

字符集设置

--check

检查从的延迟,检查一次就退出,除非指定了--recurse会递归的检查所有的从服务器。

--check-read-only

如果从服务器开启了只读模式,该工具会跳过任何插入。

--create-table

在主上创建心跳监控的表,如果该表不存在。可以自己建立,建议存储引擎改成memory。通过更新该表知道主从延迟的差距。

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

);

heratbeat表一直在更改ts和position,而ts是我们检查复制延迟的关键。

--daemonize

执行时,放入到后台执行

--user

-u,连接数据库的帐号

--database

-D,连接数据库的名称

--host

-h,连接的数据库地址

--password

-p,连接数据库的密码

--port

-P,连接数据库的端口

--socket

-S,连接数据库的套接字文件

--file 【--file=output.txt】

打印--monitor最新的记录到指定的文件,很好的防止满屏幕都是数据的烦恼。

--frames 【--frames=1m,2m,3m】

在--monitor里输出的[]里的记录段,默认是1m,5m,15m。可以指定1个,如:--frames=1s,多个用逗号隔开。可用单位有秒(s)、分钟(m)、小时(h)、天(d)。

--interval

检查、更新的间隔时间。默认是见是1s。最小的单位是0.01s,最大精度为小数点后两位,因此0.015将调整至0.02。

--log

开启daemonized模式的所有日志将会被打印到制定的文件中。

--monitor

持续监控从的延迟情况。通过--interval指定的间隔时间,打印出从的延迟信息,通过--file则可以把这些信息打印到指定的文件。

--master-server-id

指定主的server_id,若没有指定则该工具会连到主上查找其server_id。

--print-master-server-id

在--monitor和--check 模式下,指定该参数则打印出主的server_id。

--recurse

多级复制的检查深度。模式M-S-S...不是最后的一个从都需要开启log_slave_updates,这样才能检查到。

--recursion-method

指定复制检查的方式,默认为processlist,hosts。

--update

更新主上的心跳表。

--replace

使用--replace代替--update模式更新心跳表里的时间字段,这样的好处是不用管表里是否有行。

--stop

停止运行该工具(--daemonize),在/tmp/目录下创建一个“pt-heartbeat-sentinel” 文件。后面想重新开启则需要把该临时文件删除,才能开启(--daemonize)。

--table

指定心跳表名,默认heartbeat。

时间: 2024-11-05 19:46:01

pt-heartbeat的相关文章

你所不知道的Pt heartbeat

pt-heartbeat原理研究 一.简介 Mysql Seconds_Behind_Master参数对于主从延迟测量并不准确,因为他的统计基于 slave SQLthread 和I/O thread的时间差,如果i/o thread 受到网络影响,这个估值就非常不正确.一般采用更精确的主从延迟检测pt-heartbeat.pt-heartbeat分为两个部分第一个为update,发生在主库上,更新时间戳.第二个部分为monitor或check,发生在从库,检查主库传过来的时间戳与从库系统时间做

heartbeat+LVS

####heartbeat简介####Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统.心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里,由 heartbeat 模块实现了这两个功能.这个集群方案是利用第三方软件搭建的,要比RedHat自带的集群软件在功能上简化一些,但是搭建起来非常的方便.而且是一种快速解决方案.heartbeat的高可用集群采用的通信方式是udp协议和串口通信,而且heartbeat插件技术实现了集群间的

Linux高可用集群方案之heartbeat基础原理及逻辑架构

 这篇文章我们主要学习heartbeat高可用集群的基础原理及逻辑架构,以及heartbeat的简单配置  ll  本文导航    · heartbeat之基本原理   · heartbeat之集群组件   · heartbeat之心跳连接   · heartbeat之脑裂(资源争用.资源隔离) · heartbeat之配置文件   · heartbeat至高可用集群配置  ll  要求  掌握heartbeat高可用集群的相关组件及简单配置   heartbeat之基本原理  heartbea

lmp+heartbeat+drbd

############源码安装mysq###### [[email protected] ~]# tar zxf mysql-boost-5.7.11.tar.gz [[email protected] ~]# yum install cmake-2.8.12.2-4.el6.x86_64.rpm [[email protected] ~]# yum install gcc-c++ ncurses-devel bison -y [[email protected] ~]# cd mysql-5

heartbeat做nginx高可用集群

一.理论 ·HA高可用,又被叫做双机热备. ·高可用原理:两台机器A和B,正常是A提供服务,B闲置,当A宕机或服务宕掉,切换到B继续提供服务,使用心跳进行通信和选举 ·heartbeat原理:心跳检测和资源接管两个部分.集群中的主机互相发送报文,告诉对方自己当前的状态,如果在一定时间内未收到对方报文,认定对发死亡 ·常用的高可用软件:heartbeat.keepalived ·脑裂:双方无法进行心跳信息的传递,导致无法获取其他节点状态信息 ·heartbeat  适合做服务高可用 ·keepal

Heartbeat+DRBD+NFS高可用

一.环境 系统:     CentOS 6.4x64 最小化安装 node1:     192.168.1.13 node2:     192.168.1.14 vip:      192.168.1.15 nfs:      192.168.1.10 二.基础配置 node1和node2的操作一样 #关闭iptables和selinux [[email protected] ~]# getenforce Disabled                        #确保这项是正确的 [[e

linux 下heartbeat简单高可用集群搭建

Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统.通过Heartbeat我们可以实现双机热备,以实现服务的持续性. linux下基于heartbeat的简单web服务的高可用集群搭建 首先规划好两台主机作为heartbeat的双机热备,命名为node1.lvni.cc(主) ;node2.lvni.cc, node1的eth0IP :192.168.157.148  Vip eth0:0:192.168.157.149 node2的eth0IP :19

heartbeat v1 实现 MariaDB数据库的高可用

MariaDB数据库服务的高可用: 使用 heartbeat v1 版实现两个节点的 MariaDB数据库服务的高可用. 节点: node1        192.168.60.33 node2        192.168.60.88 MySQL数据库的数据文件使用nfs共享文件系统解决 nfs Server       192.168.60.22 架构如下图: 一.heartbeat 节点之间通信要求的设置: (1).解决节点的主机名解析 因为 heartbeat 的节点间通讯基于名称.基于

Heartbeat+DRBD实现文件高可用

一.需求分析: 本文结合之前heartbeat与drbd两篇文章,实现磁盘文件高可用.当MySQL01(主数据库服务器)宕机后,MySQL02(备数据库服务器)可以通过heartbeat立刻检测到MySQL01挂了,MySQL02接管VIP,MySQL02的DRBD服务会自动从Secondary切换到Primary状态,然后自动加载DRBD逻辑盘:/dev/drbd0到/data目录,从而实现文件持续在线--即高可用状态:当MySQL01恢复后,VIP返回MySQL01,MySQL01的DRBD

Mysql+DRBD+Heartbeat 实现mysql高可用的双击热备(DRBD篇)

DRBD官方tar包下载地址:   http://oss.linbit.com/drbd/ 环境介绍: 系统版本:CentOS 6.4 (64位) 内核版本  2.6.32-358.el6.x86_64 软件版本:drbd-8.4.3.tar.gz 主:10.0.0.1   从:10.0.0.2 两台机器上的hosts都需要修改: [[email protected] ~]# vim /etc/hosts 10.0.0.1    node1 10.0.0.2    node2 两台服务器双网卡,