环境要求:
基础设施:
1、只支持Innodb 存储引擎
- 由于存在冲突检测,冲突需要回滚事务
- 可以设置参数,来禁止其他的存储引擎
- disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
2、主键
- 每个表都需要有主键或者是等效的非NULL唯一键
3、IPV4网络
- 从MySQL 8.0.14开始支持IPV6,由于现在线上使用的最高版本MySQL是5.7.24,所以需要注意这一点
4、网络性能要求高
- 网络延迟和网络贷款都会影响组的性能和稳定性,成员之间需要保证双向通信
实例配置要求:
- log_bin = on
- log_slave_updates = on
- binlog_format = row
- binlog_checksum = none
- GTID_MODE = ON
- master_info_repository = table
- relay_log_info_repository = table
- transaction-write-set-extraction=XXHASH64
- 并行复制
- --slave-parallel-workers=N (N并行应用程序线程的数量)
- --slave-preserve-commit-order=1 确保并行事务的最终提交与原始事务的顺序相同
- --slave-parallel-type=LOGICAL_CLOCK
组复制限制:
1、范围锁
- 如果非必须使用rr的场景,可以设置隔离级别为rc
2、binlog_checksum = none
3、多主不支持serializable隔离级别
4、多主不支持并发的DML和DDL(后发起的事务会失败)
5、多主不支持级联外键约束 可能导致冲突监测到冲突的事务,多主数据更新的严格一致性检查
开启group_replication_enforce_update_everywhere_checks=ON
6、多主使用 select ... for updates 可能会导致死锁
7、不支持过滤复制
8、最大组成员配置为 9个
8、大事务限制
- 超过5s没有通过复制,可能导致节点丢失
- 缓解措施如下:
- 切割事务 例如 load data
- 指定组接受的最大事务的大小,如果事务超过会进行回滚。group_replication_transaction_size_limit 5.7 默认为0 8.0默认为143M
- group_replication_compression_threshold 指定apply 压缩的消息大小。此系统变量默认为1000000字节(1 MB),因此会自动压缩大型消息。压缩由Group Replication的组通信系统(GCS)在收到group_replication_transaction_size_limit 设置允许 但超出 group_replication_compression_threshold 设置的消息时执行。如果将系统变量值设置为零,则会禁用压缩
- 8.0.16后 大事务将进行自动分段 group_replication_communication_max_message_size 默认10M 若压缩后还会超过这个值,就会对压缩后的message 进行分段
- 8.0.13 开始 配置 group_replication_member_expel_timeout 防止被怀疑是失败的成员,被提出集群前延长等待的时间
- 若未设置上述参数,最大包限制将为从库节点的 slave_max_allowed_packet