當您的業務處於流量低峰期或叢集中的資料量減少時,可通過Elasticsearch的資料節點縮容功能,減少叢集中資料節點的數量。本文介紹如何縮容叢集中的資料節點。
前提條件
在Kibana控制台執行以下命令,檢查叢集中是否存在狀態為close的索引。如果存在,需要將對應索引的狀態暫時設定為open,否則變更不成功。
查看索引狀態
GET /_cat/indices?v
將close狀態的索引暫時設定為open狀態
POST /<index_name>/_open
<index_name>需要替換為狀態為close的索引名稱。
注意事項
縮容叢集資料節點操作會觸發叢集重啟,叢集變更後重啟實際時間長度與叢集規模、資料量及負載情況等有關係,建議在低峰期操作。
如果叢集索引存在副本分區且叢集負載處於正常水平(CPU使用率在60%左右,堆記憶體使用量率在50%左右,load_1m低於CPU核心數),一般情況下,在叢集重啟過程中可持續對外提供服務。
Elasticsearch分區高可用要求備份分區和主分區不能分布在同一節點上。對於單可用性區域執行個體,過多的分區數可能會影響變更,建議副本分區數小於縮容後資料節點個數-1或副本設定為1。對於多可用性區域執行個體,在變更時,需要確保叢集中任意一個索引的副本數都小於可用性區域數。待變更完成後,您可以根據業務手動增加副本數。詳細資料請參見索引模板。
如果叢集負載過高且索引沒有副本,同時在縮容過程中存在大量寫入或查詢等情況,在縮容過程中可能會出現訪問逾時的問題。建議在縮容前,在用戶端中配置好重試機制,減小對業務的影響。
縮容資料節點
- 登入Elasticsearch控制台。
- 在左側導覽列,單擊Elasticsearch執行個體。
- 進入目標執行個體。
- 在頂部功能表列處,選擇資源群組和地區。
- 在Elasticsearch執行個體中單擊目標執行個體ID。
在基本資料頁面,選擇 。
在縮容配置地區,選擇節點類型和縮節點個數。
縮容資料節點選擇:
支援智能選擇節點。
校正通過後,單擊確定,系統自動進行待下線節點的資料搬遷和節點下線。
說明如果校正不通過,您需要根據頁面提示處理異常結果,處理後再重新進行縮容操作。
支援使用者自訂選擇節點。具體操作如下:
在節點列表中單擊選擇需要縮減的資料節點。
選擇後,Elasticsearch會對待縮容的節點進行校正。如果校正不通過,您需要根據頁面提示處理異常結果,處理後再重新進行縮容操作。
檢查項
正常狀態
叢集健康狀態
叢集狀態正常(綠色)。
索引的allocation配置
allocation配置為all,即
cluster.routing.allocation.enable: all
,表示允許將所有類型的分區分配到對應節點上。索引的副本分布
不同副本分布在不同節點上。
縮容後,執行個體的剩餘節點數
大於等於2。對於多可用性區域執行個體,還需確保每個可用性區域節點數大於等於2,且每個可用性區域剩餘節點數相同。
資料移轉的目標節點的磁碟大小
縮容時,如果需要進行資料移轉,遷移後節點的磁碟使用率不超過75%。
資料移轉的目標節點的記憶體
縮容時,如果需要進行資料移轉,遷移後節點的記憶體使用量率不超過70%。
節點的shard個數
被縮容節點的shard個數為0。
遷移資料。
為保證資料的安全,進行縮容的資料節點中不應該存在資料。如果所選資料節點中有資料,系統會提示您進行資料移轉。遷移後所選節點上不再有任何索引資料,新的索引資料也不會被寫入該節點。
單擊提示欄中的資料移轉協助工具輔助。
資料移轉協助工具輔助通過Elasticsearch分區過濾器實現資料平滑遷移,資料移轉過程業務無感知。
在叢集資料節點遷移對話方塊,選擇節點遷移方式。
參數
說明
系統建議
通過系統建議自動選擇需要遷移的資料節點。
自訂
手動選擇需要遷移的資料節點。
選中資料移轉協議,單擊確認。
確認後,叢集會進行重啟。重啟時,可在工作清單中查看資料移轉任務的進度,重啟成功後,即可完成叢集中對應資料節點的資料移轉任務。
說明資料移轉過程中,可以在工作清單中單擊中斷變更,停止遷移任務。
在執行個體的基本資料頁面,再次選擇 。
在縮容配置地區,選擇已經完成資料移轉的節點,單擊確定。
縮容時叢集會進行重啟。可在工作清單中查看縮容任務的進度,重啟成功後,即可完成叢集資料節點的縮容。
遷移復原
資料移轉是一個周期很長的過程,在此期間叢集狀態和資料的變更可能會導致遷移失敗,具體可在工作清單中查看。當資料移轉失敗或者遷移完成後,可通過以下步驟對遷移節點進行復原:
- 登入目標Elasticsearch執行個體的Kibana控制台,根據頁面提示進入Kibana首頁。登入Kibana控制台的具體操作,請參見登入Kibana控制台。說明 本文以Elasticsearch 6.7.0版本為例,其他版本操作可能略有差別,請以實際介面為準。
- 在左側導覽列,單擊Dev Tools。
在Console中執行以下命令,擷取遷移節點的IP地址。
GET _cluster/settings
執行成功後,返回如下結果。
{ "transient": { "cluster": { "routing": { "allocation": { "exclude": { "_ip": "192.168.xx.xx,192.168.xx.xx,192.168.xx.xx" } } } } } }
執行以下命令,復原遷移節點資料。
復原部分節點資料。配置中要去掉需要復原的節點,但要保留不復原的節點。
PUT _cluster/settings { "transient": { "cluster": { "routing": { "allocation": { "exclude": { "_ip": "192.168.xx.xx,192.168.xx.xx" } } } } } }
復原全部節點資料。
PUT _cluster/settings { "transient": { "cluster": { "routing": { "allocation": { "exclude": { "_ip": null } } } } } }
執行以下命令,校正是否完成資料復原。
GET _cluster/settings
執行成功後,如果返回結果中不包含遷移節點的IP地址,則表示已經完成該節點的遷移復原任務。您也可以通過觀察相應節點是否被重新分配shard來判斷。
說明資料移轉或復原時,均可以通過
GET _cat/shards?v
命令查看任務狀態。