17.4.1.1 单主模式

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

图 17.5 新初选

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

在单主要模式下,由于在系统上强制只有一台服务器写入该组,因此禁用了在多主要模式下部署的某些检查。例如,允许更改具有级联外键的 table,而在多主键模式下则不允许更改。当主要成员失败时,自动的主要选举机制将选择新的主要成员。选择过程是通过查看新视图并基于group_replication_member_weight的值对潜在的新基元进行排序来执行的。假设该组正在使用所有运行相同 MySQL 版本的成员运行,则将group_replication_member_weight的值最高的成员选为新的主要成员。如果多个服务器具有相同的group_replication_member_weight,则将按照服务器的server_uuid的字典 Sequences 对它们进行优先级排序,并选择第一个。选出新的主数据库后,它将自动设置为可读写,而其他辅助数据库将保留为辅助数据库,因此保持只读状态。

当选择一个新的主数据库时,它只有在处理完来自旧主数据库的所有事务后才可写。这样可以避免旧的主事务中的旧事务与在该成员上执行的新事务之间可能发生的并发问题。在新的主数据库重新路由 Client 端应用程序之前,最好 await 新的主数据库应用其复制相关的中继日志。

如果该组与运行不同版本 MySQL 的成员一起运行,则选举过程可能会受到影响。例如,如果任何成员不支持group_replication_member_weight,则基于server_uuidSequences 从较低主要版本的成员中选择主要成员。另外,如果运行不同 MySQL 版本的所有成员都支持group_replication_member_weight,则从group_replication_member_weight的较低主要版本的成员中选择主要对象。