MySQL高可用解决方案(3)MGR集群部署教程

TangLu 1742 2021-10-09

一、MGR集群介绍

MGR全称MySQL Group Replication(组复制),它是MySQL从5.7.17开始推出的高可用、高扩展性的分布式集群解决方案(5.7版本下的MGR已经不再更新,推荐使用8.0版本),如果说MHA为1代高可用解决方案、Xenon为2代,那么MGR则属于第三代高可用解决方案。MGR由一组MySQL实例组成,每个实例都有一份完整的数据,可以实现数据的多点写入,并且采用类似Paxos算法的GCS协议进行同步,要求大部分节点都接收到日志,事务才能提交。这样一来就解决了传统复制面临的单节点写入和数据一致性问题。除此以外,相比使用无损同步来保证数据一致性的做法,MGR性能更好(MGR会开启一个端口用于数据同步,而不是如复制一样使用MySQL服务的端口),所以MGR非常适合数据一致性要求极高的金融级业务场景。相比PXC、MariaDB Galera Cluster,有以下区别:

· PXC需要所有节点都确认后才能提交事务;MGR是大部分节点确认即可提交事务

· PXC基于Gcache,MGR基于binlog

· PXC触发Flow Control流控后整个集群不可写入,MGR是控制写入速度

· PCX进行DDL操作夯住所有节点,MGR不会


二、MGR主要特点与最佳实践

1、基于插件形式存在于MySQL服务中,不像PXC是打包了一个数据库

2、支持最多9个节点,有高容错性,只要故障节点数没有大于50%都是可以正常工作,计算公式为最大可故障主机=(节点数-1)/2

3、可自动增加和移除节点,新节点能自动同步其它节点的数据

4、有单主和多主模式可以选择,单主模式下所有更新操作都是在主库执行,支持故障自动切换;多主模式支持多节点写入

5、MGR节点间网络延迟低,避免垮网络部署

6、MGR只支持InnoDB存储引擎

7、Binlog必须为row格式

8、主从模式需要为gtid,且需要配置log_slave_updates


三、MGR单主模式部署(至少三台服务器)

1、所有节点在主从复制的基础配置上,增加以下配置内容

server-id=103306  #每台修改为不一样的id

#每个节点都需要记录它们从组中接收和应用的所有事务
log_slave_updates=1

#关闭binlog checksum
binlog_checksum=none

#必须小写表名
lower-case-table-names=1

#开启全局事务ID
gtid_mode=on
enforce_gtid_consistency=1
binlog_gtid_simple_recovery=1

#配置MGR插件和相关参数,loose前缀表示若MGR插件未加载,仍然启动MySQL
plugin_load="group_replication=group_replication.so"  #安装MGR插件,重启MySQL服务前一定要先安装好插件,否则配置文件无法通过
transaction_write_set_extraction=XXHASH64  #事务算法
loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"  #GROUP组名,UUID格式,可以select uuid()生成,各节点保持一致
loose-group_replication_start_on_boot=off  #在启动mysql时是否启动组复制
loose-group_replication_local_address="192.168.94.11:33061"  #节点自己的IP和端口,这里的端口用于集群内部通信,不是MySQL提供服务的端口
loose-group_replication_group_seeds="192.168.94.11:33306,192.168.94.12:33306,192.168.94.13:33306"   #种子节点的IP和端口,新节点加入集群时要与种子节点通信,而启动集群的第一个节点不需要做该配置
loose-group_replication_bootstrap_group=off  #是否作为集群引导者,只为集群第一个节点配置该选项,集群启动后要关闭该选项
group_replication_single_primary_mode=off  #是否启动单主模式,如果启动则本节点是主库,提供读写,其他实例仅提供读
group_replication_enforce_update_everywhere_checks=on  #多主模式开启,进行冲突检查

#MGR性能配置
group_replication_flow_control_mode=QUOTA  #流控设置,由于判断不太准确,并且性能损耗严重,建议DISABLE     
group_replication_flow_control_applier_threshold=25000
group_replication_flow_control_certifier_threshold=25000


2、每个节点都创建组复制用户并加入复制通道

mysql > set sql_log_bin = 0;  #避免下面的语句写入到binlog,导致已有这些账号的节点出现主从异常(新集群可以忽略这步)
mysql > grant replication slave on *.* to 'repl'@'192.168.%' identified by '123456'
mysql > grant replication slave on *.* to 'repl'@'localhost' identified by '123456'
mysql > change master to master_user='repl',master_password='123456' for channel 'group_replication_recovery'  #channel是通道的固定名字


3、使用引导节点创建并启动集群

mysql > set global group_replication_bootstrap_group=on;  #初始化集群,选择一个节点执行即可
mysql > start group_replication  #启动集群
mysql > set global group_replication_bootstrap_group=off;


4、新节点加入到集群

start group_replication  #启动集群


5、检查MGR集群状态。最后在每个节点去新增数据,然后到另外节点进行验证同步情况

mysql > select * from performance_schema.replication_group_members  #检查MGR集群状态


6、查看MGR中的队列情况

mysql > select * from performance_schema.replication_group_member_stats;  
# COUNT_TRANSACTIONS_IN_QUEUE   #等待被确认的远程事务数量,如果超过流控阈值就会被限速
# COUNT_TRANSACTIONS_REMOTE_IN_APPLIER_QUEUE  #等待被应用的远程事务数量,如果超过流控阈值就会被限速


四、节点退出与恢复

如果有节点异常退出重启后会从RECOVERING转变为ONLINE,RECOVERING阶段会从集群中拉取数据进行恢复,需要一个过程

mysql > select * from performance_schema.replication_group_members #节点状态检查
mysql > start group_replication   #节点重启后需要执行该命令


五、单主模式切换为多主模式

1、停掉非主节点的组复制功能

mysql > stop GROUP_REPLICATION
mysql > set global group_replication_single_primary_mode=off;
mysql > set global group_replication_enforce_update_everywhere_checks=on;


2、停掉主节点的单主配置,此时主节点仍然可以写入数据

mysql > stop GROUP_REPLICATION
mysql > set global group_replication_single_primary_mode=off;
mysql > set global group_replication_enforce_update_everywhere_checks=on;


3、在主节点上重新开启集群

mysql > set global group_replication_bootstrap_group=on;  
mysql > start group_replication  #启动集群
mysql > set global group_replication_bootstrap_group=off;


4、其他节点重新开启集群

mysql > start GROUP_REPLICATION


5、检查组成员

mysql > select * from performance_schema.replication_group_members


版权声明
本站所有文章均为原创,转载请注明出处!小站维护不易,如果对您有所帮助,希望能点击一下站内广告,谢谢!
上一篇:MySQL高可用解决方案(2)Xenon集群部署教程
下一篇:MySQL高可用解决方案(4)数据库中间件之Atlas
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

微信二维码