17.5.1.1 单主模式

在这种模式下,该组有一个设置为读写模式的单一主服务器。该组中的所有其他成员都设置为只读模式(带有 super-read-only=ON )。这是自动发生的。主服务器通常是引导组的第一台服务器,所有其他加入的服务器会自动了解主服务器并设置为只读。

图 17.5 新初选

五个服务器实例 S1、S2、S3、S4 和 S5 部署为一个互连组。 服务器 S1 是主要服务器。 写入客户端与服务器 S1 通信,读取客户端与服务器 S4 通信。 然后服务器 S1 发生故障,中断与写入客户端的通信。 然后服务器 S2 接管成为新的主服务器,写客户端现在与服务器 S2 通信。

在单主模式下,一些部署在多主模式下的检查被禁用,因为系统强制只有一个服务器写入组。例如,允许更改具有级联外键的表,而在多主模式下则不允许。在主要成员失败时,自动主要选举机制选择新的主要成员。选举过程是通过查看新视图并根据 的值对潜在的新初选进行排序来执行的 group_replication_member_weight。假设该组的所有成员都运行相同的 MySQL 版本,那么具有最高值的成员 group_replication_member_weight 被选为新的主要成员。如果多个服务器具有相同 group_replication_member_weight的 ,则服务器将根据它们 server_uuid的字典顺序并选择第一个来确定优先级。一旦选择了一个新的主节点,它就会自动设置为读写,而其他辅助节点仍然是辅助节点,因此是只读的。

当一个新的主节点被选出时,只有在它处理完来自旧主节点的所有事务后,它才可写。这避免了来自旧主节点的旧事务与正在该成员上执行的新事务之间可能出现的并发问题。在将客户端应用程序重新路由到它之前,等待新的主应用程序应用其与复制相关的中继日志是一个很好的做法。

如果该组与运行不同版本 MySQL 的成员一起操作,那么选举过程可能会受到影响。例如,如果任何成员不支持 group_replication_member_weight,则根据 server_uuid较低主要版本成员的顺序选择主要版本。或者,如果运行不同 MySQL 版本的所有成员都支持 group_replication_member_weight,则根据 group_replication_member_weight 较低主要版本的成员选择主要成员。