Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Configuring an Instance for Group Replication

20.2.1.2 配置实例为组复制

本节解释了用于 MySQL Server 实例的配置设置,以便将其用于 Group Replication。关于背景信息,请见第20.3节,“要求和限制”

对于 Group Replication,数据必须存储在 InnoDB 事务存储引擎中(详见第20.3.1节,“组复制要求”)。使用其他存储引擎,包括临时MEMORY存储引擎,可能会在 Group Replication 中出现错误。将disabled_storage_engines系统变量设置为以下内容,以防止其使用:

disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
复制框架

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

server_id=1
gtid_mode=ON
enforce_gtid_consistency=ON

这些设置将服务器配置为使用唯一标识符号 1,启用第19.1.3节,“基于全局事务标识符的复制”,并允许执行仅可以使用 GTID 安全地记录的事务语句。

该设置禁用写入二进制日志中的校验和,默认情况下它们是启用的。MySQL 8.4 中的组复制支持在二进制日志中存在校验和,可以使用它们来验证某些渠道上的事件完整性,因此可以使用默认设置。更多信息,请见第20.3.2节,“组复制限制”

请参阅第20.3.1节,“组复制要求”

组复制设置

在这个点上,选项文件确保服务器已经配置,并且被指示在给定的配置下实例化复制基础结构。以下部分将为服务器配置组复制设置。

plugin_load_add='group_replication.so'
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。您可以使用SELECT UUID()生成一个。这個UUID是GTIDs的一部分,当来自客户端的事务和由组成员内部生成的视图更改事件写入到二进制日志时使用。

  • group_ replication_start_on_boot变量设置为off, instructs插件在服务器启动时不自动开始操作。这在设置Group Replication时非常重要,因为它确保您可以在手动启动插件之前配置服务器。一次成员已经配置好后,您可以将group_ replication_start_on_boot设置为on,以便Group Replication在服务器启动时自动开始。

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

    Important

    组复制的本地地址必须与用于 SQL 客户端连接的主机名和端口不同,这些值由 MySQL 服务器的hostnameport 系统变量定义。它不能用于客户端应用程序只能用于组成员之间的内部通信,而运行组复制时。

    通过group_replication_local_address 配置的网络地址必须由所有组成员解析。例如,如果每个服务器实例都在不同的机器上,并且具有固定的网络地址,您可以使用机器的 IP 地址,例如 10.0.0.1。如果您使用主机名,您必须使用完全限定名称,并确保它通过 DNS、正确配置的/etc/hosts文件或其他名称解析过程可解析。IPv6 地址(或可以解析到它们的主机名)也可以使用,混合 IPv4 和 IPv6 组也可以包含成员;关于组复制对 IPv6 网络和混合 IPv4 和 IPv6 组的支持,请见第20.5.5节,“组复制对 IPv6 网络和混合 IPv4 和 IPv6 组的支持”

    推荐的端口为group_replication_local_address,用于 Group Replication 中 replication 组成员的唯一标识符。您可以将同一个端口用于 replication 组中的所有成员,只要主机名或 IP 地址不同,如本教程所示。或者,您可以使用同一个主机名或 IP 地址,但端口不同,例如如第20.2.2节,“Locally Deploying Group Replication”所示。

    现有成员对加入的成员提供的 Group Replication 分布式恢复连接不是通过group_replication_local_address配置的网络地址。Group 成员对加入的成员提供标准 SQL 客户端连接以进行分布式恢复,如 MySQL 服务器的hostnameport所指定;它们可能(也)广播分布式恢复端点的备用列表作为专门客户端连接用于加入的成员。更多信息,请见第20.5.4.1节,“Distributed Recovery Connections”

    Important

    分布式恢复可能会失败,如果加入的成员无法正确地使用 MySQL 服务器的hostname系统变量定义的主机名来识别其他成员。建议在运行 MySQL 的操作系统中配置唯一的主机名,使用 DNS 或本地设置。服务器用于 SQL 客户端连接的主机名可以在性能_schema 表replication_group_members中的Member_host列中验证。如果多个组成员外部化操作系统设置的默认主机名,那么加入的成员可能无法将其解析到正确的成员地址,从而不能连接进行分布式恢复。在这种情况下,您可以使用 MySQL 服务器的report_host系统变量来配置每个服务器外部化唯一的主机名。

  • 配置group_replication_group_seeds将设置群组成员的主机名和端口,这些成员用于新成员建立与群组的连接。这些成员称为种子成员。一旦连接建立,群组成员信息将列在性能chema表replication_group_members中。通常group_replication_group_seeds列表包含每个群组成员的group_replication_local_addresshostname:port,但这不是必需的,可以选择群组成员的子集作为种子。

    Important

    group_replication_group_seeds中列出的hostname:port是种子成员的内部网络地址,通过group_replication_local_address配置,而不是用于SQL客户端连接的hostname:port,例如在性能chema表replication_group_members中显示。

    启动组的服务器不使用这个选项,因为它是初始服务器,负责引导组。换言之,任何现有的数据都来自引导组的服务器,这些数据将被用作下一个加入成员的数据。第二个加入的服务器请求唯一的组成员加入,缺少的数据从引导成员的捐赠数据中复制,然后组扩展。第三个加入的服务器可以请求这两个中的任何一个加入,数据同步到新成员,然后组再次扩展。随后的服务器重复这个过程,当加入。

    Warning

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

    启动引导成员并让它创建组,然后将其设置为其他成员加入的种子成员。这确保了当加入其他成员时已经存在一个组。

    创建组并同时加入多个成员不是支持的操作。虽然可能会工作,但可能性是操作竞争,导致加入组的操作结束在错误或超时中。

    成员必须使用seed成员在group_replication_group_seeds选项中广告的同一协议(IPv4或IPv6)与seed成员通信。对于Group Replication的IP地址权限,seed成员的allowlist必须包含joining member在seed member广告的协议下提供的IP地址或解析到该协议下的主机名。这地址或主机名必须设置并允许,同时也需要joining member的group_ replication_local_address如果seed member广告的协议与该地址不匹配。如果joining member没有适当协议的允许地址,连接尝试将被拒绝。更多信息,请见第20.6.4节,“Group Replication IP Address Permissions”

  • 配置group_ replication_bootstrap_group instructs the plugin whether to bootstrap the group or not。在这种情况下,即使s1是组中的第一个成员,我们在选项文件中将该变量设置为off,而不是在实例运行时配置group_ replication_bootstrap_group以确保只有一个成员实际地引导组。

    Important

    在一个组中,只能在一个服务器实例上启用group_Replication_Bootstrap_Group变量,一般是在您首次引导组时(或在整个组下线和上线后)。如果您多次引导组,例如在多个服务器实例中设置了该选项,那么它们可能创建一个人工脑分裂场景,其中两个不同的组具有相同的名称。始终在第一个服务器实例在线后将group_Replication_bootstrap_group=off设置为 off。

本教程中描述的系统变量是启动新成员所需的配置设置,但还有一些可用于配置组成员的系统变量。这些变量在第20.9节,“Group Replication Variables”中列举。

Important

有一些系统变量,部分是专门用于 Group Replication 的,部分不是,这些变量在所有组成员上都需要具有相同的值。如果组成员对这些系统变量设置了值,而加入的成员对其设置了不同的值,那么加入的成员不能加入组并返回错误信息。如果组成员对该系统变量设置了值,而加入的成员不支持该系统变量,那么它不能加入组。这些系统变量在第20.9节,“Group Replication Variables”中标识。