Elasticsearch 向外擴(kuò)展

一、向Elasticsearch集群加入節(jié)點

新增節(jié)點前后集群狀態(tài)變化

向集群增加一個節(jié)點前,test索引的主分片全部分配到節(jié)點Node1,而副本分片分配沒有地方分配。在這種情況下,集群是黃色的,因為所有的主分片有了安家之處,但是副本分片沒有。一旦第二個節(jié)點加入,尚未分配的副本分片就會分配到新的節(jié)點Node2處,這使得集群變?yōu)榱司G色的狀態(tài)。

當(dāng)另一個節(jié)點加入的時候,Elasticsearch會自動地嘗試將分片在所有節(jié)點上進(jìn)行均勻分配。如果更多的節(jié)點加入集群,Elasticsearch將試圖在所有的節(jié)點上均勻配置分片數(shù)量,這樣每個新加入的節(jié)點都能通過部分?jǐn)?shù)據(jù)(以分片的形式)來分擔(dān)負(fù)載。將節(jié)點加入Elasticsearch集群帶來了大量的好處,主要的收益是高可用性和性能的提升。當(dāng)副本分片是激活狀態(tài)時,如果無法找到主分片,Elasticsearch會自動地將一個對應(yīng)的副本分片升級為主分片。這樣,及時失去了索引主分片所在的節(jié)點,仍然可以訪問副本分片上的數(shù)據(jù)。數(shù)據(jù)分布在多個節(jié)點上同樣提升了性能,原因是主分片和副本分片都可以處理搜索和獲取結(jié)果的請求。如此擴(kuò)展還未整體集群增加了更多的內(nèi)存,所以如果過于消耗內(nèi)存的搜索和聚集運行了太長時間或致使集群耗盡了內(nèi)存,那么加入更多的節(jié)點總是一個處理更多更復(fù)雜操作的便捷方式。


二、發(fā)現(xiàn)其他Elasticsearch節(jié)點

通過廣播來發(fā)現(xiàn)

廣播模式發(fā)現(xiàn)集群中其他節(jié)點

通過單播來發(fā)現(xiàn)

單播模式發(fā)現(xiàn)集群中其他節(jié)點

選舉主節(jié)點和識別錯誤

一旦集群中的節(jié)點發(fā)現(xiàn)了彼此,他們會協(xié)商誰將成為主節(jié)點。主節(jié)點負(fù)責(zé)管理集群的狀態(tài),也就是當(dāng)前的設(shè)置和集群中分片、索引以及節(jié)點的狀態(tài)。在主節(jié)點被選舉出來之后,它會建立內(nèi)部的ping記住來確保每個節(jié)點在集群中保持活躍和健康,這被成為錯誤識別。Elasticsearch認(rèn)為所有節(jié)點都有資格成為主節(jié)點。當(dāng)集群只有一個節(jié)點的時候, 該節(jié)點先等待一段時間,如果沒有發(fā)現(xiàn)任何其他集群的節(jié)點,它就將自己選為主節(jié)點。

對于節(jié)點數(shù)量稀少的生產(chǎn)集群,設(shè)置主節(jié)點的最小數(shù)量 是個不錯的主意。盡管這個設(shè)置可能使得Elasticsearch看上去可以擁有多個主節(jié)點,實際上它是告訴Elasticsearch在集群成為健康的狀態(tài)前,集群中多少個節(jié)點有資格成為主節(jié)點。設(shè)置可成為主節(jié)點之節(jié)點的最小數(shù)量,可以幫助你確保集群在沒有其全局狀態(tài)的情況下,避免嘗試執(zhí)行存在危險的操作。如果節(jié)點數(shù)量不會隨著時間而變化,可以將最小數(shù)量設(shè)置為集群的總節(jié)點數(shù),或者遵循一個常用的規(guī)則:將其設(shè)滋味集群節(jié)點數(shù)/2 + 1。將minimum_master_nodes設(shè)置為高于1的數(shù)量,可以預(yù)防集群腦裂。

什么是腦裂?

(通常是在重負(fù)荷或網(wǎng)絡(luò)存在問題的情況下)Elasticsearch集群中一個或多個節(jié)點失去了主節(jié)點的通訊,開始選舉新的主節(jié)點,并且繼續(xù)處理請求。這個時候,可能有兩個不同的Elasticsearch集群相互獨立地運行著,這就是腦裂。通過設(shè)置minimum_master_nodes的值可以預(yù)防腦裂,因為這意味著如果一個或多個節(jié)點失去了和其他節(jié)點的通信,他們無法選舉新的主節(jié)點來形成新集群,因為對于他們不能獲得所需的節(jié)點(可能成為主節(jié)點的節(jié)點)數(shù)量(超過一半)。

獲取節(jié)點的信息


