Elasticsearch黑鸟教程16:ES的选举过程:Bully算法
分布式系统中各个节点的地位是均等的,是不过角色不同而已,有的是 leader ,而有的是 flower。
这种区分 leader 和 flower 的集群更好管理些,因为执行写操作的时候都交给 leader 去处理,然后由 leader 再将数据同步给各个 flower 上的副本。读的时候可以从 flower 上读取,也可以从 leader 上读取,分散系统的压力。有些分布式系统,leader 还负责一些元数据的管理,所以对于分布式系统来说 leader 选举很重要。
与 leader-flower 类似, Elasticsearch采用了 master-slave
模式, Elasticsearch会在集群中选取一个节点成为主节点,只有 master
节点有资格维护全局的集群状态,在有节点加入或者退出集群的时候,它会重新分配分片,并将集群最新状态发送给集群中其它节点,主节点会以周期性 ping 的方式以验证其它节点是否存活。
Elasticsearch的选举算法基于 Bully
选举算法,简单的说,在 Bully
算法中,每个节点都有一个编号,只有编号最大的存活节点才能成为 master
节点。Bully
算法的具体过程为:
当任何一个进程P发现 master
不响应请求时,它发起一次选举,选举过程如下:
(1)P进程向所有编号比它大的进程发送一个 election
消息;
(2)如果无人响应,则P获胜,成为 master
;
(3)如果编号比它大的进程响应,则由响应者接管选举工作,P的工作完成。
任何一个时刻,一个进程只能从编号比它小的进程接受 election
消息,当消息到达时,接受者发送一个 OK
消息给发送者,表明它在运行,接管工作。
最终除了一个进程外,其他进程都放弃,那个进程就是新的协调者,随后协调者将获胜消息发送给其他所有进程,通知它们新的协调者诞生了。