在生產(chǎn)環(huán)境下,如果不修改elasticsearch節(jié)點(diǎn)的角色信息,在高數(shù)據(jù)量,高并發(fā)的場(chǎng)景下集群容易出現(xiàn)腦裂等問(wèn)題。
默認(rèn)情況下,elasticsearch集群中每個(gè)節(jié)點(diǎn)都有成為主節(jié)點(diǎn)的資格,也都存儲(chǔ)數(shù)據(jù),即雙重角色。
由兩個(gè)屬性控制:node.master和node.data,默認(rèn)情況下這兩個(gè)屬性的值都是true:
- node.master:表示節(jié)點(diǎn)是否具有成為主節(jié)點(diǎn)的資格,值為true并不意味著這個(gè)節(jié)點(diǎn)就是主節(jié)點(diǎn),真正的主節(jié)點(diǎn)是由多個(gè)具有主節(jié)點(diǎn)資格的節(jié)點(diǎn)進(jìn)行選舉產(chǎn)生的。
- node.data:表示節(jié)點(diǎn)是否存儲(chǔ)數(shù)據(jù)。
這兩個(gè)屬性可以有四種組合:
第一種,這種組合表示這個(gè)節(jié)點(diǎn)即有成為主節(jié)點(diǎn)的資格,又存儲(chǔ)數(shù)據(jù),
這個(gè)時(shí)候如果某個(gè)節(jié)點(diǎn)被選舉成為了真正的主節(jié)點(diǎn),那么他還要存儲(chǔ)數(shù)據(jù),這樣對(duì)于這個(gè)節(jié)點(diǎn)的壓力就比較大了。elasticsearch默認(rèn)每個(gè)節(jié)點(diǎn)都是這樣的配置,在測(cè)試環(huán)境下這樣做沒(méi)問(wèn)題。實(shí)際工作中建議不要這樣設(shè)置,這樣相當(dāng)于主節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)的角色混合到一塊了。
node.master: true
node.data: true第二種:這種組合表示這個(gè)節(jié)點(diǎn)沒(méi)有成為主節(jié)點(diǎn)的資格,也就不參與選舉,只會(huì)存儲(chǔ)數(shù)據(jù)。這個(gè)節(jié)點(diǎn)我們稱為data(數(shù)據(jù))節(jié)點(diǎn)。在集群中需要單獨(dú)設(shè)置幾個(gè)這樣的節(jié)點(diǎn)負(fù)責(zé)存儲(chǔ)數(shù)據(jù)。后期提供存儲(chǔ)和查詢服務(wù)。
node.master: false
node.data: true第三種:這種組合表示這個(gè)節(jié)點(diǎn)不會(huì)存儲(chǔ)數(shù)據(jù),有成為主節(jié)點(diǎn)的資格,可以參與選舉,有可能成為真正的主節(jié)點(diǎn)。這個(gè)節(jié)點(diǎn)我們稱為master節(jié)點(diǎn)
node.master: true
node.data: false第四種:這種組合表示這個(gè)節(jié)點(diǎn)即不會(huì)成為主節(jié)點(diǎn),也不會(huì)存儲(chǔ)數(shù)據(jù),
這個(gè)節(jié)點(diǎn)的意義是作為一個(gè)client(客戶端)節(jié)點(diǎn),主要是針對(duì)海量請(qǐng)求的時(shí)候可以進(jìn)行負(fù)載均衡。
node.master: false
node.data: false
默認(rèn)情況下,每個(gè)節(jié)點(diǎn)都有成為主節(jié)點(diǎn)的資格,也會(huì)存儲(chǔ)數(shù)據(jù),還會(huì)處理客戶端的請(qǐng)求。
在一個(gè)生產(chǎn)集群中我們可以對(duì)這些節(jié)點(diǎn)的職責(zé)進(jìn)行劃分。
建議集群中設(shè)置3臺(tái)以上的節(jié)點(diǎn)作為master節(jié)點(diǎn),這些節(jié)點(diǎn)只負(fù)責(zé)成為主節(jié)點(diǎn),維護(hù)整個(gè)集群的狀態(tài)。
再根據(jù)數(shù)據(jù)量設(shè)置一批data節(jié)點(diǎn),這些節(jié)點(diǎn)只負(fù)責(zé)存儲(chǔ)數(shù)據(jù),后期提供建立索引和查詢索引的服務(wù),這樣的話如果用戶請(qǐng)求比較頻繁,這些節(jié)點(diǎn)的壓力也會(huì)比較大。
所以在集群中建議再設(shè)置一批client節(jié)點(diǎn)
這些節(jié)點(diǎn)只負(fù)責(zé)處理用戶請(qǐng)求,實(shí)現(xiàn)請(qǐng)求轉(zhuǎn)發(fā),負(fù)載均衡等功能。
master節(jié)點(diǎn):普通服務(wù)器即可(CPU 內(nèi)存 消耗一般)
data節(jié)點(diǎn):主要消耗磁盤,內(nèi)存
client節(jié)點(diǎn):普通服務(wù)器即可(如果要進(jìn)行分組聚合操作的話,建議這個(gè)節(jié)點(diǎn)內(nèi)存也分配多一點(diǎn))