# 18.1.4.1集团成员资格

在MySQL组复制中,一组服务器构成一个复制组。组有一个名称,其形式为UUID。这个团队是动态的,服务器可以随时(自愿或非自愿)离开并加入。每当服务器加入或离开时,该组都会进行自我调整。

如果服务器加入该组,它会通过从现有服务器获取缺少的状态来自动更新自己。如果一台服务器离开了该组,例如,它被关闭进行维护,其余的服务器会注意到它已经离开,并自动重新配置该组。

组复制具有组成员资格服务,该服务定义哪些服务器处于联机状态并参与组。在线服务器列表被称为看法。组中的每台服务器都有一个一致的视图,即哪些服务器是在给定时刻积极参与组的成员。

组成员不仅必须就事务提交达成一致,还必须就当前视图达成一致。如果现有成员同意新服务器应成为组的一部分,则会重新配置组以将该服务器集成到其中,从而触发视图更改。如果服务器自愿或不自愿离开组,组将动态重新安排其配置,并触发视图更改。

在成员自愿离开组的情况下,它首先启动动态组重新配置,在此期间,所有成员必须在没有离开服务器的情况下就新视图达成一致。但是,如果成员非自愿离开组,例如因为意外停止或网络连接中断,则无法启动重新配置。在这种情况下,组复制的故障检测机制会在短时间内识别出成员已离开,并建议在没有故障成员的情况下重新配置组。与自愿离开的成员一样,重新配置需要得到组中大多数服务器的同意。然而,如果团队无法达成一致意见,例如,因为其划分方式导致大多数服务器都不在线,那么系统将无法动态更改配置,并阻止出现大脑分裂的情况。这种情况需要管理员的干预。

成员可以在短时间内脱机,然后在故障检测机制检测到其故障之前,以及在重新配置组以删除成员之前,再次尝试重新加入该组。在这种情况下,重新加入成员会忘记其以前的状态,但如果其他成员向其发送的消息是针对其崩溃前状态的,这可能会导致包括可能的数据不一致在内的问题。如果这种情况下的一个成员参与了XCom的共识协议,它可能会导致XCom在失败前后做出不同的决定,从而为同一轮共识提供不同的价值观。

为了应对这种可能性,在MySQL 5.7.22和MySQL 8.0中,组复制检查同一服务器的新版本是否试图加入组,而其旧版本(具有相同的地址和端口号)仍列为成员。新的化身被阻止加入该团体,直到旧的化身可以通过重新配置被移除。请注意,如果组\复制\成员\驱逐\超时系统变量允许成员在被驱逐之前有额外的时间重新连接到该组,如果在怀疑超时之前重新连接到该组,则被怀疑的成员可以作为其当前化身再次活跃在该组中。当成员超过EXCEL超时并被从组中驱逐时,或当服务器上的组复制被停止组复制语句或服务器故障,它必须作为新的化身重新加入。