MySQL Group Replication(MGR)是一种高可用性解决方案,旨在通过提供数据复制和故障转移功能来增强MySQL数据库的可用性。下面将详细讲解如何搭建MySQL MGR高可用集群,结合实际操作与代码示例。
前提条件
在搭建MySQL MGR之前,确保你已经安装好MySQL 5.7.17或更高版本,并确认各节点之间网络互通。假设我们有三台服务器,IP分别为 192.168.1.1
、192.168.1.2
和 192.168.1.3
,下面以这三台服务器为例子进行说明。
1. 安装MySQL
首先,在每一台服务器上安装MySQL。以Ubuntu为例:
sudo apt update
sudo apt install mysql-server
2. 配置MySQL
在每台服务器上编辑MySQL配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf
,添加以下配置:
[mysqld]
server-id=1 # 对应每个节点,1, 2, 3
gtid-mode=ON
enforce-gtid-consistency=ON
log-bin=mysql-bin
binlog-format=ROW
transaction-write-set-extraction=XXHASH64
loose-group_replication_group_name="aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee" # 全局唯一标识
loose-group_replication_start_on_boot=ON
loose-group_replication_local_address="192.168.1.1:24901" # 节点地址
loose-group_replication_group_seeds="192.168.1.1:24901,192.168.1.2:24901,192.168.1.3:24901" # 所有节点
loose-group_replication_bootstrap_group=OFF
注意,server-id
、loose-group_replication_local_address
和loose-group_replication_group_name
需要针对每个节点进行调整。
3. 启动MySQL服务
确保MySQL服务启动并运行:
sudo systemctl start mysql
sudo systemctl enable mysql
4. 创建用户并授权
在任意一台MySQL上登录,创建用于组复制的用户并给予权限:
CREATE USER 'replicator'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
5. 启用组复制
在每一台MySQL节点上执行以下命令:
SET GLOBAL gtzid_mode=ON; -- 确保GTID模式已开启
START GROUP_REPLICATION;
6. 验证组复制状态
在任一节点上,可以通过以下命令查看组复制的状态:
SELECT * FROM performance_schema.replication_group_members;
如果所有节点均已成功加入并处于状态“ONLINE”,说明集群搭建成功。
7. 测试高可用性
在任一节点上进行数据插入操作:
CREATE DATABASE testdb;
USE testdb;
CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(50));
INSERT INTO users VALUES (1, 'Alice'), (2, 'Bob');
检查其它节点中是否能够看到相同的数据,使用相同的查询语句。
8. 故障转移测试
可以停止某一节点的MySQL服务,观察系统是否正常运行,并通过之前的查询验证数据一致性。
sudo systemctl stop mysql
9. 恢复节点
当故障节点恢复后,执行如下命令重新加入集群:
START GROUP_REPLICATION;
总结
通过以上步骤,我们成功搭建了一个基于MySQL Group Replication的高可用集群。MGR提供了在多节点之间自动处理数据同步和故障转移的能力,大大提高了数据库的可用性和数据一致性。理解和掌握MGR的配置和管理是确保企业数据库系统高可用性的重要基础。