Mysql8 MGR集群操作图解

声明与简介

本文的数据来自网络,部分代码也有所参照,这里做了注释和延伸,旨在技术交流,如有冒犯之处请联系博主及时处理。本文主要介绍mysql的MGR集群的操作。

MySQL Group Replication(MGR)是MySQL官方在5.7.17版本引进的一个数据库高可用与高扩展的解决方案,以插件形式提供,实现了分布式下数据的最终一致性。其特点如下:

  • 高一致性:基于分布式paxos协议实现组复制,保证数据一致性;
  • 高容错性:自动检测机制,只要不是大多数节点都宕机就可以继续工作,内置防脑裂保护机制;
  • 高扩展性:节点的增加与移除会自动更新组成员信息,新节点加入后,自动从其他节点同步增量数据,直到与其他节点数据一致;
  • 高灵活性:提供单主模式和多主模式,单主模式在主库宕机后能够自动选主,所有写入都在主节点进行,多主模式支持多节点写入

:1 当前MGR集群验证环节在VVMware虚拟机内。

       2 当前虚拟机内mysql库运行在Centos 8内,版本号是 8.0.23、端口号3306。

       3 当前验证环境是3台版本一致(一样)的mysql数据库的主机:192.168.111.128(host_128)是单主节点,host_129、host_130是从节点。

       4 在上述三组主机环境内搭建好单主模式的MGR集群,详见链接:​​Mysql 8 group replication组复制集群单主配置图解​​

MGR集群操作

单主主机切换

-- Step 1: 查看当前MGR集群状态以及单主,这里是Host_128。
-- 命令可在集群内任意节点执行
SELECT * FROM performance_schema.replication_group_members;

Mysql8 group replication组复制集群单主多主模式切换_mysql

-- Step 2: 指定Host_130为单主,这里server_uuid对应Step1里对应主机查到的MEMBER_ID。
SELECT group_replication_set_as_primary('3785ac24-b078-11eb-a14a-000c2937f3b0');

Mysql8 group replication组复制集群单主多主模式切换_分布式_02

-- Step 3:查看当前MGR集群状态以及单主,这里已经切换到Host_130
SELECT * FROM performance_schema.replication_group_members;

Mysql8 group replication组复制集群单主多主模式切换_数据库_03

-- Step 5 执行insert验证单主读写
-- Host_128里执行insert语句,tab_test有id和memo两个字段,如果没有该表,可自行创建。
insert into tab_test values(2,'Not a single Primary now');

Mysql8 group replication组复制集群单主多主模式切换_MySQL_04

-- Step 6 执行insert验证单主读写
-- Host_130里执行insert语句,tab_test有id和memo两个字段,如果没有该表,可自行创建。
insert into tab_test values(2,'Not a single Primary now');

Mysql8 group replication组复制集群单主多主模式切换_MySQL_05

单主切换多主

-- Step 1:单主节点上执行多主模式切换
SELECT group_replication_switch_to_multi_primary_mode()

Mysql8 group replication组复制集群单主多主模式切换_分布式_06

-- Step2 :查看当前MGR集群状态以及单主,这里已经切换到Host_130,此时三台主机的MEMBER_ROLE都是PRIMARY。
SELECT * FROM performance_schema.replication_group_members;

Mysql8 group replication组复制集群单主多主模式切换_数据_07

-- Step 3: 验证下Host_128是否可插入数据。此时可正常插入。同理Host_129、Host_130
insert into tab_test values(3,'I''m in primary role again');
select @@hostname,A.* from tab_test A;

Mysql8 group replication组复制集群单主多主模式切换_mysql_08

多主切换单主

类似单主切换多主,这里使用单主到多主的切换命令。这次我们选择主机host_129,它的Member_ID是7edd8b92-b077-11eb-8ffe-000c2936760d。命令可在任意节点上执行,当前执行于host_128。

-- Step1:单主切换多主
SELECT group_replication_switch_to_single_primary_mode(‘7edd8b92-b077-11eb-8ffe-000c2936760d’);

Mysql8 group replication组复制集群单主多主模式切换_分布式_09

-- Step 2:查看当前MGR集群状态以及单主,这里已经切换到Host_129
SELECT * FROM performance_schema.replication_group_members;

Mysql8 group replication组复制集群单主多主模式切换_分布式_10

从节点停止复制

-- 在单主节点host_129上停止复制,这里发现其MEMBER_STATUS为OFFLINE
-- Step 1:停止复制
STOP GROUP_REPLICATION;

Mysql8 group replication组复制集群单主多主模式切换_数据_11

-- Step 2:查看当前MGR集群状态,此时Host_128被选举为Primary,而Host_130为SECONDARY。
SELECT * FROM performance_schema.replication_group_members;

Mysql8 group replication组复制集群单主多主模式切换_MySQL_12

  问题

-- Issue1: 从节点执行单主切换多主命令报错,需要在单主节点执行。
SELECT group_replication_switch_to_multi_primary_mode()

Mysql8 group replication组复制集群单主多主模式切换_数据库_13