我想将我的ES实例从一台服务器迁移到另一台服务器(以及所有数据)。
因此,在the snapshot / restore api之后,我创建了旧服务器上的数据快照,scp
&#d;它到新服务器,在新服务器上启动了ES实例,恢复快照,并在新服务器上重新启动ES。
问题是ES永远不会完成索引。在处理了大约10个指数(我有大约300多个指数)之后,red
指数的数量仍然是固定的
旁注,新的ES实例正在新服务器上的docker上运行,旧的ES实例本身安装在旧服务器上。
答案 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
因为我喜欢有条不紊的事情)。
事后看来,这个解决方案非常明显......