2017-07-19 93 views
0

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

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

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

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

+0

运行下面的命令时,你明白了什么:'卷曲-XGET本地主机:9200/_cat /指数/ v'和'卷曲-XGET本地主机:9200/_cat/recovery /?v'和'curl -XGET localhost:9200/_cat/allocation /?v'? – Val

回答

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,因为我喜欢的东西井然有序)。

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