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是显而易见的。