分布式系统中各个节点的地位是均等的,是不过角色不同而已,有的是 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 消息给发送者,表明它在运行,接管工作。

最终除了一个进程外,其他进程都放弃,那个进程就是新的协调者,随后协调者将获胜消息发送给其他所有进程,通知它们新的协调者诞生了。

标签: none

添加新评论