我有许多(10+) Elasticsearch集群,这些集群用于不同的目的(存储日志,存储一些业务和分析数据),例如我有一个3节点的elasticsearch集群用于一些业务数据(用户在电子商务网站上的购物车),我每天拍摄快照,这个集群将快照制作到NFS,管理员告诉我必须从快照存储库中清除最后10个快照以释放磁盘空间。例如,某人/或我不小心启动了curl -XDELETE/*
,它删除了我的集群中的所有索引,而我必须恢复这里的所有业务数据,而我在过去的10天中只有10个快照,我可以恢复所有数据吗?或者它仅从上次快照日期恢复数据?因为文档中说Snapshots are incremental: each snapshot only stores data that is not part of an earlier snapshot
例如我网站中的客户Joe在2020年1月9日向购物车添加了一些东西,然后在2020年9月15日我从集群中删除了所有数据,而我在快照存储库中的最后一个快照是/03/09/2020,所以如果我从这个快照恢复,这个快照是否会包含旧数据?对不起,我的英语不好
发布于 2020-10-23 19:39:31
理解这一点的一个有趣的测试是执行以下过程:
删除第一个快照创建索引document
>H113删除快照B
你觉得第一份文件不见了吗?让我们来找出...以下是重现上述过程的所有步骤:
# 1. create an index
PUT test
# 2. index one document
PUT test/_doc/1
{
"id": 1
}
# 3. create a first snapshot A
PUT /_snapshot/my-snapshots/snapshot_a?wait_for_completion=true
{
"indices": "test",
"ignore_unavailable": true,
"include_global_state": false
}
# 4. index a second document
PUT test/_doc/2
{
"id": 2
}
# 5. create a second snapshot B
PUT /_snapshot/my-snapshots/snapshot_b?wait_for_completion=true
{
"indices": "test",
"ignore_unavailable": true,
"include_global_state": false
}
# 6. delete the first snapshot A
DELETE /_snapshot/my-snapshots/snapshot_a
# 7. delete the index
DELETE test
# 8. restore the snapshot B
POST /_snapshot/found-snapshots/snapshot_b/_restore
# 9. And now check the content of the index
GET test/_search
=>
"hits" : [
{
"_index" : "test",
"_type" : "_doc",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"id" : 1
}
},
{
"_index" : "test",
"_type" : "_doc",
"_id" : "2",
"_score" : 1.0,
"_source" : {
"id" : 2
}
}
]
因此,底线是旧的文档仍然包含在新的快照中,删除旧的快照并不意味着删除旧的文档。
快照包含创建快照时存在的所有分片段文件的精确副本。随着时间的推移,较小的分段文件将获得merged into bigger ones。当下一次快照发生时,它将复制较新的较大段文件,而较旧的快照仍将包含较旧的较小段文件。
然而,这并不意味着只保留最新的快照并认为所有数据都在其中总是安全的,但如果您进行每日快照,我认为只保留最后10个快照并期望所有数据都在那里是安全的。
最后一件值得注意的事情是,当你delete a snapshot时,ES会删除所有与快照相关的文件,这些文件是没有被其他快照使用的,这基本上使得删除快照本质上是安全的。
发布于 2020-11-25 17:28:40
Elasticsearch快照是集群数据的精确副本,与create snapshot触发时的副本完全相同。
因此,如果您恢复在2020年3月9日拍摄的快照将包含群集的旧data.The内容,则恢复快照后将与您在2020年3月9日触发创建快照时的内容完全相同
您提出了多个问题,让我试着逐一回答它们:
Q1.我的管理员告诉我,我必须从快照存储库中清除最后10个快照,以释放磁盘空间。例如,某人/或我不小心启动了curl -XDELETE/*,这将删除我的集群中的所有索引,而我必须恢复这里的所有业务数据,而我在过去的10天中只有10个快照,我可以恢复所有数据吗?
A1。如果您删除了所有10个可用快照,那么您的存储库中将没有任何快照。由于您的存储库中没有任何快照,因此您将无法恢复。为了从快照恢复,您必须在存储库中具有快照。您可以按GET /_cat/snapshots/<repository>
检查存储库中可用快照的列表
Q2.它是否仅从上次快照日期恢复数据?
A2。No。无论您尝试从哪个快照还原,如果该快照存在于您的存储库中,则它将从给定的快照恢复数据。如果是完全集群恢复,那么,正如我前面提到的,集群的内容将与您触发创建快照时的内容完全相同。
Q3.例如,我的网站中的客户Joe在2020年1月9日向购物车添加了一些内容,然后在2020年9月15日删除了群集中的所有数据,而快照存储库中的最后一个快照是/03/09/2020,因此如果我从此快照恢复,此快照是否将包含旧数据?
A3。是,此快照也将包含2020年1月9日的旧数据,因为当您在2020年3月9日创建快照时,集群中存在2020年9月1日的数据。
https://stackoverflow.com/questions/64498925
复制相似问题