文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  用于分布式恢复的连接

20.5.4.1 用于分布式恢复的连接

当加入成员在分布式恢复期间连接到在线的现有成员以进行状态传输时,加入成员在连接中充当客户端,而现有成员充当服务器。当通过此连接(使用异步复制通道 group_replication_recovery)正在进行来自捐赠者二进制日志的状态传输时,加入成员充当副本,而现有成员充当源。当通过此连接正在进行远程克隆操作时,加入成员充当接收者,而现有成员充当捐赠者。在组复制上下文之外适用于这些角色的配置设置也可能适用于组复制,除非它们被组复制特定的配置设置或行为覆盖。

现有成员提供给加入成员以进行分布式恢复的连接与组复制用于组内在线成员之间通信的连接不同。

  • 组通信引擎用于组复制(XCom,Paxos 的变体)在远程 XCom 实例之间进行 TCP 通信的连接由 group_replication_local_address 系统变量指定。此连接用于在线成员之间的 TCP/IP 消息。与本地实例的通信通过使用共享内存的输入通道进行。

  • 对于分布式恢复,默认情况下,组成员会提供其标准 SQL 客户端连接给加入成员,如 MySQL 服务器的 hostnameport 系统变量指定。如果 report_port 系统变量指定了替代端口号,则使用该端口号。

  • 组成员可以改为发布替代的分布式恢复端点列表作为加入成员的专用客户端连接,允许您分别控制分布式恢复流量和常规客户端用户对成员的连接。可以使用 group_replication_advertise_recovery_endpoints 系统变量指定此列表,并且成员在加入组时会将其分布式恢复端点列表传输到组。默认情况下,成员会继续提供标准 SQL 客户端连接,如早期版本中所述。

重要

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

加入成员建立用于分布式恢复的连接的步骤如下

  1. 当成员加入组时,它会使用其 group_replication_group_seeds 系统变量中列出的种子成员之一进行连接,最初使用该列表中指定的 group_replication_local_address 连接。种子成员可能是组的子集。

  2. 通过此连接,种子成员使用组复制的成员资格服务以视图的形式向加入成员提供组中所有在线成员的列表。成员资格信息包括每个成员为分布式恢复提供的分布式恢复端点或标准 SQL 客户端连接的详细信息。

  3. 加入成员根据 第 20.5.4.4 节,“分布式恢复的容错” 中描述的行为,从该列表中选择合适的组成员作为其用于分布式恢复的捐赠者。

  4. 然后,加入成员尝试使用捐赠者发布的分布式恢复端点连接到捐赠者,按列表中指定的顺序依次尝试每个端点。如果捐赠者没有提供任何端点,则加入成员尝试使用捐赠者的标准 SQL 客户端连接进行连接。连接的 SSL 要求如 第 20.5.4.1.4 节,“SSL 和分布式恢复的认证” 中描述的 group_replication_recovery_ssl_* 选项指定。

  5. 如果加入成员无法连接到所选的捐赠者,它会根据 第 20.5.4.4 节,“分布式恢复的容错” 中描述的行为,重试其他合适的捐赠者。请注意,如果加入成员尝试了所有发布的端点仍未建立连接,它不会回退到捐赠者的标准 SQL 客户端连接,而是切换到另一个捐赠者。

  6. 当加入成员与捐赠者建立分布式恢复连接时,它使用该连接进行状态传输,如第 20.5.4 节,“分布式恢复”中所述。加入成员日志中显示了用于连接的主机和端口。请注意,如果使用远程克隆操作,当加入成员在操作结束时重新启动时,它将与新的捐赠者建立连接以从二进制日志传输状态。这可能是与用于远程克隆操作的原始捐赠者不同的成员的连接,也可能是与原始捐赠者的不同连接。无论哪种情况,分布式恢复过程都将以与原始捐赠者相同的方式继续。

20.5.4.1.1 选择分布式恢复端点地址

group_replication_advertise_recovery_endpoints 系统变量提供的作为分布式恢复端点的 IP 地址不必为 MySQL 服务器配置(也就是说,它们不必由admin_address 系统变量或bind_address 系统变量的列表指定)。它们必须分配给服务器。使用的任何主机名都必须解析为本地 IP 地址。可以使用 IPv4 和 IPv6 地址。

为分布式恢复端点提供的端口必须为 MySQL 服务器配置,因此必须由portreport_portadmin_port 系统变量指定。服务器必须侦听这些端口上的 TCP/IP 连接。如果您指定admin_port,用于分布式恢复的复制用户需要SERVICE_CONNECTION_ADMIN 权限才能连接。选择admin_port 可以将分布式恢复连接与常规 MySQL 客户端连接分开。

