ElasticSearch 5學習(7)——分布式集群學習分享2


前面主要學習了ElasticSearch分布式集群的存儲過程中集群、節點和分片的知識(ElasticSearch 5學習(6)——分布式集群學習分享1),下面主要分享應對故障的一些實踐。

應對故障

前面說了很多關於復制分片可以應對節點失效,很好保證集群的安全性,下面我們可以嘗試殺掉第一個節點的進程,我們的集群變化成如下(所有的操作都是ElasticSearch自動處理):

我們殺掉的節點是一個主節點。一個集群必須要有一個主節點才能使其功能正常,所以集群做的第一件事就是各節點選舉了一個新的主節點:Node 2。

主分片1和2在我們殺掉Node 1時已經丟失,我們的索引在丟失主分片時不能正常工作。如果此時我們檢查集群健康,我們將看到狀態red:不是所有主分片都可用!

幸運的是丟失的兩個主分片的完整拷貝存在於其他節點上,所以新主節點做的第一件事是把這些在Node 2和Node 3上的復制分片升級為主分片,這時集群健康回到yellow狀態。這個提升是瞬間完成的,就好像按了一下開關。

為什么集群健康狀態是yellow而不是green?我們有三個主分片,但是我們指定了每個主分片對應兩個復制分片,當前卻只有一個復制分片被分配,這就是集群狀態無法達到green的原因,不過不用太擔心這個:當我們殺掉Node 2,我們的程序依然可以在沒有丟失數據的情況下繼續運行,因為Node 3還有每個分片的拷貝。

如果我們重啟Node 1,集群將能夠重新分配丟失的復制分片,集群狀況與上一節的 圖5:增加number_of_replicas到2 類似。如果Node 1依舊有舊分片的拷貝,它將會嘗試再利用它們,它只會從主分片上復制在故障期間有數據變更的那一部分。

故障實踐1

上面是關於ElasticSearch在遇到故障時候的理論部分,下面我們開始實際操作。

查看目前集群狀態

我們回顧一下之前的blogs索引,在結束最后的狀態:

PUT /blogs
{
   "settings" : {
      "number_of_shards" : 3,    (主分片個數)
      "number_of_replicas" : 2,    (每個主分片的復制分片個數)
   }
}

切斷節點

為了模擬這種情況,在我們自己的電腦上,直接用kill命令即可:

查看集群的狀態

很正確,就是理論內容所描述中間會存在red的瞬間。

等·

等·

等·

可是等了半天,結果一直是red狀態的結果,這是為什么呢?注意看提示無法連接到http://localhost:9200,突然意識到,我們關閉的節點正好是9200端口的Node 1節點。所以我們需要修改kibana.yml配置文件的elasticsearch.url項:

再次查看集群的狀態

終於,可以看到我們想要的結果,ElasticSearch集群正如上面所說的重新選Node 2作為新的主節點:

我們還可以注意到集群的健康狀況從綠色變成了黃色,這是因為我們設置每個主節點2個復制分片,而現在還有一個復制節點處於不可用狀態。

故障實踐2

回顧之前的一個集群狀態,blogs索引只設置一個復制分片的情況下:

如果在這種情況下,我們把其中的任何一個節點關閉,會出現什么效果呢?我們分析看,至少我們關閉任何一個節點都能保所有的分片都還能存在。比如我們刪除Node 2節點,正常情況下,Node 2中的分片0作為主分片被刪除后,主節點會分配Node 1節點下復制分片0重新作為主分片0,而Node 2中的分片1本身是復制分片,直接刪除即可,但是ElasticSearch集群,除此之外還會不會有其他操作。那就是,從新在兩個節點中把所有的復制分片都置為可用。下面我們看結果:

首先我們看到的和我們前面分析的一樣,主節點會分配Node 1節點下復制分片0重新作為主分片0,但是也可以看到現在集群的健康狀況是黃色,因為存在復制節點處於不可用狀態。我們繼續等。。。:

終於我們可以看到,ElasticSearch集群確實會把所有的復制節點又都置為可用狀態,因為節點存在它不擁有的分片,就可以創建這個節點,最大程度的保證高可用性。

實踐注意點

在測試過程中,ElasticSearch集群確實可以幫助我們重新分配分片的狀態,但是需要注意的是,每次一個節點關閉的時候,集群需要一定的時間去管理,如果這時候我們很快的將兩個節點關閉,ElasticSearch集群將無法挽救回沒有主分片,也沒有復制分片的那些數據,所以測試的時候需要知道這一點。

不過這也反映我們在學習分享1中描述的,如果我們的復制節點足夠多的話,我們可以保證高可用的能力就卻強大,因為允許節點故障的次數更多,而且我們的節點故障以后,運維又可以將節點重啟,繼續斗爭!!!

總結

現在我們對分片如何使Elasticsearch可以水平擴展並保證數據安全有了一個清晰的認識。真正感受到Elasticsearch天生就是分布式的,確實很強大!

轉載請注明出處。
作者:wuxiwei
出處:http://www.cnblogs.com/wxw16/p/6188560.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM