我正在尝试使用 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
嗯,不幸的是,合并似乎是不可能的。
当我在这里没有收到任何回复时,我也在 ES 论坛上发布了这个问题的答案:
https://discuss.elastic.co/t/restore-from-backup-and-merge-with-newer-data/28760
快照是数据在某个时间点的副本。恢复时,可以将数据恢复到该时间点。
目前还没有办法进行这样的合并。
一个建议是恢复到不同的索引名称,然后使用指向两个索引的别名进行搜索,这可能是一个可行的方法,但我认为这会导致返回重复的数据进行搜索。
也许解决方案是拥有 2 个节点,每个节点都有一份数据副本,尽管大型数据存储显然会占用更多空间。