加入成员按它们在列表中指定的顺序依次尝试每个端点。如果group_replication_advertise_recovery_endpoints 设置为DEFAULT 而不是端点列表,则会提供标准 SQL 客户端连接。请注意,标准 SQL 客户端连接不会自动包含在分布式恢复端点列表中,并且如果捐赠者的端点列表在没有连接的情况下用尽,也不会作为后备提供。如果您希望提供标准 SQL 客户端连接作为多个分布式恢复端点之一,则必须在group_replication_advertise_recovery_endpoints 指定的列表中显式包含它。您可以将其放在最后,以便它充当连接的最后手段。

群组成员的分布式恢复端点(或如果没有提供端点,则为标准 SQL 客户端连接)不需要添加到group_replication_ip_allowlist 系统变量指定的 Group Replication 允许列表中。允许列表仅用于每个成员由group_replication_local_address 指定的地址。加入成员必须在其与群组的初始连接通过允许列表才能检索用于分布式恢复的地址或地址。

您列出的分布式恢复端点将在设置系统变量时以及发出START GROUP_REPLICATION 语句时进行验证。如果列表无法正确解析,或者由于服务器未在主机上侦听而无法访问任何端点,Group Replication 将记录错误并且不会启动。

20.5.4.1.2 分布式恢复的压缩

您可以通过从捐赠者的二进制日志中进行状态传输的方法,选择性地为分布式恢复配置压缩。在网络带宽有限且捐赠者必须将许多事务传输到加入成员的情况下,压缩可以使分布式恢复受益。 group_replication_recovery_compression_algorithmsgroup_replication_recovery_zstd_compression_level 系统变量配置允许的压缩算法以及在从捐赠者的二进制日志进行状态传输时使用的zstd 压缩级别。有关更多信息,请参见第 6.2.8 节,“连接压缩控制”

请注意,这些压缩设置不适用于远程克隆操作。当使用远程克隆操作进行分布式恢复时,克隆插件的clone_enable_compression 设置适用。

20.5.4.1.3 用于分布式恢复的复制用户

分布式恢复需要具有正确权限的复制用户,以便 Group Replication 可以建立直接的成员到成员的复制通道。复制用户还必须具有作为捐赠者上的克隆用户的正确权限才能进行远程克隆操作。每个群组成员都必须使用相同的复制用户进行分布式恢复。有关设置此复制用户的说明,请参见第 20.2.1.3 节,“用于分布式恢复的用户凭据”。有关保护复制用户凭据的说明,请参见第 20.6.3.1 节,“分布式恢复的安全用户凭据”

20.5.4.1.4 分布式恢复的 SSL 和身份验证

分布式恢复的 SSL 与正常群组通信的 SSL 分开配置,正常群组通信由服务器的 SSL 设置和group_replication_ssl_mode 系统变量确定。对于分布式恢复连接,专门的 Group Replication 分布式恢复 SSL 系统变量可用于配置专门针对分布式恢复的证书和密码的使用。

默认情况下,分布式恢复连接不使用 SSL。要激活它,请设置group_replication_recovery_use_ssl=ON,并配置 Group Replication 分布式恢复 SSL 系统变量,如第 20.6.3 节,“保护分布式恢复连接”中所述。您需要一个设置为使用 SSL 的复制用户。

当分布式恢复配置为使用 SSL 时,Group Replication 会将此设置应用于远程克隆操作以及从捐赠者的二进制日志进行状态传输。Group Replication 会自动配置克隆 SSL 选项(clone_ssl_caclone_ssl_certclone_ssl_key)以匹配您对相应 Group Replication 分布式恢复选项(group_replication_recovery_ssl_cagroup_replication_recovery_ssl_certgroup_replication_recovery_ssl_key)的设置。

如果您不使用分布式恢复的 SSL(因此group_replication_recovery_use_ssl 设置为OFF),并且用于 Group Replication 的复制用户帐户使用caching_sha2_password 插件(默认)或sha256_password 插件进行身份验证,则使用 RSA 密钥对进行密码交换。在这种情况下,请使用group_replication_recovery_public_key_path 系统变量指定 RSA 公钥文件,或者使用group_replication_recovery_get_public_key 系统变量从源请求公钥,如第 20.6.3.1.1 节,“使用缓存 SHA-2 身份验证插件的复制用户”中所述。