暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用 MySQL AdminAPI监控 InnoDB Cluster

wulinyu 2025-06-19
122

如果需要使用 AdminAPI 监控、管理、配置 InnoDB 集群,首先需要连接到集群某台成员服务器,获取 InnoDB 集群对象。

mysqlsh

\connect cluster@master-01:3306

var cluster = dba.getCluster('testCluster')

 

后续可以通过该对象查看InnoDB集群拓扑

 

1查看集群拓扑

使用 describe()方法査看 InnoDB 集群拓扑。

cluster.describe()

         {

#集群名

"clusterName": "testCluster",

#集群使用Group Replication 的信息

"defaultReplicaSet":{

"name": "default",

# Group Replication 拓扑,可见由三台服务器组成

"topology". [

         {

"address": "master-01:3306",

"label": "master-01:3306",

"role": "HA"

                                               }

                                               {

                                                        "address": "master-02:3306",

                                                        "label": "master-02:3306",

"role": "HA"

                                                }

                                               {

                                                        "address": "master-03:3306",

                                                        "label": "master-03:3306",

"role": "HA"

                                                }

                                     ],

                            # Group Replication 工作模式,可见这是单主模式集群

                                     "topologyMode":"Single-Primary"

                            }

         }

 

2查看集群状态

使用status()方法查看InnoDB 集群状态,此方法也可看到集群的拓扑。

cluster.status()

         {

# 集群名.

"clusterName": "testCluster",

# 集群使用 Group Replication 的信息,可见主服务是master-01,使用SSL 连接,状态正常,并且提示状态信息为:允许一台服务器离线:

"defaultReplicaSet": {

"name": “default",

"primary": "master-01:3306",

"ssl": "REQUIRED",

"status": "OK",

"statusText": "Cluster is ONLINE and can tolerate up to ONE failure.",.

                   #Group Replication 拓扑,可见由三台服务器组成,每台成员服务器的当前状态

"topology": {

"master-01:3306": {

"address": "master-01:3306",

"memberRole": "PRIMARY",

"mode": "R/W",

"readReplicas": {},

"replicationLag": null,

"role": "HA",

"status": "ONLINE",

"version": "8.0.26"

                                     },

                                     "master-02:3306": {

"address": "master-02:3306",

"memberRole": "SECONDARY",

"mode": "R/O",

"readReplicas": {},

"replicationLag": null,

"role": "HA",

"status": "ONLINE",

"version": "8.0.26"

                                     },

                                     "master-03:3306": {

"address": "master-03:3306",

"memberRole": "SECONDARY",

"mode": "R/O",

"readReplicas": {},

"replicationLag": null,

"role": "HA",

"status": "ONLINE",

"version": "8.0.26"

                                     }

                            },

                            "topologyMode": "Single-Primary"

                   },

# Group Replication 工作模式,可见这是单主模式集群,主服务器是 master-01

"groupInformationSourceMember":"master-01:3306"

         }

status()方法可指定 extended 选项(值 1,2,3)查看集群的扩展状态,值越大显式的状态值越多。

cluster.status({'extended':1})

cluster.status({'extended':2})

cluster.status({'extended':3})

 

3监视 Recovery操作

当集群新增成员服务器在进行分布式恢复操作时,status()中的Recovery 部分可以看到Clone 操作或异步恢复的情况。

cluster.status()

 

为简洁起见,对示例 status()输出进行了裁剪:

"recovery": {

# Clone 开始的时间戳

"cloneStartTime": "2019-07-15 12:50:22.730"

# Clone 操作当前状态.

"cloneState": "In Progress",

"currentStage": "FILE COPY",

         # Clone 操作当前完成比例

"currentStageProgress":61.726837675213865,

# Clone 操作当前阶段状态

"currentStageState": "in Progress"

},

#正在进行克隆“Cloning in progress”,异步恢复“Distributed recovery in progress”

"recoveryStatusText": "Cloning in progress",

 

使用 extended为1或更大值,可以显示更详细分布式恢复信息。

 

·4重新扫描集群

此功能重新扫描集群以查找新加入的,以及已经“过时”的实例。当更改拓扑模式(即:单主模式,多主模式)后也可以重新扫描集群。

如果集群为 8.0.11 及以上版本,使用rescan()方法重新扫描,检测不属于集群的实例,显示为 newlyDiscoveredlnstance 对象。

例如:在运行版本8.0.16的实例上扫描:

cluster.rescan()

"newlyDiscoveredInstances": [

         {

         "host": "ic-4:3306",

"member_id":“82a67a06-2ba3-11e9-8cfc-3c6aa7197deb",

"name": null,

"version": "8.0.16"

}

                            ]

 

 

 

 

 

📌 1. MGR 日常巡检脚本建议包括:

巡检目标

建议命令

集群成员状态

SELECT * FROM performance_schema.replication_group_members;

成员统计指标

SELECT * FROM performance_schema.replication_group_member_stats\G

当前主节点信息

SHOW STATUS LIKE 'group_replication_primary_member';

GR线程状态

SHOW PROCESSLIST;(或 SELECT * FROM performance_schema.processlist WHERE user='system user';)

复制一致性配置

SHOW VARIABLES LIKE 'group_replication_consistency';

踢出超时设置

SHOW VARIABLES LIKE 'group_replication_member_expel_timeout';

异常日志检查

SHOW WARNINGS;、SHOW ERRORS;、查看 error log

节点间连通性

可结合 ping 或 telnet 端口、SELECT @@hostname;

可以包装成一个 SQL 文件定时巡检运行,也可以基于 Shell 脚本 + mysqlsh 自动输出报告。

 

📌 2. 问题节点踢出与重新加入操作流程(MySQL Shell 版)建议包括:

🌐 适用于节点状态为 UNREACHABLE, ERROR, RECOVERING 时:

  • Step 1:确认节点确实不可达(或确实故障)

SELECT MEMBER_HOST, MEMBER_STATE FROM performance_schema.replication_group_members;

 

  • Step 2:查看是否自动被驱逐或手动驱逐(检查 group_replication_member_expel_timeout 是否过短)

 

  • Step 3:手动从集群移除节点(如果未自动踢出)

var cluster = dba.getCluster();

cluster.forceQuorumUsingPartitionOf('uuid主机(正常的主机)');

cluster.removeInstance('故障主机:端口');

  • Step 4:确认该节点服务启动正常,MySQL能访问、配置无误后重新加入

dba.configureInstance('节点:端口', {clusterAdmin: 'root', password: 'xxx', ...});

cluster.rejoinInstance('节点:端口');

  • Step 5:确认状态恢复为 ONLINE

SELECT * FROM performance_schema.replication_group_members;

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论