白话Elasticsearch65-最少master候选节点以及ES集群脑裂问题
文章目錄
- 概述
- 腦裂的成因分析
- 重要參數(shù):discovery.zen.minimum_master_nodes
- 舉例說明
- 3個節(jié)點,discovery.zen.minimum_master_nodes設(shè)置為2,是如何避免腦裂?
- 動態(tài)設(shè)置discovery.zen.minimum_master_nodes
概述
繼續(xù)跟中華石杉老師學(xué)習(xí)ES,第65篇
課程地址: https://www.roncoo.com/view/55
腦裂的成因分析
如果因為網(wǎng)絡(luò)的故障,導(dǎo)致一個集群被劃分成了兩片,每片都有多個node,以及一個master,那么集群中就出現(xiàn)了兩個master了。
但是因為master是集群中非常重要的一個角色,主宰了集群狀態(tài)的維護(hù),以及shard的分配,因此如果有兩個master的化,可能會導(dǎo)致破壞數(shù)據(jù)。
重要參數(shù):discovery.zen.minimum_master_nodes
discovery.zen.minimum_master_nodes參數(shù)對于集群的可靠性來說,是非常重要的。這個設(shè)置可以預(yù)防腦裂問題,也就是一個集群中存在兩個master。
配置文件中的注釋如下:
這個參數(shù)的作用,就是告訴es直到有足夠的master候選節(jié)點時,才可以選舉出一個master,否則就不要選舉出一個master。
這個參數(shù)必須被設(shè)置為集群中master候選節(jié)點的quorum數(shù)量,也就是大多數(shù)。至于quorum的算法,就是:master候選節(jié)點數(shù)量 / 2 + 1。
舉例說明
比如我們有10個節(jié)點,都能維護(hù)數(shù)據(jù),也可以是master候選節(jié)點,那么quorum就是10 / 2 + 1 = 6。
如果我們有三個master候選節(jié)點,還有100個數(shù)據(jù)節(jié)點,那么quorum就是3 / 2 + 1 = 2
如果我們有2個節(jié)點,都可以是master候選節(jié)點,那么quorum是2 / 2 + 1 = 2。此時就有問題了,因為如果一個node掛掉了,那么剩下一個master候選節(jié)點,是無法滿足quorum數(shù)量的,也就無法選舉出新的master,集群就掛掉了(可讀不可寫)。此時就只能將這個參數(shù)設(shè)置為1,但是這就無法阻止腦裂的發(fā)生了。
2個節(jié)點,discovery.zen.minimum_master_nodes分別設(shè)置成2和1會怎么樣?
見下圖
設(shè)置成2的場景, 無法發(fā)起選舉,沒有master了。
設(shè)置為1的場景,不可避免腦裂
綜上所述,一個生產(chǎn)環(huán)境的es集群,至少要有3個節(jié)點,同時將這個參數(shù)設(shè)置為quorum,也就是2。discovery.zen.minimum_master_nodes設(shè)置為2,如何避免腦裂呢?
3個節(jié)點,discovery.zen.minimum_master_nodes設(shè)置為2,是如何避免腦裂?
那么這個是參數(shù)是如何避免腦裂問題的產(chǎn)生的呢?比如我們有3個節(jié)點,quorum是2.現(xiàn)在網(wǎng)絡(luò)故障,1個節(jié)點在一個網(wǎng)絡(luò)區(qū)域,另外2個節(jié)點在另外一個網(wǎng)絡(luò)區(qū)域,不同的網(wǎng)絡(luò)區(qū)域內(nèi)無法通信。這個時候有兩種情況情況:
(1)如果master是單獨的那個節(jié)點,另外2個節(jié)點是master候選節(jié)點,那么此時那個單獨的master節(jié)點因為沒有指定數(shù)量的候選master node在自己當(dāng)前所在的集群內(nèi),因此就會取消當(dāng)前master的角色,嘗試重新選舉,但是無法選舉成功。然后另外一個網(wǎng)絡(luò)區(qū)域內(nèi)的node因為無法連接到master,就會發(fā)起重新選舉,因為有兩個master候選節(jié)點,滿足了quorum,因此可以成功選舉出一個master。此時集群中就會還是只有一個master。
(2)如果master和另外一個node在一個網(wǎng)絡(luò)區(qū)域內(nèi),然后一個node單獨在一個網(wǎng)絡(luò)區(qū)域內(nèi)。那么此時那個單獨的node因為連接不上master,會嘗試發(fā)起選舉,但是因為master候選節(jié)點數(shù)量不到quorum,因此無法選舉出master。而另外一個網(wǎng)絡(luò)區(qū)域內(nèi),原先的那個master還會繼續(xù)工作。這也可以保證集群內(nèi)只有一個master節(jié)點。
綜上所述,通過在elasticsearch.yml中配置discovery.zen.minimum_master_nodes: 2,就可以避免腦裂問題的產(chǎn)生。
動態(tài)設(shè)置discovery.zen.minimum_master_nodes
但是因為es集群是可以動態(tài)增加和下線節(jié)點的,所以可能隨時會改變quorum。所以這個參數(shù)也是可以通過api隨時修改的,特別是在節(jié)點上線和下線的時候,都需要作出對應(yīng)的修改。而且一旦修改過后,這個配置就會持久化保存下來。
PUT /_cluster/settings {"persistent" : {"discovery.zen.minimum_master_nodes" : 2} }總結(jié)
以上是生活随笔為你收集整理的白话Elasticsearch65-最少master候选节点以及ES集群脑裂问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 白话Elasticsearch64-ze
- 下一篇: 白话Elasticsearch66-针对