在 CentOS Stream 9 上部署 MySQL 8.0 的 MGR(MySQL Group Replication)集群,实现一主两从的高可用架构,需要涉及网络设置、MySQL 安装、MGR 配置和防火墙开放等多个步骤。以下是详细的部署教程:
🧰 环境说明
主机角色 | 主机名 | IP地址 |
---|---|---|
主节点 | mgr-master | 192.168.100.10 |
从节点1 | mgr-node1 | 192.168.100.11 |
从节点2 | mgr-node2 | 192.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_ID | MEMBER_HOST | MEMBER_STATE |
---|---|---|
… | mgr-master | ONLINE |
… | mgr-node1 | ONLINE |
… | mgr-node2 | ONLINE |
只会有一台处于 PRIMARY
状态,其余为 SECONDARY
。
✅ 六、验证复制功能
在主节点上创建测试数据库:
CREATE DATABASE test_mgr;
在从节点上查看是否同步成功:
SHOW DATABASES;
如果看到 test_mgr
,说明复制成功。
🧯 七、问题排查建议
问题 | 排查建议 |
---|---|
Group Replication failed to start | 检查网络、防火墙端口、配置项拼写、GTID 设置 |
成员状态为 RECOVERING 卡住 | 可能为防火墙未放行 33061 |
无法加入集群 | 确认 group_seeds 配置完整、账号授权没问题 |
忘记执行 bootstrap | 非引导节点请勿执行 bootstrap 否则会形成两个 group |
🔐 八、常用端口说明
端口号 | 用途 |
---|---|
3306 | MySQL 服务端口 |
33061 | Group Replication 通信端口 |
如需开启防火墙(生产环境):
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --permanent --add-port=33061/tcp
firewall-cmd --reload
📚 参考资料
如果你需要后续接入 ProxySQL 或 MGR + MHA 混合高可用架构,欢迎继续提问!
发表回复