1. 介绍
MGR(MySQL Group Replication)是MySQL官方在MySQL 5.7.17版本中以插件形式推出的主从复制高可用技术,它基于原生的主从复制,将各节点归入到一个组中,通过组内节点的通信协商(组通信协议基于Paxos算法),实现数据的强一致性、故障探测、冲突检测、节点加组、节点离组等等功能。
1.1 工作模式
组复制以单主模式或多主模式运行。通过group_replication_single_primary_mode=[ON|OFF] 变量指定工作模式。 组内所有成员都必须运行相同得工作模式。 ON表示单主模式,这是默认模式,OFF表示多主模式。
单主模式:从复制组中众多个MySQL节点中自动选举一个master节点,只有master节点可以写,其他节点自动设置为read only。当master节点故障时,会自动选举一个新的master节点,选举成功后,它将设置为可写,其他slave将指向这个新的master。
多主模式:复制组中的任何一个节点都可以写,因此没有master和slave的概念,只要突然故障的节点数量不太多,这个多主模型就能继续可用。
1.2 单主模式主要选主算法
1)第一个考虑因素通过成员运行的MySQL Server软件版本(补丁版本)进行排序
2)第二个因素依据每个成员的权重group_replication_member_weigth参数控制,【5.7.20引入变量】默认为50
3)第三个因素UUID的词典顺序(变量server_uuid控制),UUID最低的成员被选为新主
1.3 容错
MySQL组复制使用Paxos分布式算法来提供节点间的分布式协调。正因如此,它要求组中大多数节点在线才能达到法定票数,从而对一个决策做出一致的决定。
大多数指的是N/2+1(N是组中目前节点总数),例如目前组中有5个节点,则需要3个节点才能达到大多数的要求。所以,允许出现故障的节点数量如下图:
2. 实验环境搭建
2.1 单主模式
1)配置复制账号
# 全新环境
-- set password=password('root');
create user 'sync'@'192.168.10.%' identified by 'sync';
grant replication slave on *.* to 'sync'@'192.168.10.%';
flush privileges;
# 线上环境新增账号
SET SQL_LOG_BIN=0;
CREATE USER