面试官:想了解 ES 集群的底层原理,再也不只关注业务层面了。 node
前置前提: 面试
一、只有候选主节点(master:true)的节点才能成为主节点。 elasticsearch
二、最小主节点数(min_master_nodes)的目的是防止脑裂。 源码分析
这个我看了各类网上分析的版本和源码分析的书籍,云里雾里。 spa
核对了一下代码,核心入口为 findMaster,选择主节点成功返回对应 Master,否 ip
则返回 null。选举流程大体描述以下: 源码
第一步:确认候选主节点数达标,elasticsearch.yml 设置的值 string
discovery.zen.minimum_master_nodes; ast
第二步:比较:先断定是否具有 master 资格,具有候选主节点资格的优先返回; 集群
若两节点都为候选主节点,则 id 小的值会主节点。注意这里的 id 为 string 类型。
题外话:获取节点 id 的方法。
1GET /_cat/nodes?v&h=ip,port,heapPercent,heapMax,id,name
2ip
port heapPercent heapMax id
name