Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

20.1.4.1 组成员资格

在 MySQL 组复制中,服务器集形成一个复制组。该组具有名称,以 UUID 的形式表示。该组是动态的,服务器可以随时加入或离开该组。

如果服务器加入该组,它将自动更新自己,通过从现有服务器获取缺失的状态。如果服务器离开该组,例如为了维护而关闭,剩余的服务器将注意到它的离开,并自动重新配置该组。

组复制具有组成员服务,定义哪些服务器在线并参与该组。在线服务器的列表称为 视图。该组中的每个服务器都具有该组中活动成员的最新视图。

组成员不仅需要同意事务提交,还需要同意当前视图。如果现有成员同意新的服务器加入该组,该组将重新配置以将该服务器集成其中,从而触发视图更改。如果服务器离开该组,无论是自愿还是非自愿,该组将动态重新配置,并触发视图更改。

在成员自愿离开该组的情况下,它首先启动动态组重新配置,在该过程中所有成员都需要同意新的视图,不包括离开的服务器。然而,如果成员非自愿离开该组,例如突然停止或网络连接中断,它无法启动重新配置。在这种情况下,组复制的故障检测机制将在短时间内检测到成员的离开,并提出重新配置该组的建议,不包括失败的成员。与自愿离开的情况一样,重新配置需要大多数服务器的同意。但是,如果该组无法达成协议,例如由于该组被分区成多个部分,无法在线的服务器数量不足以形成多数,那么系统将无法动态更改配置,并将阻止以防止脑裂情况的发生。这情况需要管理员的干预。

如果成员短时间离线,然后尝试重新加入该组,之前的故障检测机制尚未检测到其故障,并且该组尚未重新配置以删除该成员。在这种情况下,重新加入的成员将忘记其之前的状态,但如果其他成员向其发送消息,以其之前的状态为目标,这可能会导致问题,包括可能的数据不一致。如果该成员参与 XCom 的一致协议,这可能会导致 XCom 在同一轮一致协议中交付不同的值,以便在故障前和故障后做出不同的决定。

为了防止这种可能性,从 MySQL 5.7.22 和 MySQL 8.0 开始,组复制检查成员是否尝试重新加入该组,而其旧版本(具有相同的地址和端口号)仍然被列为成员。新的成员将被阻止加入该组,直到旧成员可以通过重新配置被删除。注意,如果添加了等待期,以允许成员在被驱逐之前重新连接到该组,那么成员可以在怀疑超时之前重新加入该组。如果成员超时并被驱逐出该组,或者在服务器上停止组复制,或者服务器故障,它必须重新加入该组作为新的成员。