1.MGR特点

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

  • 高一致性:基于分布式paxos协议实现组复制,保证数据一致性;

  • 高容错性:自动检测机制,只要不是大多数节点都宕机就可以继续工作,内置防脑裂保护机制;

  • 高扩展性:节点的增加与移除会自动更新组成员信息,新节点加入后,自动从其他节点同步增量数据,直到与其他节点数据一致;

  • 高灵活性:提供单主模式和多主模式,单主模式在主库宕机后能够自动选主,所有写入都在主节点进行,多主模式支持多节点写入。

2.组复制故障检测

故障检测是提供关于哪些 server 可能已死的信息(猜测)的分布式服务。某个 server 无响应时触发猜测,组中其余成员进行协调决定以排除给定成员。如果某个 server 与组的其余成员隔离,则它会怀疑所有其他 server 都失败了。由于无法与组达成协议(因为它无法确保仲裁成员数),其怀疑不会产生后果。当服务器以此方式与组隔离时,它无法执行任何本地事务。在线 server 列表通常称为视图,新成员server的加入离开,无论是自愿还是被迫的离开,该组都会动态地重新规划其配置,并触发视图更新。

3.组复制的限制

  • 存储引擎必须为Innodb,即仅支持InnoDB表,并且每张表一定要有一个主键,用于做write set的冲突检测;

  • 每个表必须提供主键;

  • 只支持ipv4,网络需求较高;

  • 必须打开GTID特性,二进制日志格式必须设置为ROW,用于选主与write set;

  • COMMIT可能会导致失败,类似于快照事务隔离级别的失败场景;

  • 目前一个MGR集群组最多支持9个节点;

  • 不支持外键于save point特性,无法做全局间的约束检测与部分部分回滚;

  • 二进制日志binlog不支持Replication event checksums;

  • 多主模式(也就是多写模式) 不支持SERIALIZABLE事务隔离级别;

  • 多主模式不能完全支持级联外键约束;

  • 多主模式不支持在不同节点上对同一个数据库对象并发执行DDL(在不同节点上对同一行并发进行RW事务,后发起的事务会失败);

linux版本:CentOS Linux release 7.8.2003 (Core)

mysql版本:Ver 8.0.18 for el7 on x86_64 (MySQL Community Server - GPL)

前提:

1、服务器规划,都关闭防火墙,中控机能ssh到各个安装节点

192.168.17.170 linuxsinglemysql 中控机

192.168.17.132 mgr01     mysql主节点

192.168.17.133 mgr02     mysql从节点1

192.168.17.135 mgr03     mysql从节点1

2、中控机 /shell/installmgr下文件

hostnameimport.txt  

hostnameip.txt 

installmgr.sh 

mgrmastercreate.sh  

mgrslavecreate.sh  

my.cnf  

mysqld  

mysqlinstall.sh  

mysql.local

/soft下如下文件 mysql-8.0.18-el7-x86_64.tar.gz

脚本执行:

中控机/shell/installmgr执行  sh installmgr.sh

等待3-5分钟,搭建完毕!


脚本如下

1、vim installmgr.sh

百度大牛--shell脚本搭建mgr_java

百度大牛--shell脚本搭建mgr_java_02

2、vim mysqlinstall.sh

百度大牛--shell脚本搭建mgr_java_03

百度大牛--shell脚本搭建mgr_java_04

百度大牛--shell脚本搭建mgr_java_05

3、vim mgrmastercreate.sh

百度大牛--shell脚本搭建mgr_java_06

4、vim mgrslavecreate.sh

百度大牛--shell脚本搭建mgr_java_07

5、vim hostnameimport.txt

192.168.17.132 mgr01

192.168.17.133 mgr02

192.168.17.135 mgr03

192.168.17.170 linuxsinglemysql

6、vim hostnameip.txt

192.168.17.132 mgr01 1

192.168.17.133 mgr02 0

192.168.17.135 mgr03 0