使用合并功能恢复 Elasticsearch 快照

使用合并功能恢复 Elasticsearch 快照

我正在尝试使用 Elasticsearch 进行数据备份和恢复。

我可以使用策展人将数据备份到快照中,没有任何问题。

然后我物理删除与索引相关的文件(以某种方式模拟高清崩溃等)

我重新启动 Elasticsearch 并在 Kibana 中验证数据不再存在。

如果我随后去恢复我制作的最新快照;那么在最后一个快照和我执行恢复的时间之间存储在 Elasticsearch 中的所有数据都将丢失。

快照的恢复似乎没有与索引中的较新数据合并,而且我在网上找不到有关此问题的任何参考资料,但恢复备份肯定不会丢弃较新的数据,我一定是遗漏了一些东西?

总结一下:

备份目录中我的快照示例:

snapshot-curator-20150830191221
snapshot-curator-20150901225612
snapshot-curator-20150902090327

它是由以下命令生成的:

curator snapshot --repository es_backup indices --all-indices

然后我删除特定日期的索引的文件:

rm -rf /mnt/storage/var/lib/elasticsearch/elasticsearch/nodes/0/indices/logstash-production-media-2015.09.02

重新启动 Elasticsearch(我最初没有这样做,数据一直还在那里,似乎 Java 或机器缓冲区保存了数据,而 Elasticsearch 没有意识到它已经消失了!)

验证 Kibana 中日期数据是否全部消失。

关闭所有指数:

curator close indices --all-indices

恢复最新的快照:

curl -XPOST http://localhost:9200/_snapshot/es_backup/curator-20150729133045/_restore

在 Kibana 中查看时,已删除的数据又回来了,但是在拍摄快照和恢复时间之间放入 elasticsearch 的任何数据都消失了。

例如,最后一次快照是在上午 10 点拍摄的。恢复时间为下午 1 点。恢复后,上午 10 点到下午 1 点之间的数据将消失。

那么我做错了什么?如何合并自上次拍摄快照以来存储在 Elasticsearch 中的当前较新数据进行恢复?

谢谢!

答案1

嗯,不幸的是,合并似乎是不可能的。

当我在这里没有收到任何回复时,我也在 E​​S 论坛上发布了这个问题的答案:

https://discuss.elastic.co/t/restore-from-backup-and-merge-with-newer-data/28760

快照是数据在某个时间点的副本。恢复时,可以将数据恢复到该时间点。

目前还没有办法进行这样的合并。

一个建议是恢复到不同的索引名称,然后使用指向两个索引的别名进行搜索,这可能是一个可行的方法,但我认为这会导致返回重复的数据进行搜索。

也许解决方案是拥有 2 个节点,每个节点都有一份数据副本,尽管大型数据存储显然会占用更多空间。

相关内容