深入浅出MGR,你明白了吗?

本文介绍MGR最佳实践参考以及使用MGR的约束限制。

1. 参数选项设置

下面是几个MGR相关参数选项设置建议:

#建议只用单主模式
loose-group_replication_single_primary_mode=ON

#不要启用引导模式
loose-group_replication_bootstrap_group=OFF

#默认值150MB,但建议调低在20MB以内,不要使用大事务
loose-group_replication_transaction_size_limit =10M

#大消息分片处理,每个分片10M,避免网络延迟太大
loose-group_replication_communication_max_message_size =10M

#节点退出后的默认行为,将本节点设置为RO模式
loose-group_replication_exit_state_action = READ_ONLY

#超过多长时间收不到广播消息就认定为可疑节点,如果网络环境不好,可以适当调高
loose-group_replication_member_expel_timeout =5

#建议关闭MySQL流控机制
loose-group_replication_flow_control_mode ="DISABLED"

#AFTER模式下,只要多数派达成一致就可以,不需要全部节点一致
loose-group_replication_majority_after_mode =ON

#是否设置为仲裁节点
loose-group_replication_arbitrator =0

#启用快速单主模式
loose-group_replication_single_primary_fast_mode =1

#当MGR层耗时超过100ms就记录日志,确认是否MGR层的性能瓶颈问题
loose-group_replication_request_time_threshold =100

#记录更多日志信息,便于跟踪问题
log_error_verbosity=3

2. MGR相关约束

下面是关于MGR使用的一些限制:

  • 所有表必须是InnoDB引擎。可以创建非InnoDB引擎表,但无法写入数据,在利用Clone构建新节点时也会报错(在GreatSQL中,可以设置选项enforce_storage_engine = InnoDB 只允许使用InnoDB引擎,而禁用其他引擎)。
  • 所有表都必须要有主键。同上,能创建没有主键的表,但无法写入数据,在利用Clone构建新节点时也会报错。
  • 尽量不要使用大事务,默认地,事务超过150MB会报错,最大可支持2GB的事务(在GreatSQL未来的版本中,会增加对大事务的支持,提高大事务上限,但依然不建议运行大事务)。
  • 如果是从旧版本进行升级,则不能选择 MINIMAL 模式升级,建议选择 AUTO 模式,即upgrade=AUTO。
  • 由于MGR的事务认证线程不支持gap lock,因此建议把所有节点的事务隔离级别都改成 READ COMMITTED。基于相同的原因,MGR集群中也不要使用 table lock 及 name lock(即 GET_LOCK() 函数 )。
  • 在多主(multi-primary)模式下不支持串行(SERIALIZABLE)隔离级别。
  • 不支持在不同的MGR节点上,对同一个表分别执行DML和DDL,可能会造成数据丢失或节点报错退出。
  • 在多主(multi-primary)模式下不支持多层级联外键表。另外,为了避免因为使用外键造成MGR报错,建议设置 group_replication_enforce_update_everywhere_checks=ON。
  • 在多主(multi-primary)模式下,如果多个节点都执行 SELECT … FOR UPDATE 后提交事务会造成死锁。
  • 不支持复制过滤(Replication Filters)设置。

看起来限制有点多,但绝大多数时候并不影响正常的业务使用。

此外,想要启用MGR还有几个要求:

  • 每个节点都要启用binlog。
  • 每个节点都要转存binlog,即设置log_slave_updates=1。
  • binlog format务必是row模式,即binlog_format=ROW。
  • 每个节点的server_id 及 server_uuid 不能相同。
  • 在8.0.20之前,要求binlog_checksum=NONE,但是从8.0.20后,可以设置 binlog_checksum=CRC32。
  • 要求启用 GTID,即设置gtid_mode=ON。
  • 要求master_info_repository=TABLE 及 relay_log_info_repository=TABLE,不过从MySQL 8.0.23开始,这两个选项已经默认设置TABLE,因此无需再单独设置。
  • 所有节点上的表名大小写参数lower_case_table_names 设置要求一致。
  • 最好在局域网内部署MGR,而不要跨公网,网络延迟太大的话,会导致MGR性能很差或很容易出错。
  • 建议启用writeset模式,即设置以下几个参数

slave_parallel_type = LOGICAL_CLOCK

slave_parallel_workers = N,N>0,可以设置为逻辑CPU数的2倍

binlog_transaction_dependency_tracking = WRITESET

  • slave_preserve_commit_order = 1

slave_checkpoint_period = 2

3. MGR使用建议

在使用MGR时,有以下几个建议:

  • 不同版本不要混用,尤其是不同大版本不要混用,要尽快完成升级。
  • 对同一个表的DDL和DML都只在同一个节点,否则可能会造成节点意外退出MGR。
  • 不要跑大事务,每个事务尽量控制在10MB以内。

参考资料、文档

MySQL 8.0 Reference Manual()

数据库内核开发 – 温正湖()

Group Replication原理 – 宋利兵()

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/230007.html<

(0)
管理的头像管理
上一篇2025-04-19 01:03
下一篇 2025-04-19 01:04

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注