Elasticsearch筆記八之腦裂

概述:

  一個正常es集羣中只有一個主節點,主節點負責管理整個集羣,集羣的所有節點都會選擇同一個節點作爲主節點所以無論訪問那個節點都可以查看集羣的狀態信息。 而腦裂問題的出現就是因爲從節點在選擇主節點上出現分歧導致一個集羣出現多個主節點從而使集羣分裂,使得集羣處於異常狀態。

 一般es集羣會在內網部署,也可能在外網部署比如阿里雲。

原因:

1:網絡原因

內網一般不會出現此問題,可以監控內網流量狀態。外網的網絡出現問題的可能性大些。

2:節點負載

         主節點即負責管理集羣又要存儲數據,當訪問量大時可能會導致es實例反應不過來而停止響應,此時其他節點在向主節點發送消息時得不到主節點的響應就會認爲主節點掛了,從而重新選擇主節點。

3:回收內存

         大規模回收內存時也會導致es集羣失去響應。

 

所以內網負載的可能性大,外網網絡的可能性大。

預防方案:

1:角色分離

         在es集羣中配置2到3個主節點並且讓它們只負責管理不負責存儲,從節點只負責存儲。另外從節點禁用自動發現機制併爲其指定主節點,在elasticsearch.yml文件中。

主節點:node.master =true   node.data=false

從節點:node.master =false   node.data=ture

         discovery.zen.ping.multicast.enabled:false 

         discovery.zen.ping.unicast.hosts:["host1", "host2:port"]

  

 

2:參數配置

        discovery.zen.ping_timeout:3

       此參數指定從節點訪問主節點後如果3秒之內沒有回覆則默認主節點掛了,我們可以適當的把它改大,改成56秒這樣可以減少出現腦裂的概率。

       discovery.zen.minimum_master_nodes:1

       該參數的意思是,當具備成爲主節點的從節點的個數滿足這個數字且都認爲主節點掛了則會進行選舉產生新的主節點。

       例如:es集羣有三個從節點有資格成爲主節點,這時這三個節點都認爲主節點掛了則會進行選舉,此時如果這個參數的值是4則不會進行選舉。

       我們可以適當的把這個值改大,減少出現腦裂的概率,官方給出的建議是(n/2)+1,n爲有資格成爲主節點的節點數node.master=true

解決方案:

1:如果有原始數據,建議重新創建索引。

2:將es集羣關閉,每次只啓動一個節點然後查看節點上的數據是否完整關鍵,找到數據最完整的那個節點先啓動它,再啓動其他節點,其他節點可先備份data目錄後再刪除data。

         因爲一般情況下es集羣中最先啓動的節點會成爲主節點,而主節點會被默認爲數據最全,後續啓動的節點會根據主節點的分片來進行同步,所以我們找到數據最全的節點第一個啓動它並以此節點爲主節點儘量恢復數據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章