elasticsearch集群
graph LR; A(Master Node) --- B(Data Node); A --- C(Data Node); B --- C;
Master: 在Elasticsearch中Master僅僅負責維護集群的狀態
- 創建或刪除索引
- 跟蹤哪些節點是集群的一部分
- 決定將哪些碎片分配給哪個節點
- 等集群范圍的操作
上面的一些集群信息, 是由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);
-
discovery.zen.minimum_master_nodes: 1
此時出現網絡波動, 導致 A—B 之間短暫斷開連接, 根據選舉規則, B將自己選舉為 Master, 當網絡波動結束, 就會出現兩個Master的情況.
graph LR; A(Master Node 宕機) --- B(Data Node);
-
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/