MySQL 8.0 参考手册  / 第十八章 组复制  / 18.3 要求和限制  /  17.3.1 组复制要求

17.3.1 组复制要求

要用于组复制的服务器实例必须满足以下要求。

基础设施

  • InnoDB 存储引擎。  数据必须存储在 InnoDB事务存储引擎中。事务以乐观的方式执行,然后在提交时检查冲突。如果有冲突,为了保持整个组的一致性,一些事务被回滚。这意味着需要一个事务存储引擎。此外, InnoDB 还提供了一些额外的功能,可以在与 Group Replication 一起运行时更好地管理和处理冲突。使用其他存储引擎,包括临时 MEMORY存储引擎,可能会导致组复制错误。InnoDB 在将实例与组复制一起使用之前,转换其他存储引擎中的任何表以供 使用。您可以通过在组成员上设置系统变量来阻止使用其他存储引擎 disabled_storage_engines ,例如:

    disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
  • 主键。  该组要复制的每个表都必须有一个已定义的主键,或主键等效项,其中等效项是非空唯一键。需要这样的键作为表中每一行的唯一标识符,使系统能够通过准确识别每个事务修改了哪些行来确定哪些事务发生冲突。

  • IPv4 网络。  MySQL Group Replication 使用的组通信引擎只支持 IPv4。因此,Group Replication 需要 IPv4 网络基础设施。

  • 网络性能。  MySQL Group Replication 旨在部署在服务器实例彼此非常接近的集群环境中。组的性能和稳定性会受到网络延迟和网络带宽的影响。所有小组成员之间必须始终保持双向沟通。如果服务器实例的入站或出站通信被阻止(例如,被防火墙或连接问题),则该成员无法在组中运行,并且组成员(包括有问题的成员)可能无法为受影响的服务器实例报告正确的成员状态。

服务器实例配置

必须在作为组成员的服务器实例上配置以下选项。

  • 唯一服务器标识符。  根据复制拓扑中所有服务器的需要,使用server_id系统变量为服务器配置唯一的服务器 ID。使用默认服务器 ID 0,复制拓扑中的服务器无法相互连接。服务器 ID 必须是介于 1 和 (2 32 )−1 之间的正整数,并且它必须不同于复制拓扑中任何其他服务器使用的每个其他服务器 ID。

  • 二进制日志活动。  设置 --log-bin[=log_file_name]。MySQL Group Replication 复制二进制日志内容,因此二进制日志需要打开才能运行。默认情况下启用此选项。请参阅 第 5.4.4 节,“二进制日志”

  • 已记录副本更新。  设置--log-slave-updates。服务器需要记录通过复制应用程序应用的二进制日志。组中的服务器需要记录它们从组中接收和应用的所有事务。这是必需的,因为恢复是依靠组中参与者的二进制日志进行的。因此,每个事务的副本都需要存在于每个服务器上,即使对于那些不是在服务器本身上启动的事务也是如此。

  • 二进制日志行格式。  设置--binlog-format=row。Group Replication 依靠基于行的复制格式在组中的服务器之间一致地传播更改。它依靠基于行的基础设施来提取必要的信息,以检测在组内不同服务器中同时执行的事务之间的冲突。请参阅 第 16.2.1 节,“复制格式”

  • 二进制日志校验和关闭。  设置 --binlog-checksum=NONE。由于复制事件校验和的设计限制,Group Replication 无法使用它们,必须禁用它们。

  • 全局事务标识符打开。  设置gtid_mode=ONenforce_gtid_consistency=ON。Group Replication 使用全局事务标识符来准确跟踪每个服务器实例上已提交的事务,从而能够推断哪些服务器执行的事务可能与其他地方已提交的事务发生冲突。换句话说,显式事务标识符是能够确定哪些事务可能发生冲突的框架的基本部分。请参阅 第 16.1.3 节,“使用全局事务标识符进行复制”

  • 复制信息存储库。  设置 master_info_repository=TABLErelay_log_info_repository=TABLE。复制应用程序需要将源和副本元数据写入 mysql.slave_master_info系统 mysql.slave_relay_log_info表。这确保了 Group Replication 插件具有一致的可恢复性和复制元数据的事务管理。请参阅 第 16.2.4.2 节,“复制元数据存储库”

  • 事务写集提取。  设置 --transaction-write-set-extraction=XXHASH64 以便在收集行以将它们记录到二进制日志时,服务器也收集写集。写入集基于每行的主键,是一个简化且紧凑的标签视图,可以唯一标识已更改的行。然后使用此标记来检测冲突。

  • 小写表名称。 --lower-case-table-names 对所有组成员 设置 相同的值。设置为 1 对于存储引擎的使用是正确的 InnoDB,这是组复制所必需的。请注意,此设置并非所有平台上的默认设置。

  • 多线程应用程序。  Group Replication 成员可以配置为多线程副本,使事务能够并行应用。非零值 slave_parallel_workers 可在成员上启用多线程应用程序,最多可指定 1024 个并行应用程序线程。如果这样做,还需要进行以下设置:

    slave_preserve_commit_order=1

    需要此设置以确保并行事务的最终提交与原始事务的顺序相同。Group Replication 依赖于围绕所有参与成员以相同顺序接收和应用已提交事务的保证而构建的一致性机制。

    slave_parallel_type=LOGICAL_CLOCK

    需要此设置 slave_preserve_commit_order=1。它指定用于决定允许哪些事务在副本上并行执行的策略。

    设置 slave_parallel_workers=0 禁用并行执行并为副本提供单个应用程序线程而没有协调器线程。使用该设置,slave_parallel_typeslave_preserve_commit_order 选项无效并被忽略。