MySQL 8.0.18 MGR 搭建及其切换功能攻略
本文主要介绍如何在 CentOS 7 上搭建 MySQL 8.0.18 MGR 集群,并演示如何使用 MGR 进行集群节点的切换操作。以下是完整的攻略过程:
1. 安装 MySQL 8.0.18
使用 yum 命令安装 MySQL 8.0.18:
sudo yum install mysql-community-server
安装完成后,启动 MySQL 服务:
sudo systemctl start mysqld
2. 配置 MGR
2.1 创建 MGR 用户
进入 MySQL 命令行,输入以下语句创建 MGR 用户:
CREATE USER 'mgr'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'mgr'@'%';
2.2 设置 MySQL 参数
打开 MySQL 配置文件 /etc/my.cnf
,在 [mysqld]
部分添加以下参数:
skip-log-bin
enforce_gtid_consistency=ON
gtid_mode=ON
binlog_checksum=NONE
transaction_write_set_extraction=XXHASH64
loose-group_replication_bootstrap_group=OFF
loose-group_replication_enforce_update_everywhere_checks=ON
loose-group_replication_single_primary_mode=OFF
loose-group_replication_auto_increment_increment=7
loose-group_replication_start_on_boot=OFF
2.3 启用 MGR 组件
进入 MySQL 命令行,输入以下语句启用 MGR 组件:
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
3. 创建 MGR 集群
3.1 准备节点
假设我们有三台服务器,它们的 IP 地址和主机名分别为:
- 192.168.0.101: node1
- 192.168.0.102: node2
- 192.168.0.103: node3
为了简化操作,我们把这三台服务器的 MySQL 密码都设置为 password
。
3.2 启动第一个节点
在第一台服务器上进入 MySQL 命令行,输入以下语句以启动 MGR:
SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;
执行以上语句后,该节点就成为了 MGR 集群的启动节点。
3.3 启动其他节点
在第二台和第三台服务器上进入 MySQL 命令行,输入以下语句以加入 MGR 集群:
SET GLOBAL group_replication_bootstrap_group=OFF;
START GROUP_REPLICATION;
执行以上语句后,这两台服务器就成为了 MGR 集群的工作节点。
4. 测试 MGR 集群
4.1 查看集群状态
在第一个节点的 MySQL 命令行输入以下语句查看集群状态:
SELECT * FROM performance_schema.replication_group_members;
如果查看到的结果如下所示,说明 MGR 集群已经正常启动了:
+---------------------------+--------------------------------------+---------+-------------+--------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_STATE | MEMBER_ROLE | MEMBER_HOST |
+---------------------------+--------------------------------------+---------+-------------+--------------+
| group_replication_applier | 2b9c9b8c-berb-11eb-969d-080027c45920 | ONLINE | PRIMARY | node2:3306 |
| group_replication_applier | 928d8d16-berb-11eb-a648-080027c45920 | ONLINE | SECONDARY | node3:3306 |
| group_replication_applier | 8e452f45-berb-11eb-bada-080027c45920 | ONLINE | SECONDARY | node1:3306 |
+---------------------------+--------------------------------------+---------+-------------+--------------+
4.2 进行数据写入测试
在任意一台服务器的 MySQL 命令行输入以下语句进行数据写入测试:
CREATE DATABASE test;
USE test;
CREATE TABLE test (id INT NOT NULL PRIMARY KEY, name VARCHAR(30));
INSERT INTO test VALUES (1, 'Alice'), (2, 'Bob'), (3, 'Charlie');
写入数据后,我们可以在任意一台服务器上查看测试结果,并验证是否数据同步成功。
5. 切换 MGR 集群节点
5.1 离线节点
在任意一台服务器的 MySQL 命令行输入以下语句停止 MGR 节点:
STOP GROUP_REPLICATION;
5.2 切换主节点
在原本的主节点上输入以下语句:
SET GLOBAL group_replication_primary_member=(SELECT MEMBER_ID FROM performance_schema.replication_group_members WHERE MEMBER_HOST='nodeX:3306');
其中,nodeX
指的是你现在希望成为主节点的服务器主机名。
然后,我们通过查看集群状态来验证主节点是否成功切换:
SELECT * FROM performance_schema.replication_group_members;
如果查看到的结果中,指定的节点成为了主节点,说明主节点切换成功了。
示例
以下是两个示例演示了如何将当前的工作节点变成主节点,并验证主节点切换的成功性:
示例一
假设现在的集群状态如下:
+---------------------------+--------------------------------------+---------+-------------+--------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_STATE | MEMBER_ROLE | MEMBER_HOST |
+---------------------------+--------------------------------------+---------+-------------+--------------+
| group_replication_applier | 2b9c9b8c-berb-11eb-969d-080027c45920 | ONLINE | PRIMARY | node2:3306 |
| group_replication_applier | 928d8d16-berb-11eb-a648-080027c45920 | ONLINE | SECONDARY | node3:3306 |
| group_replication_applier | 8e452f45-berb-11eb-bada-080027c45920 | ONLINE | SECONDARY | node1:3306 |
+---------------------------+--------------------------------------+---------+-------------+--------------+
我们要将 node3 这台服务器变成主节点。我们可以按照上文中的步骤执行以下命令:
STOP GROUP_REPLICATION;
SET GLOBAL group_replication_primary_member=(SELECT MEMBER_ID FROM performance_schema.replication_group_members WHERE MEMBER_HOST='node3:3306');
START GROUP_REPLICATION;
然后,我们再次查看集群状态:
+---------------------------+--------------------------------------+---------+-------------+--------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_STATE | MEMBER_ROLE | MEMBER_HOST |
+---------------------------+--------------------------------------+---------+-------------+--------------+
| group_replication_applier | 928d8d16-berb-11eb-a648-080027c45920 | ONLINE | PRIMARY | node3:3306 |
| group_replication_applier | 8e452f45-berb-11eb-bada-080027c45920 | ONLINE | SECONDARY | node1:3306 |
| group_replication_applier | 2b9c9b8c-berb-11eb-969d-080027c45920 | ONLINE | SECONDARY | node2:3306 |
+---------------------------+--------------------------------------+---------+-------------+--------------+
可以发现,现在的主节点已经变成了 node3。
示例二
现在的集群状态如下:
+---------------------------+--------------------------------------+---------+-------------+--------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_STATE | MEMBER_ROLE | MEMBER_HOST |
+---------------------------+--------------------------------------+---------+-------------+--------------+
| group_replication_applier | 928d8d16-berb-11eb-a648-080027c45920 | ONLINE | PRIMARY | node3:3306 |
| group_replication_applier | 8e452f45-berb-11eb-bada-080027c45920 | ONLINE | SECONDARY | node1:3306 |
| group_replication_applier | 2b9c9b8c-berb-11eb-969d-080027c45920 | ONLINE | SECONDARY | node2:3306 |
+---------------------------+--------------------------------------+---------+-------------+--------------+
我们要将 node1 这台服务器变成主节点。我们可以按照上文中的步骤执行以下命令:
STOP GROUP_REPLICATION;
SET GLOBAL group_replication_primary_member=(SELECT MEMBER_ID FROM performance_schema.replication_group_members WHERE MEMBER_HOST='node1:3306');
START GROUP_REPLICATION;
然后,我们再次查看集群状态:
+---------------------------+--------------------------------------+---------+-------------+--------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_STATE | MEMBER_ROLE | MEMBER_HOST |
+---------------------------+--------------------------------------+---------+-------------+--------------+
| group_replication_applier | 8e452f45-berb-11eb-bada-080027c45920 | ONLINE | PRIMARY | node1:3306 |
| group_replication_applier | 2b9c9b8c-berb-11eb-969d-080027c45920 | ONLINE | SECONDARY | node2:3306 |
| group_replication_applier | 928d8d16-berb-11eb-a648-080027c45920 | ONLINE | SECONDARY | node3:3306 |
+---------------------------+--------------------------------------+---------+-------------+--------------+
可以发现,现在的主节点已经变成了 node1。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:mysql 8.0.18 mgr 搭建及其切换功能 - Python技术站