使用组复制

组复制MySQL Group Replication(简称 MGR)是MySQL官方在已有的Binlog复制框架之上,基于Paxos协议实现的一种分布式复制形态。RDS MySQL集群系列实例支持组复制。本文介绍如何使复制方式为组复制。

背景信息

使用了组复制的MySQL集群能够基于分布式Paxos协议自我管理,具有很强的数据可靠性和数据一致性。相比传统主备复制方式,组复制具有以下优势:

  • 数据的强一致性:组复制集群能够自主管理集群,当主库故障时,能够主动进行故障节点剔除和主备切换,并且切换后主备库的数据仍然保持一致。

  • 数据的强可靠性:组复制中事务在提交时,一定保证数据已经复制到了超过半数的节点,因此在多数派可用的情况下,能够保证数据不丢失。

  • 全局事务强一致性:组复制具备集群的节点间的数据全局一致读和全局一致写能力,可根据业务需要修改group_replication_consistency参数设置读写的一致性等级。

    说明
    • 数据的全局一致读能力:您可以在备库上设置Session级别的group_replication_consistency参数为BEFORE,然后执行查询语句。此时,备库会等到主库上所有先于此查询语句的事务应用完成后,再执行这条查询语句。

    • 数据的全局一致写能力:您可以在主库上设置Session级别的group_replication_consistency参数为AFTER,然后执行写事务,这个事务会等到所有节点应用成功后,再在主库上返回提交成功的消息。

    • 多数派:指集群中超过半数以上的节点。

应用场景

要求数据强可靠和强一致的业务场景,例如金融、电商、核心交易系统等。

前提条件

实例满足以下条件:

  • 系列:RDS MySQL集群系列实例。

    说明

    高可用系列实例升级为集群系列实例的方法,请参见高可用系列升级为集群系列

  • 版本:内核小版本大于或等于MySQL 8.0 20221231。如需升级内核小版本,请参见升级内核小版本

  • 存储引擎:InnoDB。

  • 内存:大于或等于8 GB。如需升级实例规格,请参见变更配置

  • 实例节点个数大于等于3,且为单数。

  • 在有数据库代理的情况下,代理版本:大于或等于Maxscale_MySQL_2.2.12_20230302。如需升级数据库代理版本,请参见升级独享代理内核小版本

  • 产品类型:标准版

说明

您可以到RDS控制台实例的基本信息页面查看实例的系列、版本、规格等信息。

使用限制

  • 存在X-Engine引擎表的实例不能使用组复制。

    可以通过以下SQL语句检查是否存在X-Engine引擎表,查询结果为0表示不存在X-Engine引擎表。

    SELECT 
      COUNT(1) 
    FROM 
      information_schema.TABLES 
    WHERE 
      ENGINE = 'xengine' 
      AND table_schema NOT IN(
        'information_schema', 'performance_schema', 
        'mysql', 'test', 'sys', '__recycle_bin__'
      );
  • 存在无主键表的实例不能使用组复制。

    可以通过以下SQL语句检查是否存在无主键表,查询结果为0表示不存在无主键表。

    SELECT 
      COUNT(1) AS count 
    FROM 
      information_schema.TABLES t1 
      LEFT OUTER JOIN information_schema.columns t2 ON t1.table_schema = t2.TABLE_SCHEMA 
      AND t1.table_name = t2.TABLE_NAME 
      AND t2.COLUMN_KEY = 'PRI' 
    WHERE 
      t2.table_name IS NULL 
      AND t1.table_type = 'BASE TABLE' 
      AND t1.TABLE_SCHEMA NOT IN(
        'information_schema', 'performance_schema', 
        'mysql', 'sys'
      );
  • 除了上述限制外,业务层面的组复制的使用限制,请参见官网文档Requirements and Limitations

影响

将异步或半同步复制方式切换为组复制方式时,会出现实例切换,请在业务低峰期进行。请确保您的应用程序具有重连机制,重连机制需要在您的应用程序中设置。实例切换的影响请参见实例切换的影响

