Elasticsearch从不完成索引

我想将我的ES实例从一台服务器迁移到另一台服务器(以及所有的数据)。

所以, 在快照/恢复api之后 ,我创build了旧服务器上的数据快照, scp其添加到新服务器,在新服务器上启动ES实例,恢复快照,然后重新启动ES新的服务器。

问题是ES从不完成索引。 处理大约10个指数(我有大约300多个指数)后, red指数的数量保持不变,

注意,新的ES实例在新服务器上的docker上运行,旧的ES实例本地安装在旧的服务器上。

这非常愚蠢,但在ES快照/恢复文档中没有真正logging。

在我调用/_snapshot/my_backup/snapshot_1/_restore来恢复新服务器上的快照后 ,所有的索引都显示为yellow状态。 所以我想我必须停止ES,并重新启动它,迫使它重新索引。

那么,事实并非如此。 一旦你调用_restore上的_restore ,它将开始索引数据,并且不会立即完成,即使所有索引状态都是yellow

结果,当我调用_restore后杀死了我的ES实例时,实际上只有一些索引被恢复了(也就是说,当我调用_restore和杀死它时,索引ES有时间处理)。 当ES开始备份时,它只能重新索引那些有时间处理的指数(而其余的我认为是损坏的)。


所以解决办法很简单:删除我所有的数据,启动ES,调用快照_restore端点,然后耐心等待ES完成恢复


我可以用这个命令监视快照恢复的进度:

curl -XGET 'localhost:9200/_cat/indices?v&pretty' | egrep "(k|m)b" | sort | wc -l

一旦这个数字达到0,我很高兴(因为我喜欢有序的事情)。

事后看来,这个解决scheme是显而易见的。