在 CentOS Stream 9 中部署 MySQL 8.0 MGR(MySQL Group Replication) 集群,主要目的是实现 MySQL 高可用集群,确保在出现故障时,系统可以无缝切换到另一个节点,从而提高数据的可用性和系统的容错能力。
目标架构
我们要在 CentOS Stream 9 上搭建一个 一主两从 的 MySQL MGR 集群,其中:
- 主节点(Primary)处理写操作。
- 从节点(Secondary)处理读操作,且具备故障转移的能力。
环境准备
假设我们在三台机器上分别部署 MySQL:
mysql-node1
— 主节点(Primary)mysql-node2
— 从节点(Secondary)mysql-node3
— 从节点(Secondary)
一、系统准备
首先,确保你有三台机器,每台机器的系统为 CentOS Stream 9,并且能够相互通信。
- 关闭防火墙(仅限测试环境):
sudo systemctl stop firewalld sudo systemctl disable firewalld
- 禁用 SELinux(在生产环境中可以配置 SELinux,以确保安全性,但在这里为了简化,我们禁用它):编辑
/etc/selinux/config
文件:sudo vi /etc/selinux/config
修改SELINUX=enforcing
为SELINUX=disabled
,然后重启系统。sudo reboot
- 安装 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
- 查看 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)
- 打开 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"
- 启动 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;
- 查看状态:
SHOW STATUS LIKE 'group_replication%';
确保返回的信息显示为ON
。
配置从节点(mysql-node2 和 mysql-node3)
对于从节点,我们需要在每个节点的配置文件中添加以下内容:
- 打开
/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"
- 启动 Group Replication:登录 MySQL:
mysql -u root -p
启动从节点的 Group Replication:START GROUP_REPLICATION;
- 查看状态:
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 集群搭建高可用架构,适应生产环境中的各种需求。
发表回复