discovery.zen.minimum_master_nodes對集群的穩定性至關重要,防止腦裂的出現。
腦裂:
如果網絡的故障導致一個集群被划分成兩片,每片都有多個node,以及一個master。因為master是維護集群狀態,以及shard的分配。如果出現了兩個master,可能導致數據破損。
discovery.zen.minimum_master_nodes的作用是只有足夠的master候選節點時,才可以選舉出一個master。該參數必須設置為集群中master候選節點的quorum數量。
quorum的算法=master候選節點數量/2+1
舉例:
1、如果有10個節點,都是data node,也是master的候選節點。則quorum=10/2+1=6
2、如果有3個master候選節點,100個數據節點。則quorum=3/2+1=2
3、如果有2個節點,都是data node,也是master的候選節點。則quorum=2/2+1=2(有問題)
如果其中一個節點掛了,那么master的候選節點只有一個,無法滿足quorum數量。即無法選舉出master。此時只能將quorum設置成1,但是設置為1有可能出現腦裂。
總結:一般es集群的節點至少要有3個,quorum設置為2
使用例2的場景說明quorum是如何防止腦裂
假設集群中3個節點有一個節點與其他節點無法通信,
1、如果master是單獨的節點,另外2個節點是master候選節點。那么此時單獨的master節點因為沒有指定數量的候選master node在自己當前所在的集群里。因此會取消當前的master角色,嘗試重新選舉(無法選舉成功)
另外一個網絡區域內的node因為無法連接到master,就會發起重新選舉,有兩個候選節點,滿足quorum,成功選舉出一個master。
2、如果master和一個node在一個網絡區域(A),另一個node單獨在一個網絡區域(B)。
B區域只有一個node,因為連不上master,會嘗試發起選舉,但不滿足quorum,無法選舉
A區域master繼續工作,當前網絡也滿足quorum,不發起選舉。
discovery.zen.minimum_master_nodes除了在配置文件設置,也可以動態設置
PUT /_cluster/settings
{
"persistent":{
"discovery.zen.minimum_master_nodes":2
}
}