个人总结:
- 触发选主条件:
- 项目启动
- 集群节点、主分支产生异动
- 选主配置读取
- discovery.zen.minonum_master_nodes:最小主节点数,防止脑裂。只有参加选举的集群达到最小主节点数(法定人数)才会进行选主
- DNS配置
- 集群超时配置
- 重试次数
- 选取临时节点Master
- 每个节点计算最小的已知节点ID,该节点为临时Master,向该节点发动领导投票
- 所有节点都会投票,也可以投自己,但是只有配置了master的投票才会有效果
- 两个list 活跃节点master、获选人节点master
- 先从活跃master中选取最小版本的节点作为master,如果版本号相同,则比较id
- 如果活跃节点master为空,则在获选人节点master中选取主
- 节点失效检测
- 在Master节点,启动NoderFD,定期探测集群是否存在活跃
- 在Nodes节点,启动MasterFD,定期探测主节点是否存在活跃
- 如果NoderFD过程中发现集群达到小于最小法定人数,主节点放弃身份,重新选取
- 如果MasterFD过程发现主节点不活跃,重新选取主节点