1. 程式人生 > >elasticsearch節點脫離叢集 分片控制

elasticsearch節點脫離叢集 分片控制

第一次開部落格,不知道可以寫什麼,先記錄一下ES的分片分配的其中一個過程吧

這個功能,首先我自己覺得非常不錯,也許是因為我在生產環境用的版本太低了導致無法配置而產生了對這個功能的一些愛慕之情。23333333

嗯,先介紹一下我遇到的情況。
每次對ES服務進行重啟時,叢集總是會進行一次Rebalancing操作,而這一次操作因為叢集裡資料量的問題導致時間過長。時間長還沒關係因為master會把重啟的節點的主分片的副本分片提升為主分片所以並不會對叢集有什麼影響,但主要還是浪費了這一次操作,完全沒有必要。我想要的就是重啟一個節點的時候,延遲分配分片。

接下來看看官網的介紹

當叢集節點脫離叢集的時候會有以下動作產生:
1. master將離開節點包含的所有主分片的副本分片提升為主分片
2. 假如有足夠的節點將把所有丟失的副本分片重新分配到叢集中的其他節點中
3. Rebalancing操作

以上的Rebalancing操作會帶來很大開銷,如果節點離開後馬上又回來(如網路不好,重啟等),在這個短時間內會進行兩次Rebalancing操作。這是何等的無賴,對吧

怎麼設定延遲分配呢?

index.unassigned.node_left.delayed_timeout
通過這個引數控制延遲多長時間後才開始分配unassigned的分片

也可以通過setting api進行設定:

PUT /_all/_settings
{
  "settings": {
    "index.unassigned.node_left.delayed_timeout": "5m"
} }

當設定了延遲分配後,當節點離開叢集時的動作如下:
1. master將離開節點包含的所有主分片的副本分片提升為主分片
2. Master記錄日誌,(delaying allocation for [3] unassigned shards, next check in [5m])
3. 叢集狀態還是黃色,因為有分片還沒有被分配(但是不影響查詢寫入)
4. 節點在延遲時間內返回,直接開啟副本分片
4. 節點超時返回,叢集將unassigned的副本分片進行分配,然後進行一次Rebalancing操作。

如果想立即恢復,可以把引數值設定為0。

以上內容中加入了自己的理解,如有錯誤請大神指點糾正。謝謝