MySQL Group Replication(二)监控篇

文若2年前技术文章857


说明

组复制搭建成功后,为保证其正常运行,用户需要对组复制进行监控。MySQL 的 performance_schema 库中提供一些表,用于监控组复制的复制过程。

[performance_schema]>show tables like '%replication_group%';
+----------------------------------------------------+
| Tables_in_performance_schema (%replication_group%) |
+----------------------------------------------------+
| replication_group_communication_information        |
| replication_group_configuration_version            |
| replication_group_member_actions                   |
| replication_group_member_stats                     |
| replication_group_members                          |
+----------------------------------------------------+

1. 监控表介绍

1.1. replication_group_members

该表用于监控组复制成员的状态,当成员状态发生更新时,该表的信息会进行同步更新。

select * from performance_schema.replication_group_members;

root@mysql 10:43:  [performance_schema]>select * from replication_group_members\G
*************************** 1. row ***************************
              CHANNEL_NAME: group_replication_applier
                 MEMBER_ID: 4f4ab2eb-b0fd-11ed-b9e2-fa7581637800
               MEMBER_HOST: 172-16-104-55
               MEMBER_PORT: 3306
              MEMBER_STATE: ONLINE
               MEMBER_ROLE: SECONDARY
            MEMBER_VERSION: 8.0.32
MEMBER_COMMUNICATION_STACK: XCom
*************************** 2. row ***************************
              CHANNEL_NAME: group_replication_applier
                 MEMBER_ID: 9590bf9c-c302-11ed-8d53-faa7cd9c6a00
               MEMBER_HOST: 172-16-104-57
               MEMBER_PORT: 3306
              MEMBER_STATE: ONLINE
               MEMBER_ROLE: PRIMARY
            MEMBER_VERSION: 8.0.32
MEMBER_COMMUNICATION_STACK: XCom
*************************** 3. row ***************************
              CHANNEL_NAME: group_replication_applier
                 MEMBER_ID: eccc6b43-b0fc-11ed-8e74-fa0e3cc40b00
               MEMBER_HOST: 172-16-104-56
               MEMBER_PORT: 3306
              MEMBER_STATE: ONLINE
               MEMBER_ROLE: SECONDARY
            MEMBER_VERSION: 8.0.32
MEMBER_COMMUNICATION_STACK: XCom

用户可通过上方 SQL 查询组复制成员的状态。其中包含成员的元数据信息,例如端口、成员 ID 等。

1.1.1. MEMBER_STATE

表示当前成员的联机状态,有 ONLINE(成员在线)、OFFLINE(成员离线)、RECOVERING(成员恢复中)ERROR(成员发生错误) 和 UNREACHABLE(成员无法通信) 5 种。

1.1.2. MEMBER_ROLE

表示当前成员的角色,在单主模式下,成员的角色显示为 PRIMARY 和 SECONDARY 分别用于标识主要成员和次要成员。

1.1.3. MEMBER_VERSION

表示当前成员使用 MySQL 服务器版本,当进行升级或者多个版本组合使用时需要注意里面显示的信息。

1.2. replication_group_member_stats

该表提供了组复制中每个成员事务的验证和应用的统计信息,用户可以通过该表查询队列中正在增长的事务,已经检测多少冲突,有多少事务提交及正在等待提交,通过该表可以观测 MGR 的延迟情况。该表可以查到远程实例的信息,远程统计信息采集周期由 group_replication_flow_control_period 参数控制,默认为 1 秒。

select * from replication_group_member_stats;

root@mysql 11:18:  [performance_schema]>select * from replication_group_member_stats\G
*************************** 1. row ***************************
                              CHANNEL_NAME: group_replication_applier
                                   VIEW_ID: 16831711045345851:21
                                 MEMBER_ID: 4f4ab2eb-b0fd-11ed-b9e2-fa7581637800
               COUNT_TRANSACTIONS_IN_QUEUE: 0
                COUNT_TRANSACTIONS_CHECKED: 1
                  COUNT_CONFLICTS_DETECTED: 0
        COUNT_TRANSACTIONS_ROWS_VALIDATING: 3
        TRANSACTIONS_COMMITTED_ALL_MEMBERS: 9590bf9c-c302-11ed-8d53-faa7cd9c6a00:1-7,
a640da45-e4d1-11ed-a959-fa0e3cc40b00:1-23:1000020
            LAST_CONFLICT_FREE_TRANSACTION: a640da45-e4d1-11ed-a959-fa0e3cc40b00:23
COUNT_TRANSACTIONS_REMOTE_IN_APPLIER_QUEUE: 0
         COUNT_TRANSACTIONS_REMOTE_APPLIED: 1
         COUNT_TRANSACTIONS_LOCAL_PROPOSED: 0
         COUNT_TRANSACTIONS_LOCAL_ROLLBACK: 0

1.2.1. CHANNEL_NAME

组复制通道名称。

1.2.2. VIEW_ID

当前组成员的视图 ID。

1.2.3. MEMBER_ID

组成员的 UUID。每个成员具有不同的 ID,通过它可以识别组成员。

1.2.4. COUNT_TRANSACTIONS_IN_QUEUE

等待冲突检测队列中存在的事务数量,一旦事务通过冲突检测,它们将等待进行应用。

1.2.5. COUNT_TRANSACTIONS_CHECKED

已检查冲突的事务数量。

1.2.6. COUNT_CONFLICTS_DETECTED

未通过冲突检测检查的事务数量。

1.2.7. COUNT_TRANSACTIONS_ROWS_VALIDATING

暂时没明白干啥的

1.2.8. TRANSACTIONS_COMMITTED_ALL_MEMBERS

在全部成员上成功提交的事务,用 GTID 集合表示。

1.2.9. LAST_CONFLICT_FREE_TRANSACTION

被检测最后一个无冲突事务的 GTID 信息。

1.2.10. COUNT_TRANSACTIONS_REMOTE_IN_APPLIER_QUEUE

该成员从组中接收并且等待应用的事务数量。

1.2.11. COUNT_TRANSACTIONS_REMOTE_APPLIED

成员从组中接收并应用的事务数量。

1.2.12. COUNT_TRANSACTIONS_LOCAL_PROPOSED

成员本地产生,并且已经发送给组的事务数量。

1.2.13. COUNT_TRANSACTIONS_LOCAL_ROLLBACK

成员本地产生,已经回滚的事务数量。

1.3. replication_connection_status

该表里包含组复制的连接状态信息,处理事务的 I/O 线程状态,以及 clone 通道状态信息。该表常用于排查复制线程的异常。

select * from performance_schema.replication_connection_status\G

[performance_schema]>select * from replication_connection_status\G
*************************** 1. row ***************************
                                      CHANNEL_NAME: group_replication_applier
                                        GROUP_NAME: a640da45-e4d1-11ed-a959-fa0e3cc40b00
                                       SOURCE_UUID: a640da45-e4d1-11ed-a959-fa0e3cc40b00
                                         THREAD_ID: NULL
                                     SERVICE_STATE: ON
                         COUNT_RECEIVED_HEARTBEATS: 0
                          LAST_HEARTBEAT_TIMESTAMP: 0000-00-00 00:00:00.000000
                          RECEIVED_TRANSACTION_SET: 9590bf9c-c302-11ed-8d53-faa7cd9c6a00:1-7,
a640da45-e4d1-11ed-a959-fa0e3cc40b00:1-42:1000020
                                 LAST_ERROR_NUMBER: 0
                                LAST_ERROR_MESSAGE: 
                              LAST_ERROR_TIMESTAMP: 0000-00-00 00:00:00.000000
                           LAST_QUEUED_TRANSACTION: a640da45-e4d1-11ed-a959-fa0e3cc40b00:42
 LAST_QUEUED_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP: 2023-05-05 13:48:29.209358
LAST_QUEUED_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP: 2023-05-05 13:48:29.209358
     LAST_QUEUED_TRANSACTION_START_QUEUE_TIMESTAMP: 2023-05-05 13:48:29.206229
       LAST_QUEUED_TRANSACTION_END_QUEUE_TIMESTAMP: 2023-05-05 13:48:29.206283
                              QUEUEING_TRANSACTION: 
    QUEUEING_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP: 0000-00-00 00:00:00.000000
   QUEUEING_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP: 0000-00-00 00:00:00.000000
        QUEUEING_TRANSACTION_START_QUEUE_TIMESTAMP: 0000-00-00 00:00:00.000000

1.3.1. CHANNEL_NAME

复制通道的名称,组复制有两个通道,分别是应用通道 group_replication_applier 及恢复通道 group_replication_recovery。

1.3.2. GROUP_NAME

组复制的组名称。

1.3.3. SOURCE_UUID

复制源的 UUID 也就是组复制的名称。

1.3.4. THREAD_ID

I/0 线程的 ID。

1.3.5. SERVICE_STATE

服务线程的状态,ON 表示线程存在,处于活动或空闲状态。OFF 表示线程不存在,CONNECTING 表示线程存在,正在连接源服务器。

1.3.6. COUNT_RECEIVED_HEARTBEATS

自上次重新启动、重置执行 CHANGE REPLICATION SOURCE TO 语句以来,副本收到的心跳信号总数。

1.3.7. LAST_HEARTBEAT_TIMESTAMP

副本上次接收心跳信号的时间戳。

1.3.8. RECEIVED_TRANSACTION_SET

副本接收到的事务集合。

1.3.9. LAST_ERROR_NUMBER

线程错误的数量,为 0 表示没有错误。

1.3.10. LAST_ERROR_MESSAGE

线程的错误信息,为空表示没有错误。

1.3.11. LAST_ERROR_TIMESTAMP

错误发生的时间戳。

1.3.12. LAST_QUEUED_TRANSACTION

上次进入中继日志队列中的事务。

1.3.13. LAST_QUEUED_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP

中继日志队列中的最后一个事务在源服务器上提交的时间戳。

完整参考 replication_connection_status 表说明

2. SQL 案例

2.1. 查询延迟事务数量

SELECT 
  MEMBER_ID AS id, 
  COUNT_TRANSACTIONS_IN_QUEUE AS trx_tobe_certified, 
  COUNT_TRANSACTIONS_REMOTE_IN_APPLIER_QUEUE AS relaylog_tobe_applied, 
  COUNT_TRANSACTIONS_CHECKED AS trx_chkd, 
  COUNT_TRANSACTIONS_REMOTE_APPLIED AS trx_done, 
  COUNT_TRANSACTIONS_LOCAL_PROPOSED AS proposed 
FROM 
  performance_schema.replication_group_member_stats;

trx_tobe_certified 为等待冲突检查的事务数量,relaylog_tobe_applied 表示等待被应用的事务数量,任何一个不为 0 表示有延迟。

2.2. 事务之间差距

SELECT 
  RECEIVED_TRANSACTION_SET 
FROM 
  performance_schema.replication_connection_status 
WHERE 
  channel_name = 'group_replication_applier' 
UNION ALL 
SELECT 
  variable_value 
FROM 
  performance_schema.global_variables 
WHERE 
  variable_name = 'gtid_executed' \G

2.3. 查询组复制状态

select * from performance_schema.replication_group_members;


相关文章

Ansible部署和使用(sshpass)

Ansible部署和使用(sshpass)

简介Ansible默认通过 SSH 协议管理机器。安装Ansible之后,不需要启动或运行一个后台进程,或是添加一个数据库。只要在一台电脑(可以是一台笔记本)上安装好,就可以通过这台电脑管理一组远程的...

8.0 新特性-Generated Invisible Primary Key

8.0 新特性-Generated Invisible Primary Key

说明MySQL Innodb 引擎采用的是 IOT(索引组织表)存储方式,主键的重要性就不言而喻。在早期版本用户如果没有显式指定主键,会自动生成隐藏主键 row_id 来组织 B+ 树,隐藏主键 ro...

MySQL运维实战之ProxySQL(9.8)SQL镜像

使用proxysql的镜像(mirror)功能,可以将SQL发送到一个额外的后端实例执行。还可以将发送到镜像的SQL进行改写,以测试修改后的SQL是否能正常执行。通过mirror_flagOut字段,...

Ambari集群Spark3.x动态资源分配

Ambari集群Spark3.x动态资源分配

环境节点hdp01HDP3.1.5hdp02Spark3.2.4hdp03首先Spark配置History服务配置spark-defaults.confspark.master            ...

Prometheus PromQL语法

一、PromQL语法1.1、数据类型PromQL 表达式计算出来的值有以下几种类型:瞬时向量 (Instant vector)区间向量 (Range vector)标量数据 (Scalar)字符串 (...

网络抓包实战

网络抓包实战

1、为什么要学习抓包?主要是因为碰到网络相关问题,如果不进行抓包的话,可能会很难进行定位解决,抓包可以看做是另类的日志信息收集。对于解决网络问题至关重要。2、抓包普通环境tcpdump -- a po...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。