elasticsearch的master选举机制
对比其它中间件选主机制:
redis集群原理
kafka入门
Zookeeper总结
ES选举算法
常用的选举算法有比较简单的Bully算法和复杂而强大的Paxos算法。
Bully算法
每个节点有一个唯一ID,然后对集群中所有的节点ID进行排序,选取其中最小的ID所属的节点作为Master。
Bully算法的问题: 假设当前Master因为负载过重而假死,然后ID第二大的被选举为新的Master,这时旧的Master恢复然后又被选举为Master然后又会因为负载过重而假死......
Paxos算法
Paxos实现起来非常复杂,但非常强大,尤其在什么时机,以及如何进行选举方面的灵活性比简单的Bully算法有很大的优势,因为在现实生活中,存在比网络链接异常更多的故障模式。
ES使用的是Bully算法,并对其做了一些优化:
- 每个节点结算最小的ID,把它选举为临时Master,然后对该master进行投票;
- 每个节点收集票数,当票数大于指定的法定个数时,成为Master,然后对加入的节点进行集群信息广播。
流程