技术实现

组复制是基于Paxos协议实现的一种分布式复制形态。详细实现原理请参见组复制简介

注意事项

  • 组复制性能弱于异步复制,内存资源消耗多于异步和半同步复制,性能敏感型或资源敏感型业务请在测试后使用。

  • 为保证组复制集群的稳定运行,在使用组复制时,系统会将以下参数设为固定值,如下所示。

    disabled_storage_engines=MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY,XENGINE
    gtid_mode=ON
    enforce_gtid_consistency=ON
    log_slave_updates=ON
    binlog_format=ROW
    slave_preserve_commit_order=ON
    rpl_semi_sync_master_enabled=OFF
    rpl_semi_sync_slave_enabled=OFF
    master_info_repository=TABLE
    relay_log_info_repository=TABLE
    binlog_transaction_dependency_tracking=WRITESET
    transaction_write_set_extraction=XXHASH64
    slave_parallel_type=LOGICAL_CLOCK
    replication_communication_stack=MYSQL
    group_replication_single_primary_mode=ON
    group_replication_paxos_single_leader=ON
    group_replication_consistency=BEFORE_ON_PRIMARY_FAILOVER

费用

使用组复制不需要额外支付费用。

操作步骤

新创建使用组复制的实例

在创建RDS MySQL集群系列实例时,参数模板选择MySQL_InnoDB_8.0_集群系列_组复制参数模板,即可开通复制方式为组复制的实例。

已创建的实例变更为组复制

如果您已经有RDS MySQL集群系列实例,可以在实例基本信息页面的实例拓扑管理区域,单击修改数据复制方式,在弹出的对话框中选中组复制,单击确认,即可将实例复制方式变更为组复制。

说明

组复制也可以切换为异步或半同步复制。

常见问题

Q:使用组复制后,还能切换回异步或半同步复制模式吗?

A:可以。异步、半同步、组复制三种复制模式可以相互切换,您可以在实例基本信息页面的实例拓扑管理区域,单击修改数据复制方式,在弹出的对话框中修改复制方式。

Q:使用组复制后,备节点还支持可读吗?

A:支持。由于组复制的各节点之间使用Paxos协议,在备节点负载过高的情况下,会影响主节点写入性能,建议开通数据库代理服务进行读写分离,数据库代理支持配置读权重和复制延迟阈值,可有效避免备节点负载过高。

Q:组复制支持多主模式吗?

A:不支持。RDS MySQL当前只提供单主模式的组复制实例。多主模式下集群的稳定性很差,任意节点的抖动或故障,都会影响全集群的可用性。

Q:为什么使用组复制要求内存大于等于8 GB?

A:在开启组复制后,Xcom层中维护了一个约1 GB的Xcom Cache,用来储存Xcom message。组复制的事务认证模块会维护一个认证信息数组,占用一定的内存。组复制还会开启额外的后台线程,消耗部分内存。如果购买的实例规格内存偏小,在有大查询等内存使用率较高的场景下,会导致实例OOM。因此,我们推荐开启组复制的实例尽量选取内存较大的规格。

Q:使用组复制后,应该购买通用型规格还是独享型规格?

A:由于组复制会使用额外的内存,所以当购买的规格内存较小时(8 GB~16 GB),推荐选取通用型规格,可以规避部分管控内存消耗,提升实例的可用内存;

如果所购买内存较大(如32 GB),推荐选取独享型规格实例,可以获取更好的隔离性与高峰性能。

相关API

API

描述

创建一个RDS实例

调用CreateDBInstance接口创建复制方式为组复制的集群系列实例时,您需要将DBParamGroupId参数值设置为rpg-sys-01040407010400,其他参数请按需配置。

修改实例的高可用模式和数据复制方式

调用ModifyDBInstanceHAConfig接口修改实例的复制方式为组复制时,您需要将SyncMode参数设置为Mgr,其他参数请按需配置。