当加入成员在分布式恢复过程中连接到在线现有成员进行状态传递时,加入成员作为连接上的客户端,现有成员作为服务器。当通过此连接从捐赠者的二进制日志进行状态传输时(使用异步复制通道
group_replication_recovery
),加入成员充当副本,现有成员充当源。当通过此连接进行远程克隆操作时,加入成员充当接收者,现有成员充当捐赠者。适用于组复制上下文之外的那些角色的配置设置也可以适用于组复制,除非它们被特定于组复制的配置设置或行为覆盖。
现有成员为分布式恢复提供给加入成员的连接与组复制用于组在线成员之间通信的连接不同。
用于Group Replication(XCom,一种Paxos变体)的组通信引擎用于远程XCom实例之间TCP通信的连接由
group_replication_local_address
系统变量指定。此连接用于在线成员之间的 TCP/IP 消息。与本地实例的通信是通过使用共享内存的输入通道进行的。对于分布式恢复,直到 MySQL 8.0.20,组成员向加入成员提供他们的标准 SQL 客户端连接,如 MySQL 服务器
hostname
和port
系统变量所指定。report_port
如果系统变量 指定了另一个端口号,则使用该端口号 。从 MySQL 8.0.21 开始,组成员可以公布分布式恢复端点的替代列表作为加入成员的专用客户端连接,允许您控制分布式恢复流量,与成员的常规客户端用户的连接分开。您使用系统变量指定此列表
group_replication_advertise_recovery_endpoints
,成员在加入组时将其分布式恢复端点列表传输到组。默认情况下,成员继续提供标准 SQL 客户端连接,如早期版本中一样。
如果加入成员无法使用 MySQL 服务器
hostname
系统变量定义的主机名正确识别其他成员,则分布式恢复可能会失败。建议运行 MySQL 的操作系统使用 DNS 或本地设置正确配置唯一的主机名。Member_host
可以在 Performance Schema 表的列中
验证服务器用于 SQL 客户端连接的主机名
replication_group_members
. 如果多个组成员将操作系统设置的默认主机名外部化,则加入成员有可能无法将其解析为正确的成员地址,并且无法连接以进行分布式恢复。在这种情况下,您可以使用 MySQL 服务器的
report_host
系统变量来配置一个唯一的主机名,以供每个服务器外部化。
加入成员建立连接进行分布式恢复的步骤如下:
group_replication_group_seeds
当成员加入该组时,它会连接到其系统变量 列表中包含的种子成员之一 ,最初使用该group_replication_local_address
列表中指定的连接。种子成员可能是该组的一个子集。通过此连接,种子成员使用组复制的成员资格服务以视图的形式向加入成员提供组中所有在线成员的列表。成员资格信息包括分布式恢复端点或每个成员为分布式恢复提供的标准 SQL 客户端连接的详细信息。
加入成员从此列表中选择一个合适的组成员作为分布式恢复的捐赠者,遵循 第 18.5.4.4 节“分布式恢复的容错”中描述的行为。
然后,加入成员尝试使用捐赠者公布的分布式恢复端点连接到捐赠者,并按照列表中指定的顺序依次尝试每一个。如果捐赠者未提供端点,加入成员将尝试使用捐赠者的标准 SQL 客户端连接进行连接。连接的 SSL 要求由 第 18.5.4.1.4 节“分布式恢复的 SSL 和身份验证”
group_replication_recovery_ssl_*
中描述的选项 指定。如果加入成员无法连接到选定的捐助者,它将按照 第 18.5.4.4 节“分布式恢复的容错”中描述的行为与其他合适的捐助者重试。请注意,如果加入成员在没有建立连接的情况下耗尽了通告端点列表,则它不会回退到捐赠者的标准 SQL 客户端连接,而是切换到另一个捐赠者。
当加入成员与捐赠者建立分布式恢复连接时,它使用该连接进行状态传输,如 第 18.5.4 节,“分布式恢复”中所述. 使用的连接的主机和端口显示在加入成员的日志中。请注意,如果使用远程克隆操作,当加入的成员在操作结束时重新启动时,它会与新的捐赠者建立连接以从二进制日志进行状态传输。这可能是与用于远程克隆操作的原始捐赠者不同的成员的连接,或者它可能是与原始捐赠者的不同连接。在任何情况下,分布式恢复过程都将以与原始捐助者相同的方式继续进行。
系统变量作为分布式恢复端点提供的 IP 地址
group_replication_advertise_recovery_endpoints
不必为 MySQL 服务器配置(即,它们不必由
admin_address
系统变量或在系统变量列表中
指定bind_address
)。他们确实必须分配给服务器。使用的任何主机名都必须解析为本地 IP 地址。可以使用 IPv4 和 IPv6 地址。
为分布式恢复端点提供的端口必须为 MySQL 服务器配置,因此它们必须由port
、
report_port
或
admin_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
(来自 MySQL 8.0.22)或
group_replication_ip_whitelist
系统变量指定的组复制白名单。白名单仅适用于
group_replication_local_address
为每个成员指定的地址。加入成员必须初始连接到允许列表允许的组,以便检索用于分布式恢复的一个或多个地址。
您列出的分布式恢复端点在设置系统变量和
START GROUP_REPLICATION
发出语句时进行验证。如果无法正确解析列表,或者由于服务器未侦听而无法在主机上访问任何端点,则组复制会记录错误并且不会启动。
从 MySQL 8.0.18 开始,您可以选择通过从捐赠者的二进制日志传输状态的方法为分布式恢复配置压缩。在网络带宽有限且捐赠者必须将许多事务传输给加入成员的情况下,压缩有利于分布式恢复。group_replication_recovery_compression_algorithms
和
系统变量配置允许的
group_replication_recovery_zstd_compression_level
压缩算法和zstd
压缩级别,在从捐赠者的二进制日志执行状态传输时使用。有关更多信息,请参阅
第 4.2.8 节,“连接压缩控制”。
请注意,这些压缩设置不适用于远程克隆操作。当远程克隆操作用于分布式恢复时,克隆插件的
clone_enable_compression
设置适用。
分布式恢复需要具有正确权限的复制用户,以便 Group Replication 可以建立直接的成员到成员复制通道。复制用户还必须具有正确的权限才能充当供体上的克隆用户以进行远程克隆操作。相同的复制用户必须用于每个组成员的分布式恢复。有关设置此复制用户的说明,请参阅 第 18.2.1.3 节,“分布式恢复的用户凭证”。有关保护复制用户凭证的说明,请参阅 第 18.6.3.1 节,“分布式恢复的安全用户凭证”。
用于分布式恢复的 SSL 与用于普通组通信的 SSL 分开配置,这由服务器的 SSL 设置和
group_replication_ssl_mode
系统变量决定。对于分布式恢复连接,专用组复制分布式恢复 SSL 系统变量可用于配置专门用于分布式恢复的证书和密码。
默认情况下,SSL 不用于分布式恢复连接。要激活它,设置
group_replication_recovery_use_ssl=ON
和配置组复制分布式恢复 SSL 系统变量,如
第 18.6.3 节,“保护分布式恢复连接”中所述。您需要一个设置为使用 SSL 的复制用户。
当分布式恢复配置为使用 SSL 时,组复制将此设置应用于远程克隆操作,以及来自捐赠者二进制日志的状态传输。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 的复制用户帐户使用
caching_sha2_password
插件(MySQL 8.0 中的默认设置)或
sha256_password
插件进行身份验证,RSA 密钥对用于密码交换. 在这种情况下,要么使用
group_replication_recovery_public_key_path
系统变量指定 RSA 公钥文件,要么使用
group_replication_recovery_get_public_key
系统变量从源请求公钥,如
第 18.6.3.1.1 节“使用缓存 SHA-2 复制用户”中所述身份验证插件”。