簡體   English   中英

Elasticsearch 快照

[英]Elasticsearch snapshots

我有很多(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 日向購物車添加了一些東西,然后在 15 年 9 月/ 2020 我從集群中刪除了所有數據,我在快照存儲庫中的最后一個快照是 /03/09/2020 所以如果我從這個快照恢復,這個快照是否會包含舊數據? 對不起,我的英語不好

理解這一點的一個有趣的測試是執行以下過程:

  1. 創建索引
  2. 索引一個文檔
  3. 創建第一個快照 A
  4. 索引第二個文檔
  5. 創建第二個快照 B
  6. 刪除第一個快照A
  7. 刪除索引
  8. 恢復快照 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
        }
      }
    ]

因此,最重要的是舊文檔仍包含在新快照中,刪除舊快照並不意味着刪除舊文檔。

快照包含創建快照時存在的所有分片段文件的精確副本。 隨着時間的推移,較小的段文件會合並為較大的段文件。 當下一個快照發生時,它會復制新的較大的段文件,而舊的快照仍將包含較舊的較小的段文件。

然而,這並不意味着只保留最新的快照並認為所有數據都在那里總是安全的,但是如果您進行每日快照,我認為只保留最后的 10 個快照並期望所有數據都是安全的數據在那里。

最后一點值得注意的是,當你刪除一個快照時,ES 會刪除所有與該快照相關的文件,而這些文件沒有被其他快照使用,這基本上使得刪除快照具有內在的安全性。

Elasticsearch 快照是集群數據的精確副本,就像觸發創建快照時一樣。

所以是的,如果您恢復在 03/09/2020 拍攝的快照將包含舊數據。恢復快照后的集群內容將與您在 03/09/2020 觸發創建快照時的內容完全相同

你問的問題比較多,我試着一一回答:

一季度。 我的管理員告訴我,我必須清除快照存儲庫中的最后 10 個快照以釋放磁盤空間。 例如,某人/或我不小心啟動了 curl -XDELETE/*,它刪除了我集群中的所有索引,我必須恢復這里的所有業務數據,而且我只有最后 10 天的 10 個快照,我可以恢復所有數據?

A1. 如果您刪除所有 10 個可用快照,那么您的存儲庫中將沒有任何快照。 由於您的存儲庫中沒有任何快照,因此您將無法恢復。 為了從快照恢復,您必須在存儲庫中有快照 您可以通過GET /_cat/snapshots/<repository>查看存儲庫中可用快照的列表

Q2。 它僅從上次快照日期恢復數據?

A2。 沒有 無論您嘗試從中恢復哪個快照,並且如果該快照存在於您的存儲庫中,那么它將從給定的快照中恢復數據。 如果是完整的集群恢復,那么正如我之前提到的,集群的內容將與您觸發創建快照時的內容完全相同。

Q3。 例如,我網站中的客戶 Joe 在 01/09/2020 向購物車添加了一些東西,然后在 15/09/2020 我從集群中刪除了所有數據,我在快照存儲庫中的最后一個快照是 /03/09/2020 所以如果我從這個快照恢復,這個快照是否會包含舊數據?

A3. 是的,此快照也將包含 01/09/2020 的舊數據,因為當您在 03/09/2020 創建快照時,集群中存在 01/09/2020 的數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM