Elasticsearch永远不会完成索引

时间:2017-07-19 23:25:51

标签: elasticsearch docker

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

因此,在the snapshot / restore api之后,我创建了旧服务器上的数据快照,scp&#d;它到新服务器,在新服务器上启动了ES实例,恢复快照,并在新服务器上重新启动ES。

问题是ES永远不会完成索引。在处理了大约10个指数(我有大约300多个指数)之后,red指数的数量仍然是固定的

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

1 个答案:

答案 0 :(得分:0)

这太愚蠢了,但在ES快照/恢复文档中并没有真正记录。

在新服务器上I called /_snapshot/my_backup/snapshot_1/_restore to restore my snapshot之后,所有索引都显示为yellow状态。所以我想我必须停止ES并重新启动它以强制它重新索引。

嗯,事实并非如此。在实例上调用_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,我就很高兴(sort因为我喜欢有条不紊的事情)。

事后看来,这个解决方案非常明显......