我希望将ES实例从一台服务器迁移到另一台服务器(以及所有数据)。
因此,在the snapshot / restore api之后,我在旧服务器上创建了数据的快照,将其scp'd到新服务器,在新服务器上启动ES的实例,恢复快照,然后在新服务器上重新启动ES。
问题是ES永远不会完成索引。在处理了大约10个索引之后,red索引的数量保持不变(我有大约300+索引)
附注:新的ES实例运行在新服务器上的docker上,而旧的ES实例本地安装在旧的服务器上。
发布于 2017-07-20 20:08:39
这太愚蠢了,但在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完成应用restore。
我可以使用以下命令监视快照恢复的进度:
curl -XGET 'localhost:9200/_cat/indices?v&pretty' | egrep "(k|m)b" | sort | wc -l
一旦这个数字达到0,我就可以开始工作了(sort,因为我喜欢有序的东西)。
事后看来,这个解决方案是显而易见的……
https://stackoverflow.com/questions/45202648
复制相似问题