Mysql8 group replication组复制集群单主多主模式切换
原创
©著作权归作者所有:来自51CTO博客作者Shen Liang的原创作品,请联系作者获取转载授权,否则将追究法律责任
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;
-- Step 2: 指定Host_130为单主,这里server_uuid对应Step1里对应主机查到的MEMBER_ID。
SELECT group_replication_set_as_primary('3785ac24-b078-11eb-a14a-000c2937f3b0');
-- Step 3:查看当前MGR集群状态以及单主,这里已经切换到Host_130
SELECT * FROM performance_schema.replication_group_members;
-- Step 5 执行insert验证单主读写
-- Host_128里执行insert语句,tab_test有id和memo两个字段,如果没有该表,可自行创建。
insert into tab_test values(2,'Not a single Primary now');
-- Step 6 执行insert验证单主读写
-- Host_130里执行insert语句,tab_test有id和memo两个字段,如果没有该表,可自行创建。
insert into tab_test values(2,'Not a single Primary now');
单主切换多主
-- Step 1:单主节点上执行多主模式切换
SELECT group_replication_switch_to_multi_primary_mode()
-- Step2 :查看当前MGR集群状态以及单主,这里已经切换到Host_130,此时三台主机的MEMBER_ROLE都是PRIMARY。
SELECT * FROM performance_schema.replication_group_members;
-- 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;
多主切换单主
类似单主切换多主,这里使用单主到多主的切换命令。这次我们选择主机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’);
-- Step 2:查看当前MGR集群状态以及单主,这里已经切换到Host_129
SELECT * FROM performance_schema.replication_group_members;
从节点停止复制
-- 在单主节点host_129上停止复制,这里发现其MEMBER_STATUS为OFFLINE
-- Step 1:停止复制
STOP GROUP_REPLICATION;
-- Step 2:查看当前MGR集群状态,此时Host_128被选举为Primary,而Host_130为SECONDARY。
SELECT * FROM performance_schema.replication_group_members;
问题
-- Issue1: 从节点执行单主切换多主命令报错,需要在单主节点执行。
SELECT group_replication_switch_to_multi_primary_mode()