中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何防止elasticsearch的腦裂問題

發布時間:2021-12-09 11:34:00 來源:億速云 閱讀:380 作者:柒染 欄目:大數據

如何防止elasticsearch的腦裂問題,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

什么是腦裂?

讓我們看一個有兩個節點的elasticsearch集群的簡單情況。集群維護一個單個索引并有一個分片和一個復制節點。節點1在啟動時被選舉為主節點并保存主分片(在下面的schema里標記為0P),而節點2保存復制分片(0R

如何防止elasticsearch的腦裂問題
現在,如果在兩個節點之間的通訊中斷了,會發生什么?由于網絡問題或只是因為其中一個節點無響應(例如stop-the-world垃圾回收),這是有可能發生的。

如何防止elasticsearch的腦裂問題

兩個節點都相信對方已經掛了。節點1不需要做什么,因為它本來就被選舉為主節點。但是節點2會自動選舉它自己為主節點,因為它相信集群的一部分沒有主節點了。在elasticsearch集群,是有主節點來決定將分片平均的分布到節點上的。節點2保存的是復制分片,但它相信主節點不可用了。所以它會自動提升復制節點為主節點。
如何防止elasticsearch的腦裂問題

現在我們的集群在一個不一致的狀態了。打在節點1上的索引請求會將索引數據分配在主節點,同時打在節點2的請求會將索引數據放在分片上。在這種情況下,分片的兩份數據分開了,如果不做一個全量的重索引很難對它們進行重排序。在更壞的情況下,一個對集群無感知的索引客戶端(例如,使用REST接口的),這個問題非常透明難以發現,無論哪個節點被命中索引請求仍然在每次都會成功完成。問題只有在搜索數據時才會被隱約發現:取決于搜索請求命中了哪個節點,結果都會不同。

如何避免腦裂問題

elasticsearch的默認配置很好。但是elasticsearch項目組不可能知道你的特定場景里的所有細節。這就是為什么某些配置參數需要改成適合你的需求的原因。這篇博文里所有提到的參數都可以在你elasticsearch安裝地址的config目錄中的elasticsearch.yml中更改。

要預防腦裂問題,我們需要看的一個參數就是 discovery.zen.minimum_master_nodes。這個參數決定了在選主過程中需要 有多少個節點通信。缺省配置是1.一個基本的原則是這里需要設置成 N/2+1, N是集群中節點的數量。例如在一個三節點的集群中, minimum_master_nodes應該被設為 3/2 + 1 = 2(四舍五入)。

讓我們想象下之前的情況下如果我們把 discovery.zen.minimum_master_nodes 設置成 2(2/2 + 1)。當兩個節點的通信失敗了,節點1會失去它的主狀態,同時節點2也不會被選舉為主。沒有一個節點會接受索引或搜索的請求,讓所有的客戶端馬上發現這個問題。而且沒有一個分片會處于不一致的狀態。

我們可以調的另一個參數是 discovery.zen.ping.timeout。它的默認值是3秒并且它用來決定一個節點在假設集群中的另一個節點響應失敗的情況時等待多久。在一個慢速網絡中將這個值調的大一點是個不錯的主意。這個參數不止適用于高網絡延遲,還能在一個節點超載響應很慢時起作用。

兩節點集群?

如果你覺得(或直覺上)在一個兩節點的集群中把minimum_master_nodes參數設成2是錯的,那就對了。在這種情況下如果一個節點掛了,那整個集群就都掛了。盡管這杜絕了腦裂的可能性,但這使elasticsearch另一個好特性 - 用復制分片來構建高可用性 失效了。

如果你剛開始使用elasticsearch,建議配置一個3節點集群。這樣你可以設置minimum_master_nodes為2,減少了腦裂的可能性,但仍然保持了高可用的優點:你可以承受一個節點失效但集群還是正常運行的。

但如果已經運行了一個兩節點elasticsearch集群怎么辦?可以選擇為了保持高可用而忍受腦裂的可能性,或者選擇為了防止腦裂而選擇高可用性。為了避免這種妥協,最好的選擇是給集群添加一個節點。這聽起來很極端,但并不是。對于每一個elasticsearch節點你可以設置 node.data 參數來選擇這個節點是否需要保存數據。缺省值是“true”,意思是默認每個elasticsearch節點同時也會作為一個數據節點。

在一個兩節點集群,你可以添加一個新節點并把 node.data 參數設置為“false”。這樣這個節點不會保存任何分片,但它仍然可以被選為主(默認行為)。因為這個節點是一個無數據節點,所以它可以放在一臺便宜服務器上。現在你就有了一個三節點的集群,可以安全的把minimum_master_nodes設置為2,避免腦裂而且仍然可以丟失一個節點并且不會丟失數據。

腦裂問題很難被徹底解決。在elasticsearch的問題列表里仍然有關于這個的問題, 描述了在一個極端情況下正確設置了minimum_master_nodes的參數時仍然產生了腦裂問題。elasticsearch項目組正在致力于開發一個選主算法的更好的實現,但如果你已經在運行elasticsearch集群了那么你需要知道這個潛在的問題。

如何盡快發現這個很重要。一個比較簡單的檢測問題的方式是,做一個對/_nodes下每個節點終端響應的定期檢查。這個終端返回一個所有集群節點狀態的短報告。如果有兩個節點報告了不同的集群列表,那么這是一個產生腦裂狀況的明顯標志。

關于如何防止elasticsearch的腦裂問題問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

靖江市| 农安县| 普洱| 深泽县| 黄骅市| 饶阳县| 剑河县| 吉林市| 开阳县| 津南区| 洪湖市| 葵青区| 岱山县| 兴宁市| 三亚市| 迁安市| 太仆寺旗| 婺源县| 龙南县| 资兴市| 南宁市| 祥云县| 德庆县| 开江县| 自贡市| 广丰县| 河西区| 玉田县| 麻江县| 灌阳县| 汽车| 贵定县| 汤原县| 北票市| 贡嘎县| 宝丰县| 喀什市| 江西省| 宜君县| 扶沟县| 沐川县|