面試官:想了解 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