Elasticsearch 是如何实现 master 选举的?

参考答案

Elasticsearch 实现 master 选举的前置前提:

  • 只有候选主节点 master:true 的节点,才能成为主节点。
  • 最小主节点数 min_master_nodes 的目的,是为了防止脑裂。

核心入口为 findMaster ,选择主节点成功返回对应 Master ,否则返回null 。

master 选举流程大致如下:

第一步:确认候选主节点数达标。elasticsearch.yml 设置的值 discovery.zen.minimum_master_nodes ;

第二步:比较。先判定是否具备 master 资格,具备候选主节点资格的优先返回;若两节点都为候选主节点,则 id 小的值会主节点。注意这里的 id 为 string 类型。

获取节点 id 的方法:

  • GET /_cat/nodes?v&h=ip,port,heapPercent,heapMax,id,name
  • ip port heapPercent heapMax id name
  • 127.0.0.1 9300 39 1.9gb Hk9w Hk9wFwU

补充:

  • Elasticsearch 的选举,是 ZenDiscovery 模块负责的,主要包含 Ping(节点之间通过这个 RPC 来发现彼此)、和 Unicast(单播模块包含一个主机列表以控制哪些节点需要 ping 通)这两部分;
  • 对所有可以成为 master 的节点(node.master: true),根据 nodeId 字典排序,每次选举每个节点都把自己所知道节点排一次序,然后选出第一个(第 0 位)节点,暂且认为它是 master 节点。
  • 如果对某个节点的投票数达到一定的值(可以成为 master 节点数 n/2+1)并且该节点自己也选举自己,那这个节点就是 master。否则重新选举一直到满足上述条件。
  • master 节点的主要职责包括对集群、节点和索引的管理,不负责文档级别的管理;data 节点可以关闭 http 功能。

 

以上,是 Elasticsearch 搜索面试题【Elasticsearch 是如何实现 master 选举的?】的参考答案。

输出,是最好的学习方法

欢迎在评论区留下你的问题、笔记或知识点补充~

—end—

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