一、背景
MySQL Group Replication(简称MGR)是MySQL官方于2016年12月12日推出的一款高可用与高扩展的解决方案,它提供了高可用、高扩展、高可靠的MySQL集群服务,具有以下特点:
强一致性:基于原生复制和paxos协议,保证数据传输的一致性和原子性
高容错性:只要大多数节点没有出现故障,集群就可对外提供服务
高扩展性:节点的加入和移除都是自动的,不需要人为过多干预
高灵活性:具有单主模式和多主模式,单主模式在主宕机后自动选主,多主模式多节点写入
二、服务器规划
主机名 | IP地址 | group_replication_group_name | server-id | 数据库版本 |
node1 | 192.168.12.100 | a925bee7-f358-11ef-a5f1-000c29ca7434 | 100 | MySQL 8.4.4 |
node2 | 192.168.12.101 | a925bee7-f358-11ef-a5f1-000c29ca7434 | 101 | MySQL 8.4.4 |
node3 | 192.168.12.103 | a925bee7-f358-11ef-a5f1-000c29ca7434 | 103 | MySQL 8.4.4 |
三、配置要求和限制
组复制的使用需要满足如下要求:
- InnoDB存储引擎
- 每个表必须有显式主键
- 网络性能要求低延时、高带宽
- server_id要唯一
- 开启GTID
- 事务隔离级别建议使用RC
- 不建议使用外键级联约束
- 组成员最大数目为9
四、安装部署
1、三台服务器都安装好MySQL数据库,配置好hosts解析。
[root@node1 tmp]# cat /etc/hosts
192.168.12.100 node1
192.168.12.101 node2
192.168.12.103 node3
2、配置MGR参数
[root@node1 tmp]# vi /etc/my.cnf
--添加MGR相关信息并重新启动MySQL
#禁止 MGR 不支持的引擎
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
server_id=100 #三台服务器根据实际情况进行修改
gtid_mode=ON
enforce_gtid_consistency=ON
plugin_load_add = 'group_replication.so;mysql_clone.so'
group_replication_group_name = 'a925bee7-f358-11ef-a5f1-000c29ca7434' #可以通过select uuid()获取
group_replication_start_on_boot = off
group_replication_local_address = "192.168.12.100:33061" #三台服务器根据实际情况修改为本机的IP地址
group_replication_group_seeds = "192.168.12.100:33061,192.168.12.101:33061,192.168.12.103:33061"
group_replication_bootstrap_group = off
[root@node1 tmp]# systemctl restart mysql
3、查看组复制插件是否安装成功
[root@node1 tmp]# mysql -uroot -p
(root@localhost) [(none)]>show plugins;
4、在主节点创建账号
(root@localhost) [(none)]>create user repl@'%' identified by '123456';
(root@localhost) [(none)]>grant replication slave on *.* to repl@'%';
(root@localhost) [(none)]>grant connection_admin,backup_admin,group_replication_stream on *.* to repl@'%';
(root@localhost) [(none)]>flush privileges;
5、为组复制通道指定账号密码
(root@localhost) [(none)]>CHANGE REPLICATION SOURCE TO SOURCE_USER='repl', SOURCE_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery';
6、选择node1服务器作为引导节点启动组复制服务
(root@localhost) [(none)]>SET GLOBAL group_replication_bootstrap_group=ON;
(root@localhost) [(none)]>START GROUP_REPLICATION;
(root@localhost) [(none)]>SET GLOBAL group_replication_bootstrap_group=OFF;
7、查看组复制信息
(root@localhost) [(none)]>SELECT * FROM performance_schema.replication_group_members;
8、从节点初始化,从主节点克隆数据(两个从节点都需要操作)
(root@localhost) [(none)]>set global clone_valid_donor_list='192.168.12.100:3306';
(root@localhost) [(none)]>CLONE INSTANCE FROM 'repl'@'192.168.12.100':3306 IDENTIFIED BY '123456';
(root@localhost) [(none)]>select stage,state,end_time from performance_schema.clone_progress\G
9、从节点开启MGR复制通道,启动组复制
(root@localhost) [(none)]>CHANGE REPLICATION SOURCE TO SOURCE_USER='repl', SOURCE_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery';
(root@localhost) [(none)]>START GROUP_REPLICATION;
10、查看组复制信息
(root@localhost) [(none)]>SELECT * FROM performance_schema.replication_group_members;
11、配置节点重启后自动加入组复制(三个节点都需要配置)
[root@node1 tmp]# vi /etc/my.cnf
group_replication_start_on_boot = on
12、重启任一节点,检查节点是否会自动加入组复制
五、组复制模式切换
1、单主模式切换为多主模式
(root@localhost) [(none)]>select group_replication_switch_to_multi_primary_mode();
2、多主模式切换为单主模式
(root@localhost) [(none)]>SELECT * FROM performance_schema.replication_group_members; --查看组成员信息
(root@localhost) [(none)]>SELECT group_replication_switch_to_single_primary_mode('ab5006de-0071-11f0-b3c3-000c29949136'); --指定成员号切换
注意:
以上切换方式只适用于MySQL 8.0.13之后的版本。




