ElasticStack系列之二十 & 數據均衡、遷移、冷熱分離以及節點自動發現原理與機制
阿新 • • 發佈:2018-12-26
ast last 分片 其他 balance 磁盤使用 觸發 bsp 提前
1. 數據均衡
某個shard分配到哪個節點上,一般來說,是由 ELasticSearch 自行決定的。以下幾種情況會觸發分配動作:
- 新索引的建立
- 索引的刪除
- 新增副本分片
- 節點增減引發的數據均衡
在動態分配的時候有幾個默認值需要註意,當然對應的這些默認值都是可以修改的,具體如下:
- ElasticSearch 默認要求所有分片都正常啟動成功以後,才可以進行數據均衡操作,否則的話,在集群重啟階段,會浪費太多的流量
- ElasticSearch 默認可以有 2 個任務同時運行數據均衡。如果有節點增減且集群壓力不高的情況下,可以適當增大(可通過 cluster.routing.alloction.cluster_concurrent_rebalance 參數來控制)
- ElasticSearch 默認可以有 2 個任務同時運行數據恢復操作,前提是除了主分片重啟恢復以外的情況下。所以,節點重啟時,可以看到主分片迅速恢復完成,副本分片的恢復卻很慢。除了副本分片本身數據要通過網絡復制以外,並發線程本身也減少一半(默認同時又4個主分片恢復)。當然這種設置也是有道理的--> 主分片一定是本地恢復,副本分片卻需要走網絡,帶寬是有限的。
- ElasticSearch 默認當數據磁盤使用量占當前磁盤總空間的 85% 時,新索引分片就不會再分配到這個節點上了。在達到 90% 時,就會觸發該節點現存分片的數據均衡,把數據挪到其他節點上去。
2. reroute 接口應用(數據遷移)
reroute 接口支持三種指令:allocate、move 和 cancel,我們最常用的就是 allocate 和 move 指令。
allocate 指令:
因為負載過高等原因,有時候個別分片可能長期處於 unassigned 狀態,我們就可以手動分配到指定節點上。默認情況下不允許手動分配副本分片,所以如果是 主分片 故障,我們需要單獨加一個 allow_primary 選項:
註意:
如果是歷史數據的話,需要提前確認一下哪個節點上保留有這個分片的實際目錄,且目錄大小最大,然後手動分配到這個節點上,以此來減少數據的丟失。
move 指令:
因為負載過高,磁盤利用率過高,服務器需要下線,更換磁盤等情況。我們此時需要從該節點一走部分分片數據到其他節點上,那麽 move 指令就很有用了:
3. 冷熱數據讀寫分離
4. 節點自動發現原理與機制
ElasticStack系列之二十 & 數據均衡、遷移、冷熱分離以及節點自動發現原理與機制