从源码分析 MGR 的新主选举算法( 五 )


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 , 则只有最小版本的节点会作为候选节点 。
3. 在候选节点的基础上 , 会进一步根据候选节点的权重和 server_uuid 选择 Primary 节点 。具体来说 , 
  • 如果候选节点中存在 MySQL 5.7.20 之前版本的节点 , 则会选择 server_uuid 最小的节点作为 Primary 节点 。
  • 如果候选节点都大于等于 MySQL 5.7.20 , 则会选择权重最高 , server_uuid 最小的节点作为 Primary 节点 。

经验总结扩展阅读