ES出現Unassigned shard時,通常使用如下指令進行恢複即可,這裡假設shard 3丢失。
POST _cluster/reroute
{
"commands": [
{
"allocate_stale_primary": {
"index": "my-index-name",
"shard": 3,
"node": "my-node-name",
"accept_data_loss": true
}
}
]
}
但是當恢複不能成功,且提示corruption(損壞),就會很惱火。這是我們隻需要進入es資料存儲目錄将corruption檔案删除即可(這可以使index恢複但是可能會丢失資料)。具體做法:
首先确定丢失的分片在哪個節點上,進入該節點的存儲目錄,我這裡是/data/esdb/nodes/0/indices/SR46ul8LT7eXZpIYuyzAdA/index。
檢視目錄中的檔案,把以corrupted_開頭的檔案(例如corrupted_TkF78pmmSRWY0ccHuwsvvA)删除(或者移動到其它地方備份),然後再執行開頭的_cluster/reroute指令就行了。