為什么es集群至少需要三個節點(轉)


elasticsearch集群

graph LR;
    A(Master Node) --- B(Data Node);
    A --- C(Data Node);
    B --- C;

Master: 在Elasticsearch中Master僅僅負責維護集群的狀態

  1. 創建或刪除索引
  2. 跟蹤哪些節點是集群的一部分
  3. 決定將哪些碎片分配給哪個節點
  4. 等集群范圍的操作

上面的一些集群信息, 是由Master節點進行維護, 但是 Master也會把節點信息, 同步給其他節點, 但是只有master節點可以修改.

點擊查看Elasticsearch節點介紹

為什么要至少三個節點

首先查看 Elasticsearch 的配置文件, 如下:
Zen Discovery 官方介紹

# 傳遞初始主機列表,以便在啟動新節點時執行發現
discovery.zen.ping.unicast.hosts: ["192.168.xxx.xxx:9300", "192.168.xxx.xxx:9300"]
# 選舉Maste時需要的節點數 (total number of master-eligible nodes / 2 + 1) 防止“防止腦裂”
discovery.zen.minimum_master_nodes: 2
# 一個節點多久ping一次,默認1s
discovery.zen.fd.ping_interval: 1s
# 等待ping返回時間,默認30s
discovery.zen.fd.ping_timeout: 30s
# ping超時重試次數,默認3次
discovery.zen.fd.ping_retries: 3
discovery.zen.minimum_master_nodes: 2 

其中 minimum_master_nodes 配置是為了防止腦裂

假設 Elasticsearch 有兩個節點
graph LR;
    A(Master Node) --- B(Data Node);
graph LR;
    A(Master Node) -.X.- B(Data Node);
  1. discovery.zen.minimum_master_nodes: 1

    此時出現網絡波動, 導致 A—B 之間短暫斷開連接, 根據選舉規則, B將自己選舉為 Master, 當網絡波動結束, 就會出現兩個Master的情況.

        graph LR;
         A(Master Node 宕機) --- B(Data Node);
  2. discovery.zen.minimum_master_nodes: 2

    Master 出現故障, 則 B 將永遠不可能將自己選擇為 Master

Elasticsearch 有三個節點

三節點配置: discovery.zen.minimum_master_nodes: 2

graph LR;
    A(Master Node) -.X.- B(Data Node);
    A -.X.- C(Data Node);
    B --- C;

出現網絡波動 A 節點 和 別的節點短暫斷開連接

graph LR;
    A(Master Node -> Data Node) -.X.- B(Data Node -> Master Node);
    A -.X.- C(Data Node);
    B --- C;

A節點降級, B和C 進行選舉, 此處模擬選舉B為 Master Node

graph LR;
    A(Data Node) --- B(Master Node);
    A --- C(Data Node);
    B --- C;

網絡恢復后的節點狀況.

總結

以上可以看出, 通過配置 minimum_master_nodes 來防止出現腦裂
同時在生產過程中, 為了盡量保持集群高可用, 至少需要三台機器搭建集群

 

 

 

 

https://www.dazhuanlan.com/2019/12/19/5dfb0b8307037/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM