一、節點退役
當集群中個別節點出現故障預警等情況,需要進行退役工作,即讓所有位於該退役節點上的分片的數據分配到其他節點上后,再將此節點關閉並從集群中移除。
1、ES提供了讓某個節點上所有數據都移走的功能如下:
ElasticSearch集群就會自動把這個節點上的所有分片,都自動轉移到其他節點上,等到轉移完成,這個空節點就可以毫無影響的下線。
curl -XPUT 127.0.0.1:9200/_cluster/settings -d '{ "transient" :{ "cluster.routing.allocation.exclude._ip" : "10.0.0.1" } }'
2、當shard都遷移走后,就可以將此機器上的ES進程關閉
3、可以在管理頁面上刪除此節點的ES服務角
二、在節點退役過程中遇到的坑
退役search server 節點時,在頁面上進行刪除該節點后,replia不為0的index恢復過來,但是導致副本為0的index未能進行shard的分配,導致search始終是red狀態。
方式一:跟客戶確認該未成功分配分片的索引有沒有用,沒用就直接刪除即可。
方式二:
1、查看ES集群的健康狀況
curl -XGET http://localhost:9200/_cluster/health\?pretty
2、*****************************開始修復************************************
2.1查找未分配的分配
curl -s "http://localhost:9200/_cat/shards" | grep UNASSIGNED
2.3執行reroute(分多次,逐個修復 變更shard的值為UNASSIGNED查詢結果中編號, 上一步查詢結果是1 4)
將沒有成功分配的shard,進行手動遷移到目標節點:
curl -XPOST 'localhost:9200/_cluster/reroute' -d '{ "commands" : [ { "allocate" : { "index" : "rs_wx_test",#unsigned 的索引 "shard" : 1,#出現unsigned的切片編號 "node" : "AfUyuXmGTESHXpwi4OExxx",#目標節點 "allow_primary" : true } } ] }'
方式三:增加節點數或者減少副本數:
這里選擇減少副本數為為例:
curl -H "Content-Type: application/json" -XPUT 'localhost:9200/employee/_settings?pretty' -d '{ "number_of_replicas": 1 #以前副本數為2的時候出現了shards unsigned,現將副本數設置為1,恢復正常 }'