20.5.4.1 分布式恢复的连接
在分布式恢复期间,加入成员连接到在线现有成员时,加入成员作为客户端,而现有成员作为服务器。当使用异步复制通道group_replication_recovery
从捐赠者的二进制日志中进行状态转移时,加入成员作为副本,而现有成员作为源。当远程克隆操作在该连接上进行时,加入成员作为接收方,而现有成员作为捐赠者。除非被 Group Replication-特定的配置设置或行为覆盖外,在 Group Replication 上下文中适用的配置设置也可以应用于 Group Replication。
现有成员为加入成员提供的分布式恢复连接不是 Group Replication 在在线组成员之间用于通信的同一连接。
-
Group Replication 组通信引擎(XCom,Paxos变体)用于 TCP 通信之间的远程 XCom 实例的连接由
group_replication_local_address
系统变量指定。这一连接用于在线成员之间的 TCP/IP 消息。与本地实例的通信是通过共享内存输入通道进行的。 -
为了分布式恢复,群组成员默认情况下将其标准SQL客户端连接提供给加入的成员,如MySQL Server的
hostname
和port
系统变量所指定。如果使用report_port
系统变量指定了备用端口号,那么将使用该端口号。 -
群组成员也可以通过专门的客户端连接来广告分布式恢复终点,以便控制分布式恢复流量与普通客户端用户的连接分开。你可以使用
group_replication_advertise_recovery_endpoints
系统变量来指定这个列表,然后成员在加入群组时将其分布式恢复终点列表传输给群组。默认情况下,成员继续提供标准SQL客户端连接,如早期版本中一样。
分布式恢复可能会失败,如果加入的成员无法正确地使用 MySQL 服务器的hostname
系统变量定义的主机名来识别其他成员。建议操作系统运行 MySQL 时,配置唯一的主机名,使用 DNS 或本地设置。服务器用于 SQL 客户端连接的主机名可以在性能_schema 表replication_group_members
中的Member_host
列中验证。如果多个组成员外部化操作系统设置的默认主机名,那么加入的成员可能无法将其解析到正确的成员地址,从而不能连接进行分布式恢复。在这种情况下,您可以使用 MySQL 服务器的report_host
系统变量来配置每个服务器外部化唯一的主机名。
加入成员为分布式恢复建立连接的步骤如下:
-
当成员加入组时,它将与包含在其
group_replication_group_seeds
系统变量中的种子成员连接,最初使用指定在该列表中的group_ replication_local_address
连接。种子成员可能是组的子集。 -
在该连接上,种子成员使用 Group Replication 的成员服务,为加入的成员提供一个包含所有在线组成员的视图。成员信息包括每个成员为分布式恢复提供的分布式恢复端点或标准 SQL 客户端连接的详细信息。
-
加入的成员从这个列表中选择合适的组成员作为其捐赠者,遵循第20.5.4.4节,“分布式恢复故障容错”中描述的行为。
-
然后,加入的成员尝试使用捐赠者的广告分布式恢复端点连接到捐赠者,每个端点按顺序尝试。如果捐赠者没有提供端点,加入的成员尝试使用捐赠者的标准 SQL 客户端连接。连接的 SSL 要求由
group_replication_recovery_ssl_*
选项在第20.5.4.1.4节,“分布式恢复 SSL 和身份验证”中描述。 -
如果加入成员无法连接到选择的捐赠者,它将重试与其他适合的捐赠者,遵循第20.5.4.4节,“分布式恢复中的故障容错”中描述的行为。请注意,如果加入成员耗尽了广告端点列表而无法建立连接,它将不会 fallback 到捐赠者的标准SQL客户端连接,而是切换到另一个捐赠者。
-
当加入成员与捐赠者建立分布式恢复连接时,它将使用该连接进行状态转移,如第20.5.4节,“分布式恢复”中描述的那样。用于连接的主机和端口将在加入成员的日志中显示。请注意,如果远程克隆操作被使用,当加入成员在操作结束时重启,它将使用新的捐赠者建立状态转移连接从二进制日志。这可能是对原始捐赠者的不同成员或对原始捐赠者的不同连接。在任何情况下,分布式恢复过程将继续与原始捐赠者相同的方式。
由group_replication_advertise_recovery_endpoints
系统变量提供的IP地址不需要在MySQL Server中进行配置(即,不需要通过admin_address
系统变量或bind_address
系统变量中的列表指定)。它们需要被分配给服务器。任何使用的主机名都必须解析到本地IP地址。IPv4和IPv6地址都可以使用。
供给分布式恢复端点的端口需要在MySQL Server中进行配置,因此它们必须由port
、report_port
或admin_port
系统变量指定。服务器必须监听这些端口上的TCP/IP连接。如果您指定了admin_port
,分布式恢复的replication用户需要SERVICE_CONNECTION_ADMIN
特权以连接。选择admin_port
将分布式恢复连接与普通MySQL客户端连接隔离。
成员之间的连接尝试每个端点一次,按照列表中指定的顺序。如果将group_replication_advertise_recovery_endpoints
设置为DEFAULT
,而不是端点列表,标准SQL客户端连接将被提供。请注意,标准SQL客户端连接不自动包含在分布式恢复端点列表中,也不会在捐助者的端点列表耗尽时作为 fallback 提供。如果您想将标准SQL客户端连接作为多个分布式恢复端点之一,请务必在group_replication_advertise_recovery_endpoints
指定的列表中包含它,可以将其放在最后,以便作为连接的最后选择。
组成员的分布式恢复端点(或在没有提供端点时的标准SQL客户端连接)不需要添加到由group_replication_ip_allowlist
系统变量指定的Group Replication allowlist中。allowlist仅用于每个成员的本地地址,指定于group_replication_local_address
。加入成员必须在允许列表中获取连接,以便检索分布式恢复的地址或地址。
当系统变量设置时和执行START GROUP_REPLICATION
语句时,分布式恢复端点将被验证。如果列表无法正确解析或任何端点在主机上无法访问,因为服务器不监听它们,Group Replication 将记录错误并不能启动。
20.5.4.1.2 分布式恢复压缩
您可以选择配置分布式恢复的压缩方法,通过从捐赠者的二进制日志中进行状态转移。压缩在网络带宽有限且捐赠者需要将许多事务传输到加入成员时对分布式恢复非常有益。系统变量group_replication_recovery_compression_algorithms
和group_ replication_recovery_zstd_compression_level
配置允许的压缩算法和捐赠者的二进制日志中执行状态转移时使用的ZSTD压缩级别。更多信息,请见第6.2.8节,“连接压缩控制”。
注意,这些压缩设置不适用于远程克隆操作。在分布式恢复中使用远程克隆操作时,clone插件的clone_enable_compression
设置将生效。
20.5.4.1.3 分布式恢复用户
分布式恢复需要一个具有正确权限的复制用户,以便Group Replication可以建立直接成员之间的复制通道。该复制用户还必须在捐赠服务器上作为克隆用户进行远程克隆操作。同样,需要在每个组成员上使用相同的复制用户。要设置这个复制用户,请见第20.2.1.3节,“分布式恢复用户凭证”。要安全地存储复制用户凭证,请见第20.6.3.1节,“分布式恢复用户凭证安全”。
20.5.4.1.4 SSL和身份验证for 分布式恢复
分布式恢复中使用SSL的配置与正常组通信中的SSL设置和group_replication_ssl_mode
系统变量不同。对于分布式恢复连接,专门用于分布式恢复的Group Replication分布式恢复SSL系统变量可用,以便配置证书和加密算法用于分布式恢复。
默认情况下,SSL不用于分布式恢复连接。要激活它,请设置group_replication_recovery_use_ssl=ON
,并按照第20.6.3节,“Securing Distributed Recovery Connections”中描述的方式配置Group Replication分布式恢复SSL系统变量。您需要一个使用SSL的复制用户。
在配置分布式恢复使用SSL时,Group Replication 将应用该设置于远程克隆操作和来自捐赠者的二进制日志的状态转移。 Group Replication 自动将克隆SSL选项(clone_ssl_ca
、clone_ssl_cert
和clone_ssl_key
)设置与对应的Group Replication 分布式恢复选项(group_replication_recovery_ssl_ca
、group_replication_recovery_ssl_cert
和group_replication_recovery_ssl_key
)相匹配。
如果您不使用 SSL 进行分布式恢复(即group_replication_recovery_use_ssl
设置为OFF
),并且 Group Replication 的 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 身份验证插件的复制用户”中所述。