ElasticSearch重啟之後shard未分配問題的解決
環境:
- Ubuntu16.04
- elasticsearch 6.2.3
- 3個master節點,10個data節點
- 每個分片有一個副本
故障:
將一個數據節點的elasticsearch換成docker elasticsearch,分詞器沒有新增到plugins中。隨後把分詞器新增到plugins中後,發現有的分片沒有被分配,但是ES叢集啟動正常,只不過一直是yellow狀態。而且unassigned分片一直未被分配。
解決辦法
首先執行:GET user/_recovery?active_only=true
發現叢集並沒有進行副本恢復。
點選未進行分配的分片,發現allocation_status: "no_attempt"
原因是:shard 自動分配 已經達到最大重試次數5次,仍然失敗了,所以導致"shard的分配狀態已經是:no_attempt"。這時在Kibana Dev Tools,執行命令:POST /_cluster/reroute?retry_failed=true
即可。由index.allocation.max_retries
引數來控制最大重試次數。
The cluster will attempt to allocate a shard a maximum of index.allocation.max_retries times in a row (defaults to 5), before giving up and leaving the shard unallocated.
當執行reroute
命令對分片重新路由後,ElasticSearch會自動進行負載均衡,負載均衡引數cluster.routing.rebalance.enable
預設為true。
It is important to note that after processing any reroute commands Elasticsearch will perform rebalancing as normal (respecting the values of settings such as cluster.routing.rebalance.enable) in order to remain in a balanced