当前位置:首页 > 系统教程 > 正文

CentOS Stream 9 搭建 MySQL 8.0 MGR 集群(一主两从高可用架构实战)

CentOS Stream 9 搭建 MySQL 8.0 MGR 集群(一主两从高可用架构实战)

本文详细介绍如何在 CentOS Stream 9 上部署 MySQL 8.0Group Replication (MGR) 一主两从高可用集群。通过本教程,即使是新手也能一步步搭建一个健壮的数据库集群,实现数据强一致性和自动故障转移。

1. 环境准备

准备三台 CentOS Stream 9 服务器,配置如下:

  • Node1 (主节点): 192.168.1.101, hostname: mgr-node1
  • Node2 (从节点): 192.168.1.102, hostname: mgr-node2
  • Node3 (从节点): 192.168.1.103, hostname: mgr-node3

确保三台机器之间网络互通,并关闭防火墙和 SELinux:

    # 关闭防火墙sudo systemctl stop firewalldsudo systemctl disable firewalld# 临时禁用 SELinuxsudo setenforce 0# 永久禁用(需重启)sudo sed -i "s/^SELINUX=enforcing$/SELINUX=permissive/" /etc/selinux/config  

2. 安装 MySQL 8.0

所有节点执行以下步骤安装 MySQL 8.0:

    # 添加 MySQL 官方 YUM 仓库sudo dnf install -y https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm# 安装 MySQL 服务器sudo dnf install -y mysql-server# 启动 MySQL 并设置开机自启sudo systemctl start mysqldsudo systemctl enable mysqld# 获取临时 root 密码sudo grep "temporary password" /var/log/mysqld.log# 使用临时密码登录并修改 root 密码(示例密码:MyNewPass4!)mysql -uroot -p  

登录 MySQL 后执行密码修改:

    ALTER USER "root"@"localhost" IDENTIFIED BY "MyNewPass4!";  

3. 基础 MySQL 配置(所有节点)

编辑 /etc/my.cnf 文件,添加以下配置(根据节点修改 server-id):

    [mysqld]server-id=1              # 节点1为1,节点2为2,节点3为3gtid_mode=ONenforce_gtid_consistency=ONlog_bin=mysql-binbinlog_format=ROWrelay_log=relay-logrelay_log_recovery=ONtransaction_write_set_extraction=XXHASH64loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"  # 生成一个 UUIDgroup_replication_start_on_boot=OFFgroup_replication_local_address="192.168.1.101:33061"  # 节点1的本地组通信地址group_replication_group_seeds="192.168.1.101:33061,192.168.1.102:33061,192.168.1.103:33061"group_replication_bootstrap_group=OFFgroup_replication_ip_whitelist="192.168.1.0/24"  

注意:group_replication_group_name 应使用 SELECT UUID() 生成一个统一的值。配置完成后重启 MySQL:

    sudo systemctl restart mysqld  

4. 安装 MGR 插件并创建复制用户

所有节点 上执行:

    mysql -uroot -p# 安装组复制插件INSTALL PLUGIN group_replication SONAME "group_replication.so";# 创建用于组复制的用户(所有节点执行)SET SQL_LOG_BIN=0;CREATE USER "repl"@"%" IDENTIFIED BY "ReplPassword!";GRANT REPLICATION SLAVE ON . TO "repl"@"%";GRANT CONNECTION_ADMIN ON . TO "repl"@"%";GRANT BACKUP_ADMIN ON . TO "repl"@"%";GRANT GROUP_REPLICATION_ADMIN ON . TO "repl"@"%";FLUSH PRIVILEGES;SET SQL_LOG_BIN=1;# 配置恢复通道(所有节点)CHANGE MASTER TO MASTER_USER="repl", MASTER_PASSWORD="ReplPassword!" FOR CHANNEL "group_replication_recovery";  
CentOS Stream 9 搭建 MySQL 8.0 MGR 集群(一主两从高可用架构实战) Group Replication  部署 高可用集群 一主两从 第1张

5. 启动 MGR 集群

首先在 主节点 (mgr-node1) 上引导组:

    mysql -uroot -pSET GLOBAL group_replication_bootstrap_group=ON;START GROUP_REPLICATION;SET GLOBAL group_replication_bootstrap_group=OFF;# 验证组是否已启动SELECT * FROM performance_schema.replication_group_members;  

然后在 从节点 (mgr-node2 和 mgr-node3) 上启动组复制:

    mysql -uroot -pSTART GROUP_REPLICATION;# 验证成员状态SELECT * FROM performance_schema.replication_group_members;  

此时应看到三个节点状态均为 ONLINE,主节点角色为 PRIMARY,从节点为 SECONDARY。

6. 验证数据同步与高可用

在主节点创建数据库和表,并插入数据,观察从节点是否同步:

    -- 主节点执行CREATE DATABASE test;USE test;CREATE TABLE t1 (id INT PRIMARY KEY, name VARCHAR(20));INSERT INTO t1 VALUES (1, "MGR Test");-- 从节点查询SELECT * FROM test.t1;  

测试故障转移:手动停止主节点的 MySQL 服务,观察剩余节点是否选举出新的主节点。

    # 在节点1上停止 MySQLsudo systemctl stop mysqld# 在节点2或3上查看成员状态SELECT * FROM performance_schema.replication_group_members;  

集群应自动选举新主节点,数据继续可用。

7. 总结

至此,我们已在 CentOS Stream 9 上成功部署了 MySQL 8.0 MGR 一主两从集群。该方案提供了高可用性和数据一致性,适用于生产环境。注意在实际部署中设置合适的防火墙规则、使用更安全的密码,并定期备份。通过本文的实践,您已掌握了 MySQL Group Replication 的核心配置。