2. 最小版本号 5.7.18 小于 MySQL 5.7.20,所以 5.7.18, 5.7.18, 5.7.19, 5.7.20, 5.7.21 这几个节点会根据 server_uuid 进行排序 。注意,lowest_version_end 的节点不会参与排序 。
3. 选择 server_uuid 最小的节点作为 Primary 节点 。
案例 2:5.7.20, 5.7.21, 8.0.2, 8.0.21. 同案例 1 一样 , 会将 8.0.2 作为 lowest_version_end 。此时,候选节点只有 5.7.20 和 5.7.21 。
2. 最小版本号 5.7.20 等于 MySQL 5.7.20,所以,5.7.20, 5.7.21 这两个节点会根据节点的权重进行排序 。如果权重一致,则会基于 server_uuid 进行进一步的排序 。
3. 选择权重最高,server_uuid 最小的节点作为 Primary 节点 。
案例 3:8.0.17, 8.0.18, 8.0.191. 最小版本号是 MySQL 8.0.17 , 等于 MySQL 8.0.17,所以会判断其它节点的版本号是否与第一个节点相同 。不相同,则会将该节点的版本号赋值给 lowest_version_end 。所以,会将 8.0.18 作为 lowest_version_end 。此时,候选节点只有 8.0.17 。
2. 选择 8.0.17 这个节点作为 Primary 节点 。
案例 4:8.0.13, 8.0.17, 8.0.181. 最小版本号是 MySQL 8.0.13 , 小于 MySQL 8.0.17,而且各个节点的 major_version 一致,所以最后返回的 lowest_version_end 实际上是 all_members_info->end() 。此时,这三个节点都是候选节点 。
2. MySQL 8.0.13 大于 MySQL 5.7.20,所以这三个节点会根据权重进行排序 。如果权重一致,则会基于 server_uuid 进行进一步的排序 。
3. 选择权重最高,server_uuid 最小的节点作为 Primary 节点 。
手动选主从 MySQL 8.0.13 开始,我们可以通过以下两个函数手动选择新的主节点:
- group_replication_set_as_primary(server_uuid) :切换单主模式下的 Primary 节点 。
- group_replication_switch_to_single_primary_mode([server_uuid]) :将多主模式切换为单主模式 。可通过 server_uuid 指定单主模式下的 Primary 节点 。
另外 , 这两个函数是 MySQL 8.0.13 引入的 , 所以,如果集群中存在 MySQL 8.0.13 之前的节点,执行时会报错 。
mysql> select group_replication_set_as_primary('5470a304-3bfa-11ed-8bee-83f233272a5d');ERROR 3910 (HY000): The function 'group_replication_set_as_primary' failed. The group has a member with a version that does not support group coordinated operations.
总结结合代码和上面四个案例的分析,最后我们总结下 MGR 的新主选举算法:1. 如果集群中存在 MySQL 5.7 的节点,则会将 MySQL 5.7 的节点作为候选节点 。
2. 如果集群节点的版本都是 MySQL 8.0,这里需要区分两种情况:
- 如果最小版本小于 MySQL 8.0.17,则所有的节点都可作为候选节点 。
- 如果最小版本大于等于 MySQL 8.0.17,则只有最小版本的节点会作为候选节点 。
- 如果候选节点中存在 MySQL 5.7.20 之前版本的节点,则会选择 server_uuid 最小的节点作为 Primary 节点 。
- 如果候选节点都大于等于 MySQL 5.7.20,则会选择权重最高,server_uuid 最小的节点作为 Primary 节点 。
推荐阅读
- Object Detection 手把手教你使用LabVIEW OpenCV dnn实现物体识别含源码
- MatrixOne从入门到实战04——MatrixOne的连接和建表
- MatrixOne从入门到实践08——SSB性能测试
- 从零开始学Graph Database:什么是图
- 咸鱼之王龙鱼义从怎么搭配
- 记一次 .NET 某工控视觉软件 非托管泄漏分析
- 三星zFlip3值得买吗_三星zFlip3优缺点分析
- Jupyter,Matplotlib,Pandas 【机器学习】利用 Python 进行数据分析的环境配置 Windows
- 传奇祖玛阁怎么从6层下到5层(传奇怎么从祖玛阁去七层大厅)
- 含源码 手把手教你使用LabVIEW OpenCV dnn实现图像分类