ES原理之选主流程

目录

  • 主从模式vs无主模式
  • ES选举算法
  • 流程

选主流程

主从模式 VS. 无主模式

分布式系统的集群方式大致可以分为主从模式(Master-Slave)和无主模式。

模式 代表组件 优点 缺点
主从模式 ES/HDFS/HBase 简化系统设计,Master作为权威节点,负责维护集群原信息。 Master节点存在单点故障,需要解决在被问题,并且集群规模会受限于Master节点的管理能力。
无主模式 Cassandra 分布式哈希表(DHT),支持每小时数千个节点的离开和加入。 集群没有master的概念,所有节点都是同样的角色,彻底避免了整个系统的单点问题导致的不稳定性。多个节点可能操作同一条数据,数据一致性上可能比较难以保证。

ES选举算法

常用的选举算法有比较简单的Bully算法和复杂而强大的Paxos算法。

Bully算法

每个节点有一个唯一ID,然后对集群中所有的节点ID进行排序,选取其中最小的ID所属的节点作为Master。
Bully算法的问题: 假设当前Master因为负载过重而假死,然后ID第二大的被选举为新的Master,这时旧的Master恢复然后又被选举为Master然后又会因为负载过重而假死......

Paxos算法

Paxos实现起来非常复杂,但非常强大,尤其在什么时机,以及如何进行选举方面的灵活性比简单的Bully算法有很大的优势,因为在现实生活中,存在比网络链接异常更多的故障模式。
ES使用的是Bully算法,并对其做了一些优化:

  • 每个节点结算最小的ID,把它选举为临时Master,然后对该master进行投票;
  • 每个节点收集票数,当票数大于指定的法定个数时,成为Master,然后对加入的节点进行集群信息广播。

流程

  1. ping所有节点,并获取PingResponse返回结果(findMaster)
  2. 过滤出具有Master资格的节点(filterPingResponses)
  3. 选出临时Master。根据PingResponse结果构建两个列表:activeMasters和masterCandidates。
  • 如果activeMasters非空,则从activeMasters中选择最合适的作为Master;
  • 如果activeMasters为空,则从masterCandidates中选举,结果可能选举成功,也可能选举失败。
  1. 判断临时Master是否是本节点。
  • 如果临时Master是本节点:则等待其他节点选我,默认30秒超时,成功的话就发布新的clusterState。(当选总统候选人,只等选票过半了)
  • 如果临时Master是其他节点:则不再接受其他节点的join请求,并向Master节点发送加入请求。(没资格选举,就只能送人头了)

参考文章

  • ES 选主流程分析
  • Elasticsearch选主流程

你可能感兴趣的:(ES原理之选主流程)