当一个加入成员在分布式恢复期间连接到一个在线的现有成员进行状态传输时,加入成员充当连接上的客户端,而现有成员充当服务器。当通过此连接(使用异步复制通道)正在进行来自提供者二进制日志的状态传输时group_replication_recovery
),加入的成员作为副本,现有的成员作为源。当通过此连接进行远程克隆操作时,加入的成员作为接收者,现有的成员作为捐赠者。应用于组复制上下文之外的角色的配置设置也可以应用于组复制,除非它们被特定于组复制的配置设置或行为覆盖。
现有成员向加入成员提供的用于分布式恢复的连接与Group Replication用于组在线成员之间通信的连接不同。
组通信引擎用于组复制(XCom, Paxos变体)在远程XCom实例之间进行TCP通信的连接由
group_replication_local_address
系统变量。此连接用于在线成员之间的TCP/IP消息。通过使用共享内存的输入通道与本地实例通信。对于分布式恢复,直到MySQL 8.0.20,组成员为加入成员提供标准的SQL客户端连接,这是由MySQL服务器指定的
主机名
而且港口
系统变量。参数指定了替代端口号report_port
系统变量,用它来代替。从MySQL 8.0.21开始,组成员可以发布一个备选的分布式恢复端点列表,作为加入成员的专用客户端连接,允许您从成员的常规客户端用户的连接中单独控制分布式恢复流量。方法指定此列表
group_replication_advertise_recovery_endpoints
系统变量,成员在加入组时将其分布式恢复端点列表传输到组。默认情况下,该成员继续像以前的版本一样提供标准的SQL客户端连接。
如果一个加入成员不能使用MySQL Server定义的主机名正确识别其他成员,那么分布式恢复可能会失败主机名
系统变量。建议运行MySQL的操作系统有一个正确配置的唯一主机名,可以使用DNS或本地设置。中验证服务器用于SQL客户机连接的主机名Member_host
“性能架构”表的列replication_group_members
.如果多个组成员将操作系统设置的默认主机名外部化,那么加入的成员可能无法将其解析为正确的成员地址,从而无法进行分布式恢复连接。在这种情况下,你可以使用MySQL服务器的report_host
系统变量,以配置由每个服务器外部化的惟一主机名。
加入成员建立分布式恢复连接的步骤如下:
当成员加入组时,它将与包含在其列表中的一个种子成员连接
group_replication_group_seeds
系统变量,最初使用group_replication_local_address
在该列表中指定的连接。种子成员可能是组的子集。通过这个连接,种子成员使用Group Replication的成员服务以视图的形式向加入成员提供组中所有在线成员的列表。成员关系信息包括分布式恢复端点或每个成员为分布式恢复提供的标准SQL客户端连接的详细信息。
加入成员从此列表中选择一个合适的组成员作为分布式恢复的捐赠者,遵循中描述的行为第18.5.3.4节“分布式恢复的容错”.
然后,加入成员尝试使用捐赠者发布的分布式恢复端点连接到捐赠者,按列表中指定的顺序依次尝试每个端点。如果捐赠方没有提供端点,则加入成员将尝试使用捐赠方的标准SQL客户机连接进行连接。的SSL要求指定连接
group_replication_recovery_ssl_ *
在第18.5.3.1.4节“分布式恢复的SSL和身份验证”.如果加入成员不能连接到所选的捐赠者,它将重试其他合适的捐赠者,遵循中描述的行为第18.5.3.4节“分布式恢复的容错”.注意,如果加入成员用尽了所发布的端点列表而没有建立连接,那么它不会退回到提供者的标准SQL客户机连接,而是切换到另一个提供者。
当加入成员与捐赠者建立分布式恢复连接时,它使用该连接进行状态传输第18.5.3节,“分布式恢复”.所使用的连接的主机和端口显示在加入成员的日志中。注意,如果使用远程克隆操作,当加入成员在操作结束时重新启动时,它将与新的提供程序建立连接,以便从二进制日志传输状态。这可能是到用于远程克隆操作的原始提供程序的不同成员的连接,也可能是到原始提供程序的不同连接。在任何情况下,分布式恢复过程将以与最初的捐赠者相同的方式继续进行。
提供的IP地址group_replication_advertise_recovery_endpoints
系统变量作为分布式恢复端点不需要为MySQL Server配置(也就是说,它们不需要由admin_address
的系统变量或列表中的bind_address
系统变量)。它们必须被分配给服务器。使用的任何主机名都必须解析为本地IP地址。支持IPv4地址和IPv6地址。
为分布式恢复端点提供的端口必须为MySQL Server配置,因此它们必须由港口
,report_port
,或admin_port
系统变量。服务器必须监听这些端口上的TCP/IP连接。如果指定admin_port
,用于分布式恢复的复制用户需要SERVICE_CONNECTION_ADMIN
连接的特权。选择admin_port
保持分布式恢复连接与常规MySQL客户端连接分离。
连接成员按在列表中指定的顺序依次尝试每个端点。如果group_replication_advertise_recovery_endpoints
设置为默认的
提供的不是端点列表,而是标准的SQL客户端连接。请注意,标准SQL客户端连接不会自动包含在分布式恢复端点列表中,如果没有连接,捐赠者的端点列表已耗尽,则不提供标准SQL客户端连接作为备用。如果希望将标准SQL客户机连接作为多个分布式恢复端点之一提供,则必须将其显式包含在group_replication_advertise_recovery_endpoints
.你可以把它放在最后的位置,这样它就可以作为连接的最后手段。
属性指定的group Replication allowlist中不需要添加组成员的分布式恢复端点(如果没有提供端点,则添加标准SQL客户机连接)group_replication_ip_allowlist
(从MySQL 8.0.22)group_replication_ip_whitelist
系统变量。allowlist仅用于指定的地址group_replication_local_address
对于每个成员。为了检索用于分布式恢复的地址,一个加入成员必须有其与allowlist允许的组的初始连接。
设置系统变量时,将验证所列出的分布式恢复端点开始GROUP_REPLICATION
声明已经发表。如果无法正确解析列表,或者由于服务器没有监听端点而无法访问主机上的任何端点,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
系统变量。对于分布式恢复连接,可以使用专用的Group Replication分布式恢复SSL系统变量配置专门用于分布式恢复的证书和密码的使用。
默认情况下,分布式恢复连接不使用SSL。要激活它,请设置group_replication_recovery_use_ssl =对
,并配置Group Replication分布式恢复SSL系统变量第18.6.3节“保护分布式恢复连接”.您需要一个设置为使用SSL的复制用户。
当分布式恢复配置为使用SSL时,Group Replication将此设置应用于远程克隆操作,以及从捐赠者的二进制日志进行状态传输。组复制自动配置克隆SSL选项的设置(clone_ssl_ca
,clone_ssl_cert
,clone_ssl_key
)以匹配相应组复制分布式恢复选项的设置(group_replication_recovery_ssl_ca
,group_replication_recovery_ssl_cert
,group_replication_recovery_ssl_key
).
如果您不使用SSL进行分布式恢复(因此group_replication_recovery_use_ssl
设置为从
),并且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认证插件的复制用户”.