想了解 ES 集群的底層原理,不再只關注業務層面了。
前置前提:
1、只有候選主節點(master:true)的節點才能成為主節點。
2、最小主節點數(min_master_nodes)的目的是防止腦裂。
這個我看了各種網上分析的版本和源碼分析的書籍,雲里霧里。
核對了一下代碼,核心入口為 findMaster,選擇主節點成功返回對應 Master,否
則返回 null。選舉流程大致描述如下:
第一步:確認候選主節點數達標,elasticsearch.yml 設置的值
discovery.zen.minimum_master_nodes;
第二步:比較:先判定是否具備 master 資格,具備候選主節點資格的優先返回;
若兩節點都為候選主節點,則 id 小的值會主節點。注意這里的 id 為 string 類型。
題外話:獲取節點 id 的方法。
1GET /_cat/nodes?v&h=ip,port,heapPercent,heapMax,id,name
2ip
port heapPercent heapMax id
name