Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

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

20.2.1.2 为组复制配置实例

本节解释了用于组复制的 MySQL Server 实例所需的配置设置。有关背景信息,请参阅 第 20.3 节,“要求和限制”

存储引擎

对于组复制,数据必须存储在 InnoDB 事务存储引擎中(有关详细信息,请参阅 第 20.3.1 节,“组复制要求”)。使用其他存储引擎,包括临时 MEMORY 存储引擎,可能会在组复制中引发错误。设置 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 安全记录的语句。

该设置禁用二进制日志中的事件校验和,default 是启用的。 MySQL 8.3 中的组复制支持二进制日志中的校验和,可以使用它们来验证事件的完整性,因此您可以使用默认设置。有关详细信息,请参阅 第 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_name 告诉插件它加入或创建的组名为 "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"。

    group_replication_group_name 的值必须是一个有效的 UUID。您可以使用 SELECT UUID() 生成一个。该 UUID 将形成 GTID 的一部分,该 GTID 用于客户端从客户端接收事务和组成员生成的视图更改事件时写入二进制日志。

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

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

    Important

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

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

    推荐的group_replication_local_address端口是33061。这是组复制中成员的唯一标识符。您可以使用同一个端口号所有组成员,只要主机名或IP地址都不同,如本教程所示。或者,您可以使用同一个主机名或IP地址所有成员,只要端口号都不同,例如第20.2.2节,“在本地部署组复制”所示。

    现有成员提供给加入成员的连接用于组复制的分布式恢复过程,不是group_replication_local_address配置的网络地址。组成员提供标准SQL客户端连接给加入成员用于分布式恢复,如MySQL Server的hostnameport指定的;它们可能(也)提供备用的分布式恢复端点作为专门的客户端连接供加入成员使用。有关详细信息,请参阅第20.5.4.1节,“分布式恢复连接”

    Important

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

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

    Important

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

    启动组的服务器不使用这个选项,因为它是初始服务器,负责引导组。在其他 words,任何存在于启动组的服务器上的数据都是用于下一个加入成员的数据。第二个服务器加入时,询问组中的唯一成员加入,任何缺失的数据都从捐赠者成员上复制,然后组扩展。第三个服务器加入时,可以询问这两个成员中的任何一个加入,数据同步到新成员,然后组扩展。后续服务器重复这个过程以加入。

    Warning

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

    启动引导成员,然后让它创建组。然后,让它成为其他成员加入的种子成员。这确保了组的形成时,其他成员加入。

    创建组并同时加入多个成员是不支持的。它可能会工作,但很可能操作会竞争,然后加入组的操作最终以错误或超时结束。

    加入的成员必须使用与种子成员相同的协议(IPv4 或 IPv6)来与种子成员通信,该协议在 group_replication_group_seeds 选项中宣传。为了 Group Replication 的 IP 地址权限,种子成员的 allowlist 必须包括加入成员的 IP 地址或主机名,该地址或主机名必须在加入成员的 group_replication_local_address 中设置,如果种子成员宣传的协议与加入成员的协议不匹配。更多信息,请参阅 第 20.6.4 节,“Group Replication IP Address Permissions”

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

    Important

    变量group_replication_bootstrap_group只能在组中的一个服务器实例上启用,通常是在第一次引导组时(或在整个组被关闭并重新启动时)。如果您多次引导组,例如多个服务器实例都设置了这个选项,那么它们可能会创建人工的脑裂场景,其中两个不同的组具有相同的名称。总是将group_replication_bootstrap_group=off设置在第一个服务器实例上线后。

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

Important

有一些系统变量,某些特定于组复制,其他的则不是,都是组范围的配置设置,必须在所有组成员上具有相同的值。如果组成员为某个系统变量设置了值,而加入的成员为该变量设置了不同的值,加入的成员将无法加入组,并返回错误消息。如果组成员为该系统变量设置了值,而加入的成员不支持该系统变量,它将无法加入组。这些系统变量都在第 20.9 节,“组复制变量”中标识。