Contents
  1. 1. 18.8.1 Group Replication Requirements
    1. 1.1. 基础设施
    2. 1.2. 实例配置
  2. 2. 18.8.2 Group Replication Limitations

https://dev.mysql.com/doc/refman/8.0/en/group-replication-requirements-and-limitations.html

关于Group Replication System Variables这一节没有讲,主要是变量属于工具类,需要查看的时候去搜一下即可

https://dev.mysql.com/doc/refman/8.0/en/group-replication-options.html

18.8.1 Group Replication Requirements

需要使用MGR的实例必须满足如下要求

基础设施

  • InnoDB存储引擎

  • 主键

  • 网络性能

实例配置

  • 开启binlog

  • log-slave-update=on

  • binlog必须是row格式

  • GTID=on

  • 复制信息必须以table存储 —master-info-repository=TABLE and —relay-log-info-repository=TABLE

  • 事务写集 —transaction-write-set-extraction=XXHASH64

  • 多线程复制开启

1
2
3
1. slave_parallel_type=LOGICAL_CLOCK
2. slave_preserve_commit_order=1
3. slave_parallel_workers=0~1024## 可以配置使用多线程,也可以不使用多线程

18.8.2 Group Replication Limitations

下面列了一些已知的MGR的限制

注意:由于MGR是在GTID的基础上构建的,所以GTID的限制也同样是MGR的限制 Section 17.1.3.6, “Restrictions on Replication with GTIDs”.

  • 复制event的checksums —binlog-checksum=NONE
1
2
3
由于设计的问题,MGR不能使用event的checksums
--binlog-checksum=NONE 必须这样设置
  • Gap locks , 建议设置隔离级别为 READ COMMITTED
1
由于认证阶段无法使用gap lock,所以建议使用隔离级别为READ COMMITTED,READ COMMITTED 不适用gap locks
  • SERIALIZABLE , MGR不支持SERIALIZABLE隔离级别
  • 并发DDL和DML在同一个对象上的操作,会有问题
1
2
3
4
5
举例:
A实例 表t进行DDL
B实例 表t进行dml
会导致冲突无法检测到,会有很高的风险
这种情况一般在multi-primary模式下容易遇到(因为多实例写嘛的原因嘛),所以DDL要特别小心
  • 外键级联约束
  • 大事务
1
2
5秒钟的世界窗口中如果无法将事务copy到其他成员的话,那么MGR的通信会失败,重传,会有严重影响
建议切分、限制 事务大小
  • multi-primary的死锁检测
1
2
3
多主模式下,如果使用SELECT .. FOR UPDATE 会导致死锁
主要是lock无法跨越多服务器
  • 复制过滤
1
MGR中不要使用任何复制的filter
Contents
  1. 1. 18.8.1 Group Replication Requirements
    1. 1.1. 基础设施
    2. 1.2. 实例配置
  2. 2. 18.8.2 Group Replication Limitations

幸福,不在于得到的多

而在于计较的少