17-MGR 3节点集群实验
环境信息
| 节点 | 主机名 | IP | OS |
|---|---|---|---|
| n1 | n1 | 192.168.209.19 | Rockylinux 9.6 |
| n2 | n2 | 192.168.209.20 | Rockylinux 9.6 |
| n3 | n3 | 192.168.209.21 | Rockylinux 9.6 |
MySQL 版本:8.0.43
端口:3306
Group Communication 端口:33061
1. 安装 MySQL
执行 MySQL 安装脚本。
2. 配置 MySQL 配置文件 /etc/my.cnf
在每台节点添加 MGR 配置(唯一的 server_id,其他参数相同):
1 | 每个节点唯一ID,n1=19, n2=20, n3=21 |
注意:
每台节点
server_id唯一group_replication_local_address必须是本机 IPgroup_replication_group_seeds所有节点都一致
3. 创建 MGR 复制账号(在 PRIMARY 节点 n1 执行)
为了避免 empty username 和 caching_sha2_password 问题,使用 mysql_native_password:
1 | create user if not exists 'repl'@'%' identified with mysql_native_password by 'Aa123qwe'; |
4. 启动组复制
4.1 PRIMARY 节点(n1)首次启动
1 | set global group_replication_bootstrap_group=on; |
4.2 SECONDARY 节点(n2、n3)
- 清理旧残留状态(如果之前尝试过加入)
1 | stop group_replication; |
- 配置恢复通道账号
1 | change replication source to |
注: 必须与 PRIMARY 上创建的账号一致
- 启动组复制
1 | start group_replication; |
- 验证集群状态
1 | select member_host, member_state, member_role |
- 预期输出
1 | +--------------+--------------+-------------+ |
5. MGR 单主模式
5.1 简介
loose-group_replication_single_primary_mode=ON说明集群 最多只有一个 PRIMARY,其他节点都是 SECONDARY。
PRIMARY 节点负责写操作,SECONDARY 只能读(默认
super_read_only=ON)。当 PRIMARY 出现故障或下线,MGR 会自动选择新的 PRIMARY。
5.2 新主选举触发条件
PRIMARY 节点下线或故障,包括:
MySQL 进程 crash 或关闭。
节点网络隔离(无法与多数节点通信)。
手动停止 PRIMARY 的
START/STOP GROUP_REPLICATION。PRIMARY 超时没心跳,认为死亡。
5.3 选主流程总结
假设 n1 是 PRIMARY,下线后:
n2、n3 发现 n1 超过超时时间未响应。
两个节点开始投票:
检查 GTID,选择已执行事务最多的节点。
如果 GTID 相同,server_id 小的胜出。
选举结果生成,新的 PRIMARY 节点切换完成。
新 PRIMARY 开始允许写操作,SECONDARY 继续只读。
错误记录
主机名配置错误:完全按教程做,没发现教程的错误有 2 个 n2
SELinux 未关闭:需要关闭 SELinux 或配置相应策略
旧主恢复问题:模拟主从选取时,旧主没有配置恢复通道账号
1 | -- 在重新加入集群前需要配置恢复通道 |
