1. 程式人生 > >ElasticStack系列之二十 & 資料均衡、遷移、冷熱分離以及節點自動發現原理與機制

ElasticStack系列之二十 & 資料均衡、遷移、冷熱分離以及節點自動發現原理與機制

1. 資料均衡

  某個shard分配到哪個節點上,一般來說,是由 ELasticSearch 自行決定的。以下幾種情況會觸發分配動作:

  • 新索引的建立
  • 索引的刪除
  • 新增副本分片
  • 節點增減引發的資料均衡

  在動態分配的時候有幾個預設值需要注意,當然對應的這些預設值都是可以修改的,具體如下:

  1. ElasticSearch 預設要求所有分片都正常啟動成功以後,才可以進行資料均衡操作,否則的話,在叢集重啟階段,會浪費太多的流量
  2. ElasticSearch 預設可以有 2 個任務同時執行資料均衡。如果有節點增減且叢集壓力不高的情況下,可以適當增大(可通過 cluster.routing.alloction.cluster_concurrent_rebalance 引數來控制)
  3. ElasticSearch 預設可以有 2 個任務同時執行資料恢復操作,前提是除了主分片重啟恢復以外的情況下。所以,節點重啟時,可以看到主分片迅速恢復完成,副本分片的恢復卻很慢。除了副本分片本身資料要通過網路複製以外,併發執行緒本身也減少一半(默認同時又4個主分片恢復)。當然這種設定也是有道理的--> 主分片一定是本地恢復,副本分片卻需要走網路,頻寬是有限的。
  4. ElasticSearch 預設當資料磁碟使用量佔當前磁碟總空間的 85% 時,新索引分片就不會再分配到這個節點上了。在達到 90% 時,就會觸發該節點現存分片的資料均衡,把資料挪到其他節點上去。

2. reroute 介面應用(資料遷移)

  reroute 介面支援三種指令:allocate、move 和 cancel,我們最常用的就是 allocate 和 move 指令。

  allocate 指令:

    因為負載過高等原因,有時候個別分片可能長期處於 unassigned 狀態,我們就可以手動分配到指定節點上。預設情況下不允許手動分配副本分片,所以如果是 主分片 故障,我們需要單獨加一個 allow_primary 選項:

  

  注意:

    如果是歷史資料的話,需要提前確認一下哪個節點上保留有這個分片的實際目錄,且目錄大小最大,然後手動分配到這個節點上,以此來減少資料的丟失。

  move 指令:

    因為負載過高,磁碟利用率過高,伺服器需要下線,更換磁碟等情況。我們此時需要從該節點一走部分分片資料到其他節點上,那麼 move 指令就很有用了:

 

3. 冷熱資料讀寫分離

 

 

4. 節點自動發現原理與機制