MGR集群场景恢复处理
目录
- 说明
- 场景1 三台服务器全部重启
- 场景2 只有一台重启了
- 场景3 网络异常导致集群长时间不能恢复
说明
一般MySQL8 MGR集群基本上是1主2从模式,部署在机房中,理论上应该分配到不同的机房,但是实际场景中客户为节省资源全部放在一个机房中。
如果遇到断电重启后有可能出现3台服务器中的MySQL启动异常。
场景1 三台服务器全部重启
服务器上查看MySQL错误日志 error.log,都显示类似如下:
54:33061 on local port: 33061.'
2024-11-29T03:36:46.204012Z 0 [ERROR] [MY-011735] [Repl] Plugin group_replication reported: '[GCS] Error on opening a connection to 100.80.50.153:33061 on local port: 33061.'
2024-11-29T03:36:46.204181Z 0 [ERROR] [MY-011735] [Repl] Plugin group_replication reported: '[GCS] Error on opening a connection to 100.80.50.154:33061 on local port: 33061.'
2024-11-29T03:36:46.204343Z 0 [ERROR] [MY-011735] [Repl] Plugin group_replication reported: '[GCS] Error on opening a connection to 100.80.50.153:33061 on local port: 33061.'
2024-11-29T03:36:46.204522Z 0 [ERROR] [MY-011735] [Repl] Plugin group_replication reported: '[GCS] Error on opening a connection to 100.80.50.154:33061 on local port: 33061.'
2024-11-29T03:36:46.204688Z 0 [ERROR] [MY-011735] [Repl] Plugin group_replication reported: '[GCS] Error on opening a connection to 100.80.50.153:33061 on local port: 33061.'
2024-11-29T03:36:46.204857Z 0 [ERROR] [MY-011735] [Repl] Plugin group_replication reported: '[GCS] Error on opening a connection to 100.80.50.154:33061 on local port: 33061.'
2024-11-29T03:36:46.205041Z 0 [ERROR] [MY-011735] [Repl] Plugin group_replication reported: '[GCS] Error on opening a connection to 100.80.50.153:33061 on local port: 33061.'
2024-11-29T03:36:46.205202Z 0 [ERROR] [MY-011735] [Repl] Plugin group_replication reported: '[GCS] Error on opening a connection to 100.80.50.154:33061 on local port: 33061.'
,,,
在任意一台服务器上,发现MySQL本身服务均正常,可以登录进去.
查看SQL:
SELECT * FROM performance_schema.replication_group_members;
都只有一条记录且状态信息为 OFFLINE
恢复方法如下:
- 重新设置主节点
在选中的服务器上登录MySQL服务后,执行如下命令SQL
SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;
备注:
在一主两从模式中,一般主节点的 super_read_only 为 OFF ,从节点的 super_read_only 为 ON
SET GLOBAL super_read_only = ON; -- 开启只读(即使是超级用户也不能写入)
SET GLOBAL super_read_only = OFF; -- 关闭只读
一般情况下无需更改,除非你想在原来从节点服务器上手动指定该节点为引导节点时使用改参数。
- 重新加入集群
其他服务器上登录MySQL服务后,执行如下命令SQL
START GROUP_REPLICATION;
- 查看集群状态
SELECT * FROM performance_schema.replication_group_members;
场景2 只有一台重启了
相较于场景一,只有部分比如一台服务器重启了,那么可以将这个服务器中的MySQL实例重新加入这个集群即可。
START GROUP_REPLICATION;SELECT * FROM performance_schema.replication_group_members;
备注:
一般开启参数group_replication_start_on_boot = on
控制 MySQL 实例重启时是否自动加入 Group Replication 集群。
my.cnf文件在 [mysqld] 模块下可以增加如下:
[mysqld]
group_replication_start_on_boot=ON
场景3 网络异常导致集群长时间不能恢复
这种情况比较严重,一般不被发现原因主要是只有一台长时间
远离了集群,且剩余的2台虽然还可服务,但是网络问题,导致现场运维重启这3台服务器,不巧的事重启了主节点服务器,重启结果发现3台服务器的集群无法起来,应用全部报错!
一般错误日志都包含如下提示信息:
[Repl] Plugin group_replication reported: 'Member with address ... has become unreachable.'[Repl] Plugin group_replication reported: 'Group membership changed to ...[Repl] Plugin group_replication reported: 'Member with address ... is reachable again.[Repl] Plugin group_replication reported: '[GCS] Error on opening a connection to Repl] Plugin group_replication reported: '[GCS] The member was unable to join the group. Local port: 33061'[Repl] Plugin group_replication reported: 'Timeout on wait for view after joining group'
当你准备采用场景一的模式恢复集群时,第一步正常,第二步(加入集群)出现错误,一般错误情况如下:
...[Repl] Plugin group_replication reported: 'This member will start distributed recovery using clone. It is due to no ONLINE member has the missing data for recovering in its binary logs.'
...[Repl] Plugin group_replication reported: 'There was an issue when configuring the remote cloning process: The clone plugin is not present or active in this server.'
原因:
- 如果新节点的数据与集群主节点“差距很小”(比如GTID进度落后较少),直接用基于binlog的增量同步,速度快,无需clone插件。
- 如果数据差距很大(比如全新节点,完全空库,或者日志已被清理),MGR就需要用物理快照clone,这时候就强制要用clone插件。
处理:
- 关闭当前集群
STOP GROUP_REPLICATION;
- 安装CLONE插件
所有节点上执行:
-- 安装 Clone 插件INSTALL PLUGIN clone SONAME 'mysql_clone.so';-- 验证安装成功
SHOW PLUGINS;-- 创建clone用户
CREATE USER 'clone_user'@'%' IDENTIFIED BY 'password333';
GRANT BACKUP_ADMIN, CLONE_ADMIN ON *.* TO 'clone_user'@'%';
FLUSH PRIVILEGES;
备注:
原来从节点需要设置只读参数为OFF
SET GLOBAL read_only=OFF;
SET GLOBAL super_read_only=OFF;
安装完成之后记得重新设置为 ON
my.cnf文件中可增加:
[mysqld]
plugin-load-add=mysql_clone.so
clone=ON
- 重新选中主节点
-- 设置引导参数
SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;-- 验证状态
SELECT * FROM performance_schema.replication_group_members;
- 加入集群
START GROUP_REPLICATION;
- 可查看clone进度
SELECT * FROM performance_schema.clone_status\G
SELECT * FROM performance_schema.clone_progress\G
现象 | 常见原因 | 解决办法 |
---|---|---|
RECOVERING 卡住/超时 | 数据量大、clone慢 | 耐心等待 |
RECOVERING 一直不变或报错 | clone 插件/权限/配置问题 | 检查 clone_status 日志/权限 |
一直未 ONLINE | 网络互通、用户密码、GTID不一致等 | 检查网络权限/GTID设置 |
报 clone permission denied | clone_user 权限不全 | 重新授权 |
其他 clone-related 错误 | 插件未装/配置未同步 | 所有节点都 INSTALL PLUGIN |
- 查看最终集群状态
SELECT * FROM performance_schema.replication_group_members;
-- 查看状态有无 ONLINE
场景的中小企业的业务场景MGR异常恢复场景就这些。