当前位置: 首页 > 面试题库 >

Elasticsearch是如何实现master选举的?

段干楚青
2023-03-14
本文向大家介绍Elasticsearch是如何实现master选举的?相关面试题,主要包含被问及Elasticsearch是如何实现master选举的?时的应答技巧和注意事项,需要的朋友参考一下

面试官:想了解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 功能。

 

 

 类似资料:
  • 本文向大家介绍Zookeeper 如何选举master 主节点?相关面试题,主要包含被问及Zookeeper 如何选举master 主节点?时的应答技巧和注意事项,需要的朋友参考一下 还记得上面我们的所说的临时节点吗?因为 的强一致性,能够很好地在保证 在高并发的情况下保证节点创建的全局唯一性 (即无法重复创建同样的节点)。 利用这个特性,我们可以 让多个客户端创建一个指定的节点 ,创建成功的就是

  • 我正在尝试设置詹金斯主从环境。在网上搜索后,有许多说明说明如何从头开始设置。但是我的情况有点不同,有一个jenkins实例目前在AWS EC2环境中运行。我想让这个实例成为slave,并设置另一个jenkins实例作为master来控制那个slave。我跟踪了这个链接:'https://wiki.jenkins-ci.org/display/jenkins/step+by+step+guide+t

  • Created /master [zk: localhost:2181(CONNECTED) 1] ls / <2> [master, zookeeper] [zk: localhost:2181(CONNECTED) 2] get /master <3> "master1.example.com:2223" cZxid = 0x67 ctime = Tue Dec 11 10:06:19 CET

  • 问题内容: 我需要重新实现一些枚举的enum.valueof方法,以使它们不再抛出异常,而如果枚举中不存在值,则它们仅返回null。 我正在尝试基本 但是它不起作用,说我需要重写或实现一个超级类型。 我猜想我可以开设一个超级班,但是我不确定如何将它们放在一起。有任何想法吗? 问题答案: 你不能 您必须定义另一个不同的方法。valueOf方法由编译器自动生成。

  • 问题内容: 我不是100%相信这是个好主意,但是今天我碰到了一些目前实现为的代码: 这里再提供方法,其使用转换传入的向/从。 我正在考虑做的是试图重构它,以便声明自己的枚举: 然后,我便可以将其重写为如下所示的模糊内容: 然后可以从中的on- type对象调用该方法。当然,问题在于“ ”不是有效的语法。有什么办法可以做到这一点? 我不想只拥有,因为T成为枚举也很重要。 提前致谢! 问题答案: 改用

  • 问题内容: 在Java中,您可以创建一个枚举,如下所示: public enum Letter { A, B, C, D, E, F, G; } 这个问题涉及“ values()”方法。具体来说,如何实施?通常,我可以在Eclipse中使用F3或CTRL + Click跳到Java类的源代码(甚至对于String,Character,Integer甚至Enum之类的类)。可以查看其他枚举方法的源(