在 CentOS Stream 9 中部署 MySQL 8.0 MGR(MySQL Group Replication) 集群,主要目的是实现 MySQL 高可用集群,确保在出现故障时,系统可以无缝切换到另一个节点,从而提高数据的可用性和系统的容错能力。

目标架构

我们要在 CentOS Stream 9 上搭建一个 一主两从 的 MySQL MGR 集群,其中:

  • 主节点(Primary)处理写操作。
  • 从节点(Secondary)处理读操作,且具备故障转移的能力。

环境准备

假设我们在三台机器上分别部署 MySQL:

  1. mysql-node1 — 主节点(Primary)
  2. mysql-node2 — 从节点(Secondary)
  3. mysql-node3 — 从节点(Secondary)

一、系统准备

首先,确保你有三台机器,每台机器的系统为 CentOS Stream 9,并且能够相互通信。

  1. 关闭防火墙(仅限测试环境)sudo systemctl stop firewalld sudo systemctl disable firewalld
  2. 禁用 SELinux(在生产环境中可以配置 SELinux,以确保安全性,但在这里为了简化,我们禁用它):编辑 /etc/selinux/config 文件:sudo vi /etc/selinux/config 修改 SELINUX=enforcing 为 SELINUX=disabled,然后重启系统。sudo reboot
  3. 安装 MySQL 8.0:在每个节点上安装 MySQL 8.0,首先配置 MySQL 官方的 YUM 仓库:sudo dnf install https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm 然后,安装 MySQL 8.0:sudo dnf install mysql-community-server 启动 MySQL 服务并设置开机自启:sudo systemctl start mysqld sudo systemctl enable mysqld
  4. 查看 MySQL 初始密码:安装完 MySQL 后,初始密码会被自动生成,并保存在日志中。可以通过以下命令查看初始密码:sudo grep 'temporary password' /var/log/mysqld.log 使用这个密码登录 MySQL 并修改密码:mysql -u root -p 在登录后,修改密码:ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';

二、配置 MySQL 集群

1. 配置 MySQL 主从复制

在 MySQL 8.0 中,Group Replication 是基于 InnoDB Cluster 的,可以提供自动化的故障转移和负载均衡。

配置主节点(mysql-node1)
  1. 打开 MySQL 配置文件 /etc/my.cnf,并添加以下配置:sudo vi /etc/my.cnf 在 [mysqld] 部分中添加以下配置:[mysqld] server-id=1 log-bin=mysql-bin binlog_format=row enforce-gtid-consistency=ON gtid-mode=ON master-info-repository=TABLE relay-log-info-repository=TABLE log-slave-updates=ON transaction-write-set-execution=ON group-replication=ON group-replication-start-on-boot=OFF group-replication-local-address= "mysql-node1:33061" group-replication-group-name="aaaaaaa-bbbbbb-ccccc-dddd" # 随机的组名 group-replication-ip-whitelist="127.0.0.1, mysql-node1, mysql-node2, mysql-node3"
  2. 启动 Group Replication:登录 MySQL:mysql -u root -p 启动 Group Replication:SET GLOBAL group_replication_bootstrap_group=ON; START GROUP_REPLICATION; SET GLOBAL group_replication_bootstrap_group=OFF;
  3. 查看状态:SHOW STATUS LIKE 'group_replication%'; 确保返回的信息显示为 ON
配置从节点(mysql-node2 和 mysql-node3)

对于从节点,我们需要在每个节点的配置文件中添加以下内容:

  1. 打开 /etc/my.cnf 并进行配置:sudo vi /etc/my.cnf 在 [mysqld] 部分添加:[mysqld] server-id=2 # 对于 mysql-node2,mysql-node3 则是 3 log-bin=mysql-bin binlog_format=row enforce-gtid-consistency=ON gtid-mode=ON master-info-repository=TABLE relay-log-info-repository=TABLE log-slave-updates=ON transaction-write-set-execution=ON group-replication=ON group-replication-start-on-boot=OFF group-replication-local-address="mysql-node2:33061" # mysql-node3 对应 mysql-node3:33061 group-replication-group-name="aaaaaaa-bbbbbb-ccccc-dddd" group-replication-ip-whitelist="127.0.0.1, mysql-node1, mysql-node2, mysql-node3"
  2. 启动 Group Replication:登录 MySQL:mysql -u root -p 启动从节点的 Group Replication:START GROUP_REPLICATION;
  3. 查看状态:SHOW STATUS LIKE 'group_replication%';

2. 验证集群状态

使用以下命令检查集群状态,确保所有节点都已正确加入组:

SELECT * FROM performance_schema.replication_group_members;

返回结果应显示三台机器,并且状态为 ONLINE

三、配置故障转移和自动选主

MySQL Group Replication 会在主节点出现故障时自动进行故障转移,选择一个从节点成为新的主节点。

1. 验证自动故障转移

你可以通过停止主节点 MySQL 服务来验证故障转移功能:

sudo systemctl stop mysqld   # 在 mysql-node1 上执行

此时,mysql-node2 或 mysql-node3 会自动被选为新的主节点。

你可以在从节点上通过以下命令查看当前的主节点:

SHOW VARIABLES LIKE 'group_replication_primary_member';

2. 恢复主节点

当故障转移完成后,可以重启主节点,并通过以下命令将其重新加入集群:

sudo systemctl start mysqld   # 在 mysql-node1 上启动

登录到主节点,确保它重新加入集群:

START GROUP_REPLICATION;

四、总结

通过以上步骤,我们成功地在 CentOS Stream 9 上部署了 MySQL 8.0 的 MGR(MySQL Group Replication)集群。这种集群配置提供了以下优势:

  • 高可用性:在主节点出现故障时,系统能够自动选举一个新的主节点,确保服务的持续性。
  • 数据一致性:GTID(全局事务标识符)确保了所有节点的数据一致性。
  • 负载均衡:读操作可以分担到从节点,提高整体性能。

通过此方式,你可以为你的 MySQL 集群搭建高可用架构,适应生产环境中的各种需求。