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命令就行了。