Elasticsearch是如何实现master选举的?

发布于 2020-03-07 11:19:03
关注者
0
被浏览
2435
1 个回答
  • 面试哥
    面试哥 2020-03-07
    为面试而生,有面试问题,就找面试哥。

    面试官:想了解ES集群的底层原理,不再只关注业务层面了。

    解答:

    前置前提:

    1)只有候选主节点(master:true)的节点才能成为主节点。

    2)最小主节点数(min_master_nodes)的目的是防止脑裂。

    这个我看了各种网上分析的版本和源码分析的书籍,云里雾里。

    核对了一下代码,核心入口为findMaster,选择主节点成功返回对应Master,否则返回null。选举流程大致描述如下:

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

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

    题外话:获取节点id的方法。

    1、GET /_cat/nodes?v&h=ip,port,heapPercent,heapMax,id,name

    2、ip port heapPercent heapMax id name

    3、127.0.0.1 9300 39 1.9gb Hk9w Hk9wFwU

     

    补充:

    1、Elasticsearch 的选主是 ZenDiscovery 模块负责的,主要包含 Ping(节点之间通过这个 RPC 来发现彼此)和 Unicast(单播模块包含一个主机列表以控制哪些节点需要 ping 通)这两部分;

     

    2、对所有可以成为 master 的节点(node.master: true)根据 nodeId 字典排序,每次选举每个节点都把自己所知道节点排一次序,然后选出第一个(第 0 位)节点,暂且认为它是 master 节点。

     

    3、如果对某个节点的投票数达到一定的值(可以成为 master 节点数 n/2+1)并且该节点自己也选举自己,那这个节点就是 master。否则重新选举一直到满足上述条件。

     

    4、master 节点的职责主要包括集群、节点和索引的管理,不负责文档级别的管理;data 节点可以关闭 http 功能。

     

     

面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看