三、刪除集群中的節(jié)點

如果Elasticsearch集群中的一個節(jié)點掉線了或者被停機(jī)了?

Elasticsearch可以選擇人一個副本分片并將其轉(zhuǎn)變?yōu)橹鞣制北痉制優(yōu)橹鞣制?,集群會變成黃色的狀態(tài),這意味著某些副本分片尚未分配到某個節(jié)點。Elasticsearch下一步需要創(chuàng)建更多的副本分片來保持索引的高可用性。一旦副本分片被重新創(chuàng)建,并用于彌補(bǔ)損失的節(jié)點,那么集群將重新回歸綠色的狀態(tài),全部的主分片及其副本分片都分配到了某個節(jié)點。

在這段時間內(nèi),整個集群都是可用于搜索和索引的,因為實際上沒有數(shù)據(jù)丟失。如果失去的節(jié)點多余1個,或者某個沒有副本分片丟失了,那么集群就會變成紅色狀態(tài),這意味著某些數(shù)據(jù)永遠(yuǎn)地丟失了,你需要讓集群重連擁有丟失數(shù)據(jù)的節(jié)點,或者對丟失的數(shù)據(jù)重新建立索引。

停用節(jié)點:告訴集群不要再分配任何分片到某個或一組節(jié)點上。一旦運行了這個命令,Elasticsearch將待停用節(jié)點上的全部分片開始轉(zhuǎn)移到集群中的其他節(jié)點上。


四、升級Elasticsearch節(jié)點

輪流重啟是一種重啟集群的方式,它是為了在不犧牲數(shù)據(jù)可用性的前提下,升級一個節(jié)點或進(jìn)行非動態(tài)的配置修改。每次關(guān)閉一個節(jié)點,而無需關(guān)閉整個集群。


五、擴(kuò)展策略

通常來說,規(guī)劃生產(chǎn)環(huán)境的Elasticsearch集群至少有三件事情需要考慮:過度分片、將數(shù)據(jù)切分為索引和分片、最大化吞吐量

1.過度分片

? ? over-sharding是指你有意地為索引創(chuàng)建大量分片,用于未來增加節(jié)點的過程。Elasticsearch管理每個分片都隱含著額外的開銷,每個分片都是完整的Lucene索引,它需要為索引的每個分段創(chuàng)建一些文件描述符,增加相應(yīng)的內(nèi)存開銷。如果為索引創(chuàng)建了過多的分片,可能會占用了本來支撐性能的內(nèi)存嗎,或者觸及機(jī)器文件描述符或內(nèi)存的極限。Elasticsearch選擇的默認(rèn)設(shè)置是5個分片。

2.將數(shù)據(jù)切分為索引和分片

? ? 現(xiàn)在并沒有方法讓我們增加或減少某個索引中的主分片數(shù)量,但是可以對數(shù)據(jù)進(jìn)行規(guī)劃,讓其橫跨多個索引。當(dāng)創(chuàng)建索引的時候,不要忘記由于每個索引有自己的分片,你的操作仍然會導(dǎo)致創(chuàng)建分片的負(fù)載,所以請確保不要使用過多的索引來創(chuàng)建過多的分片,不要占用處理請求的資源。

3.最大化吞吐量

? ? 加速索引的一個方法是臨時地減少集群中副本文件的數(shù)量。索引數(shù)據(jù)的時候,默認(rèn)情況下,在數(shù)據(jù)更新到主分片和所有副本分片之前,請求是不會完成的。所以在索引的階段將副本分片的數(shù)量減少到1甚至是0是有利的,然后在集中索引階段結(jié)束后將這個數(shù)量重新增加為1或者多個。搜索的時候,通過加入更多的副本分片,搜索可以更快,這是因為無論是主分片還是副本分片都可以用于搜索。

額外的副本分片會處理搜索和聚集


六、路由

? ? ? ? 文檔時如何通過分片形式來定位的,這個過程被稱為路由。當(dāng)Elasticsearch散列文檔的ID時就會發(fā)生文檔的路由,來決定文檔應(yīng)該索引到那個分片中,這可以由你指定也可以讓Elasticsearch生成。路由也可以不使用文檔的ID,而使定制的數(shù)值進(jìn)行散列。

為什么使用路由?如果你根本就不使用路由,Elasticsearch將確保你的文檔以均衡的方式分布在所有不同的分片中,那為什么還需要使用路由?定制路由允許你將分享同一個路由值的多篇文檔歸集到單個分片中,而一旦這些文檔放入到同一個索引,就可以路由某些查詢,讓他們可以在索引分片的子集中執(zhí)行。

路由策略需要在兩個方面下功夫:在你索引文檔的時候挑選合適的路由值,以及在執(zhí)行查詢的時候重用這些值。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容