17.2.1.2 配置组复制实例

本节介绍要用于组复制的 MySQL 服务器实例所需的配置设置。有关背景信息,请参阅 第 17.3 节“要求和限制”

存储引擎

对于组复制,数据必须存储在 InnoDB 事务存储引擎中(有关原因的详细信息,请参阅 第 17.3.1 节,“组复制要求”)。使用其他存储引擎,包括临时 MEMORY存储引擎,可能会导致组复制错误。如下设置 disabled_storage_engines 系统变量以防止使用它们:

disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"

请注意,在MyISAM禁用存储引擎的情况下,当您将 MySQL 实例升级到仍使用mysql_upgrade的版本(MySQL 8.0.16 之前)时,mysql_upgrade可能会失败并出现错误。要处理这个问题,您可以在运行mysql_upgrade时重新启用该存储引擎,然后在重新启动服务器时再次禁用它。有关详细信息,请参阅第 4.4.7 节,“mysql_upgrade — 检查和升级 MySQL 表”

复制框架

以下设置根据 MySQL 组复制要求配置复制。

server_id=1
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
log_bin=binlog
binlog_format=ROW

这些设置将服务器配置为使用唯一标识符编号 1,以启用全局事务标识符并将复制元数据存储在系统表而不是文件中。此外,它指示服务器打开二进制日志记录,使用基于行的格式并禁用二进制日志事件校验和。有关详细信息,请参阅 第 17.3.1 节,“组复制要求”

组复制设置

此时,选项文件确保服务器已配置并被指示在给定配置下实例化复制基础结构。以下部分配置服务器的组复制设置。

plugin_load_add='group_replication.so'
transaction_write_set_extraction=XXHASH64
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
group_replication_start_on_boot=off
group_replication_local_address= "s1:33061"
group_replication_group_seeds= "s1:33061,s2:33061,s3:33061"
group_replication_bootstrap_group=off
  • plugin-load-add将 Group Replication 插件添加到服务器在启动时加载的插件列表中。这在生产部署中比手动安装插件更可取。

  • 配置 group_replication_group_name 告诉插件它正在加入或创建的组名为“aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa”。

    的值 group_replication_group_name 必须是有效的 UUID。在为二进制日志中的组复制事件设置 GTID 时,会在内部使用此 UUID。您可以使用它SELECT UUID()来生成 UUID。

  • 配置 group_replication_start_on_boot 变量以off指示插件在服务器启动时不自动启动操作。这在设置组复制时很重要,因为它确保您可以在手动启动插件之前配置服务器。配置成员后,您可以设置 group_replication_start_on_booton在服务器启动时自动启动组复制。

  • 配置 group_replication_local_address 设置成员用于与组中其他成员进行内部通信的网络地址和端口。Group Replication 使用此地址进行涉及组通信引擎远程实例(XCom,一种 Paxos 变体)的内部成员到成员连接。

    重要的

    此地址必须 hostnameport用于 SQL 的 和 不同,并且不得用于客户端应用程序。在运行组复制时,它必须仅用于组成员之间的内部通信。

    配置的网络地址 group_replication_local_address 必须可由所有组成员解析。例如,如果每个服务器实例位于具有固定网络地址的不同机器上,您可以使用机器的 IP 地址,例如 10.0.0.1。如果使用主机名,则必须使用完全限定名称,并确保它可通过 DNS 解析,并正确配置 /etc/hosts文件或其他名称解析过程。从 MySQL 8.0.14 开始,可以使用 IPv6 地址(或解析到它们的主机名)以及 IPv4 地址。一个组可以同时包含使用 IPv6 的成员和使用 IPv4 的成员。有关 IPv6 网络的组复制支持以及混合 IPv4 和 IPv6 组的更多信息,请参阅 支持 IPv6 和混合 IPv6 和 IPv4 组

    推荐的端口 group_replication_local_address 是 33061。 group_replication_local_address 它被组复制用作复制组内组成员的唯一标识符。只要主机名或 IP 地址都不同,您就可以对复制组的所有成员使用相同的端口,如本教程中所示。或者,您可以对所有成员使用相同的主机名或 IP 地址,只要端口完全不同即可,例如第 17.2.2 节“在本地部署组复制”中所示。

  • 配置 group_replication_group_seeds 设置新成员用来建立与组的连接的组成员的主机名和端口。这些成员称为种子成员。建立连接后,组成员信息将列在 中 performance_schema.replication_group_members。通常该 group_replication_group_seeds 列表包含hostname:port每个组成员的 group_replication_local_address,但这不是强制性的,并且可以选择组成员的子集作为种子。

    重要的

    hostname:port列出的 group_replication_group_seeds 是种子成员的内部网络地址,由 而不是用于客户端连接 group_replication_local_address 的 SQL配置,如 表中所示。 hostname:portperformance_schema.replication_group_members

    启动组的服务器不使用此选项,因为它是初始服务器,因此负责引导组。换句话说,引导组的服务器上的任何现有数据都将用作下一个加入成员的数据。第二个服务器加入要求组中唯一的成员加入,第二个服务器上的任何丢失数据都从引导成员上的捐赠者数据中复制,然后组扩展。第三个服务器加入可以要求这两个中的任意一个加入,数据同步到新成员,然后再次扩群。

    警告

    同时加入多个服务器时,请确保它们指向已在组中的种子成员。不要使用也加入该组的成员作为种子,因为他们在联系时可能还不在组中。

    最好先启动 bootstrap 成员,然后让它创建组。然后使其成为其他加入成员的种子成员。这确保在加入其余成员时形成一个组。

    不支持创建群组并同时加入多个成员。它可能会起作用,但很可能是操作竞争,然后加入组的行为以错误或超时告终。

  • 配置 group_replication_bootstrap_group 指示插件是否引导组。在这种情况下,即使 s1 是组中的第一个成员,我们也会在选项文件中将此变量设置为 off。相反,我们 group_replication_bootstrap_group 在实例运行时进行配置,以确保只有一个成员实际引导该组。

    重要的

    group_replication_bootstrap_group 变量在任何时候都只能在属于一个组的一个服务器实例上启用,通常是在您第一次引导该组时(或者在整个组关闭并再次备份的情况下)。如果您多次引导该组,例如当多个服务器实例设置了此选项时,那么它们可能会创建一个人为的裂脑场景,其中存在两个具有相同名称的不同组。始终 group_replication_bootstrap_group=off 在第一个服务器实例联机后设置。

组中所有服务器的配置都非常相似。您需要更改有关每个服务器的细节(例如server_id, datadir, group_replication_local_address)。这将在本教程的后面部分进行说明。