在 CentOS Stream 9 上部署 MySQL 8.0 的 MGR(MySQL Group Replication)集群,实现一主两从的高可用架构,需要涉及网络设置、MySQL 安装、MGR 配置和防火墙开放等多个步骤。以下是详细的部署教程:


🧰 环境说明

主机角色主机名IP地址
主节点mgr-master192.168.100.10
从节点1mgr-node1192.168.100.11
从节点2mgr-node2192.168.100.12

系统版本:CentOS Stream 9
MySQL版本:MySQL 8.0.36
MGR模式:单主模式(Single-Primary Mode)


🧱 一、系统准备(所有节点)

1. 配置主机名并互相解析(可修改 /etc/hosts

hostnamectl set-hostname mgr-master  # 其它节点改成 mgr-node1/mgr-node2

在每台机器 /etc/hosts 添加以下内容:

192.168.100.10 mgr-master
192.168.100.11 mgr-node1
192.168.100.12 mgr-node2

2. 关闭防火墙 & SELinux(测试环境)

systemctl disable --now firewalld
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

📦 二、安装 MySQL 8.0(所有节点)

1. 安装依赖和 Yum 源

dnf install -y https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm
dnf install -y mysql-community-server

2. 启动并配置

systemctl enable --now mysqld
grep 'temporary password' /var/log/mysqld.log

登录修改初始密码:

mysql -uroot -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MySQL@123';

🧮 三、MGR 配置(每个节点)

1. 修改配置文件 /etc/my.cnf,添加以下内容:

[mysqld]
server-id=1                 # 每个节点不同,例如:2, 3
log_bin=mysql-bin
binlog_checksum=NONE
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
transaction_write_set_extraction=XXHASH64
log_slave_updates=ON
binlog_format=ROW

# MGR 配置
loose-group_replication_group_name="aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
loose-group_replication_start_on_boot=off
loose-group_replication_local_address="192.168.100.10:33061"  # 改为当前节点 IP:port
loose-group_replication_group_seeds="192.168.100.10:33061,192.168.100.11:33061,192.168.100.12:33061"
loose-group_replication_bootstrap_group=off
loose-group_replication_single_primary_mode=ON
loose-group_replication_enforce_update_everywhere_checks=OFF

⚠️ 注意:每台服务器的 server-id 和 loose-group_replication_local_address 必须唯一。

2. 重启 MySQL 并授权复制账户

systemctl restart mysqld

mysql -uroot -p
-- 所有节点执行
CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'Repl@123';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;

🚀 四、初始化并启动集群

1. 启用插件(所有节点)

INSTALL PLUGIN group_replication SONAME 'group_replication.so';

2. 设置引导节点(仅在主节点执行)

SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;

3. 启动其它节点的 MGR(从节点)

START GROUP_REPLICATION;

🔍 五、查看集群状态

SELECT * FROM performance_schema.replication_group_members;

结果示例:

MEMBER_IDMEMBER_HOSTMEMBER_STATE
mgr-masterONLINE
mgr-node1ONLINE
mgr-node2ONLINE

只会有一台处于 PRIMARY 状态,其余为 SECONDARY


✅ 六、验证复制功能

在主节点上创建测试数据库:

CREATE DATABASE test_mgr;

在从节点上查看是否同步成功:

SHOW DATABASES;

如果看到 test_mgr,说明复制成功。


🧯 七、问题排查建议

问题排查建议
Group Replication failed to start检查网络、防火墙端口、配置项拼写、GTID 设置
成员状态为 RECOVERING 卡住可能为防火墙未放行 33061
无法加入集群确认 group_seeds 配置完整、账号授权没问题
忘记执行 bootstrap非引导节点请勿执行 bootstrap 否则会形成两个 group

🔐 八、常用端口说明

端口号用途
3306MySQL 服务端口
33061Group Replication 通信端口

如需开启防火墙(生产环境):

firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --permanent --add-port=33061/tcp
firewall-cmd --reload

📚 参考资料


如果你需要后续接入 ProxySQL 或 MGR + MHA 混合高可用架构,欢迎继续提问!