天天看點

ES備份恢複

@[toc]

一、ES備份

1.1 基本概念

  Elasticsearch 副本提供了高可靠性;可以容忍部分的節點丢失而不會中斷服務。但是副本并不提供對災難性故障的保護。對這種情況,則是需要備份來進行處理。

  備份Elasticsearch叢集可以使用 snapshot API。該API會拿到叢集裡目前的狀态和資料然後儲存到一個共享倉庫裡。這個備份過程是"智能"的。第一個快照會是一個資料的完整拷貝,但是所有後續的快照會保留的是已存快照和新資料之間的差異。随着不時的對資料進行快照,備份也在增量的添加和删除。這意味着後續備份會相當快速,因為它們隻傳輸很小的資料量。

  每個快照可以包含在各種版本的Elasticsearch中建立的索引,并且在還原快照時,必須有可能将所有索引還原到目标叢集中。如果快照中的任何索引是在不相容的版本中建立的,則将無法還原快照。

  • 在6.x中建立的索引快照可以恢複到7.x。
  • 在5.x中建立的索引快照可以恢複到6.x。
  • 在2.x中建立的索引快照可以恢複到5.x。
  • 可以将在1.x中建立的索引快照恢複到2.x。

  要使用這個功能,必須先建立一個儲存資料的倉庫。有多個倉庫類型可以選擇:

  • GCS
  • AZURE
  • S3
  • NAS
  • HDFS
  • OSS
  • 共享塊存儲

在更新之前備份資料時,如果快照包含在與更新版本不相容的版本中建立的索引,則更新後将無法還原快照。如果最終遇到需要還原與目前運作的叢集版本不相容的索引快照的情況,則可以将其還原到最新的相容版本上,然後使用 reindex-from-remote重建索引。

1.2 建立倉庫

mkdir -p /backups/my_backup
chown -R es:es /backups/my_backup           

部署一個共享檔案系統倉庫:

--倉庫名:my_backup
PUT _snapshot/my_backup20200603/
{
--倉庫的類型應該是一個共享檔案系統
    "type": "fs",
    "settings": {
--已挂載裝置的位址
        "location": "/backups/my_backup/20200603" 
    }
}           

注意:共享檔案系統路徑必須確定叢集所有節點都可以通路到

  這步會在挂載點建立倉庫和所需的中繼資料。還有一些其他的配置可能想要配置的,這些取決于節點、網絡的性能狀況和倉庫位置.

//location快照的位置。必選
//compress打開快照檔案的壓縮。壓縮僅應用于中繼資料檔案(索引映射和設定)。資料檔案未壓縮。預設為true。
//chunk_size如果需要,可以在快照過程中将大檔案分解為多個塊。指定塊尺寸的值,并且單元,例如:1GB,10MB,5KB,500B。預設為null(無限制的塊大小)。
//max_restore_bytes_per_sec每個節點的節流恢複速率。預設為40mb每秒。
//max_snapshot_bytes_per_sec每個節點的快照速率限制。預設為40mb每秒。           
#POST會更新已有倉庫的設定,但是底層資料不會被修改
POST _snapshot/my_backup20200603/ 
{
    "type": "fs",
    "settings": {
        "location": "/backups/my_backup/20200603",
        "max_snapshot_bytes_per_sec" : "50mb", 
        "max_restore_bytes_per_sec" : "50mb"
    }
}           

1.3 快照所有打開的索引

  一個倉庫可以包含多個快照。每個快照跟一系列索引相關(比如所有索引,一部分索引,或者單個索引),快照要有一個唯一的名字。

PUT _snapshot/my_backup20200603/snapshot_1
#這個會備份所有打開的索引到my_backup倉庫下一個命名為snapshot_1的快照裡。這個調用會立刻傳回,然後快照會在背景運作。           

  通常快照作為背景程序運作,不過有時候要等快照建立完成之後再傳回,可以通過添加一個 wait_for_completion 标記實作,但是要注意kibana的逾時限制。參數 wait_for_completion 決定請求是在快照初始化後立即傳回(預設),還是等快照建立完成之後再傳回。快照初始化時,所有之前的快照資訊會被加載到記憶體,是以在一個大的倉庫中改請求需要若幹秒(甚至分鐘)才能傳回,即使參數 wait_for_completion 的值設定為 false。

PUT _snapshot/my_backup20200603/snapshot_1?wait_for_completion=true
#這個會阻塞調用直到快照完成。大型快照會花很長時間才傳回           

1.4 快照指定索引

  預設行為是備份所有打開的索引。但是如果需要備份部分索引,可以在快照叢集的時候指定備份哪些索引:

PUT _snapshot/my_backup20200604/snapshot_1
{
    "indices": "name"
}           

1.5 列出快照相關的資訊

  要獲得單個快照的資訊,直接對倉庫和快照名發起一個 GET 請求:

GET _snapshot/my_backup20200603/snapshot_1
#該請求快照相關的各種資訊           

  要擷取一個倉庫中所有快照的完整清單,使用 _all 占位符替換掉具體的快照名稱:

GET _snapshot/my_backup20200603/_all
{
  "snapshots" : [
    {
      "snapshot" : "snapshot_1",
      "uuid" : "z0lgNdUaQyy7_p2SPgZ2AQ",
      "version_id" : 7040099,
      "version" : "7.4.0",
      "indices" : [
        ".kibana_task_manager_1",
        ".security-7",
        ".apm-agent-configuration",
        ".monitoring-es-7-2020.06.03",
        ".monitoring-kibana-7-2020.06.03",
        "kibana_sample_data_logs",
        ".kibana_1",
        "name",
        "age"
      ],
      "include_global_state" : true,
      "state" : "SUCCESS",
      "start_time" : "2020-06-03T14:52:13.247Z",
      "start_time_in_millis" : 1591195933247,
      "end_time" : "2020-06-03T14:52:14.256Z",
      "end_time_in_millis" : 1591195934256,
      "duration_in_millis" : 1009,
      "failures" : [ ],
      "shards" : {
        "total" : 9,
        "failed" : 0,
        "successful" : 9
      }
    },
    {
      "snapshot" : "snapshot_2",
      "uuid" : "54KqGBlPQdqKn6UNzvJjcg",
      "version_id" : 7040099,
      "version" : "7.4.0",
      "indices" : [
        ".kibana_task_manager_1",
        ".security-7",
        ".apm-agent-configuration",
        ".monitoring-es-7-2020.06.03",
        ".monitoring-kibana-7-2020.06.03",
        "kibana_sample_data_logs",
        ".kibana_1",
        "name",
        "age"
      ],
      "include_global_state" : true,
      "state" : "SUCCESS",
      "start_time" : "2020-06-03T14:52:23.285Z",
      "start_time_in_millis" : 1591195943285,
      "end_time" : "2020-06-03T14:52:23.688Z",
      "end_time_in_millis" : 1591195943688,
      "duration_in_millis" : 403,
      "failures" : [ ],
      "shards" : {
        "total" : 9,
        "failed" : 0,
        "successful" : 9
      }
    },
    {
      "snapshot" : "snapshot_3",
      "uuid" : "wdCKB4WiRPqwY9BO154vHA",
      "version_id" : 7040099,
      "version" : "7.4.0",
      "indices" : [
        ".kibana_task_manager_1",
        ".security-7",
        ".apm-agent-configuration",
        ".monitoring-es-7-2020.06.03",
        ".monitoring-kibana-7-2020.06.03",
        "kibana_sample_data_logs",
        ".kibana_1",
        "name",
        "age"
      ],
      "include_global_state" : true,
      "state" : "SUCCESS",
      "start_time" : "2020-06-03T14:52:28.704Z",
      "start_time_in_millis" : 1591195948704,
      "end_time" : "2020-06-03T14:52:28.907Z",
      "end_time_in_millis" : 1591195948907,
      "duration_in_millis" : 203,
      "failures" : [ ],
      "shards" : {
        "total" : 9,
        "failed" : 0,
        "successful" : 9
      }
    }
  ]
}
           

1.6 監控快照進度

  wait_for_completion 标記提供了一個監控的基礎形式,但哪怕隻是對一個中等規模的叢集做快照恢複的時候,它都真的不夠用。

  另外兩個 API 會給有關快照狀态更詳細的資訊。首先可以給快照 ID 執行一個 GET:

GET _snapshot/my_backup20200603/snapshot_3           

  如果調用這個指令的時候快照還在進行中,會看到它什麼時候開始,運作了多久等等資訊。不過要注意,這個 API 用的是快照機制相同的線程池。如果在快照非常大的分片,狀态更新的間隔會很大,因為 API 在競争相同的線程池資源。

更好的方案是拉取 _status API 資料:

GET _snapshot/my_backup20200603/snapshot_3/_status API 立刻傳回,然後給出詳細的多的統計值輸出:           

  響應包括快照的總體狀況,但也包括下鑽到每個索引和每個分片的統計值。這個給展示了有關快照進展的非常詳細的視圖。分片可以在不同的完成狀态:

INITIALIZING
分片在檢查叢集狀态看看自己是否可以被快照。這個一般是非常快的。
STARTED
資料正在被傳輸到倉庫。
FINALIZING
資料傳輸完成;分片現在在發送快照中繼資料。
DONE
快照完成!
FAILED
快照處理的時候碰到了錯誤,這個分片/索引/快照不可能完成了。檢查日志擷取更多資訊。           

1.7 删除快照

  最後,我們需要一個指令來删除所有不再有用的舊快照。這隻要對倉庫/快照名稱發一個簡單的 DELETE HTTP 調用:

DELETE _snapshot/my_backup/snapshot_2           

  用 API 删除快照很重要,而不能用其他機制(比如手動删除,或者用AWS S3上的自動清除工具)。因為快照是增量的,有可能很多快照依賴于過去的段。delete API 知道哪些資料還在被更多近期快照使用,然後會隻删除不再被使用的段。

  但是,如果做了一次人工檔案删除,将會面臨備份嚴重損壞的風險,因為在删除的是可能還在使用中的資料。

1.8 取消快照

  要取消一個快照,在他進行中的時候删除快照即可

DELETE _snapshot/my_backup20200603/snapshot_3這個會中斷快照程序。然後删除倉庫裡進行到一半的快照。           

1.9 清理倉庫

POST _snapshot/my_backup20200603/_cleanup?pretty           

  從倉庫删除任何快照時,将自動執行此端點執行的大多數清理操作。如果定期删除快照,則在大多數情況下,使用此功能将無法節省任何空間或僅節省很少的空間,是以應相應地降低其調用頻率。

1.10 删除倉庫

  删除倉庫後,Elasticsearch僅删除對該倉庫存儲快照的位置的引用。快照本身保持不變。

DELETE _snapshot/my_backup20200604           

二、ES恢複

2.1 恢複快照

  ES恢複很簡單,隻要在恢複回叢集的快照 ID後面加上 _restore 即可:

POST _snapshot/my_backup/snapshot_1/_restore           

  預設行為是把這個快照裡存有的所有索引都恢複。如果 snapshot_1 包括五個索引,這五個都會被恢複到我們叢集裡。和 snapshot API 一樣,我們也可以選擇希望恢複具體哪個索引。

  還有附加的選項用來重命名索引。這個選項允許通過模式比對索引名稱,然後通過恢複程序提供一個新名稱。如果想在不替換現有資料的前提下,恢複老資料來驗證内容,或者做其他處理,這個選項很有用。讓我們從快照裡恢複單個索引并提供一個替換的名稱:

POST /_snapshot/my_backup/snapshot_1/_restore
{
//隻恢複 name 索引,忽略快照中存在的其餘索引
    "indices": "name", 
//查找所提供的模式能比對上的正在恢複的索引
    "rename_pattern": "name(.+)", 
//重命名
    "rename_replacement": "restored_index_$1" 
}           

  這個會恢複 index_1 到叢集裡,但是重命名成了 restored_index_1 。

  和快照類似, restore 指令也會立刻傳回,恢複程序會在背景進行。如果更希望 HTTP 調用阻塞直到恢複完成,添加 wait_for_completion 标記:

POST _snapshot/my_backup/snapshot_1/_restore?wait_for_completion=true           

2.2 監控恢複操作

  從倉庫恢複資料借鑒了 Elasticsearch 裡已有的現行恢複機制。在内部實作上,從倉庫恢複分片和從另一個節點恢複是等價的。

  如果想監控恢複的進度,可以使用 recovery API。這是一個通用目的的 API,用來展示叢集中移動着的分片狀态。

  這個 API 可以為在恢複的指定索引單獨調用

GET restored_index_3/_recovery           

  或者檢視叢集裡所有索引,可能包括跟恢複程序無關的其他分片移動:

GET /_recovery/
{
  ".monitoring-kibana-7-2020.06.03" : {
    "shards" : [
      {
        "id" : 0,
        "type" : "PEER",
        "stage" : "DONE",
        "primary" : false,
        "start_time_in_millis" : 1591184352400,
        "stop_time_in_millis" : 1591184354191,
        "total_time_in_millis" : 1790,
        "source" : {
          "id" : "YeJHST86S6ei3vN2Y6snfQ",
          "host" : "192.168.137.11",
          "transport_address" : "192.168.137.11:9301",
          "ip" : "192.168.137.11",
          "name" : "node1"
        },
        "target" : {
          "id" : "o1cz718RT96ahpjXOZz5kg",
          "host" : "192.168.137.11",
          "transport_address" : "192.168.137.11:9303",
          "ip" : "192.168.137.11",
          "name" : "node3"
        },
        "index" : {
          "size" : {
            "total_in_bytes" : 0,
            "reused_in_bytes" : 0,
            "recovered_in_bytes" : 0,
            "percent" : "0.0%"
          },
          "files" : {
            "total" : 0,
            "reused" : 0,
            "recovered" : 0,
            "percent" : "0.0%"
          },
          "total_time_in_millis" : 6,
          "source_throttle_time_in_millis" : 0,
          "target_throttle_time_in_millis" : 0
        },
        "translog" : {
          "recovered" : 57,
          "total" : 57,
          "percent" : "100.0%",
          "total_on_start" : -1,
          "total_time_in_millis" : 1692
        },
        "verify_index" : {
          "check_index_time_in_millis" : 0,
          "total_time_in_millis" : 0
        }
      },
      {
        "id" : 0,
        "type" : "EXISTING_STORE",
        "stage" : "DONE",
        "primary" : true,
        "start_time_in_millis" : 1591184349472,
        "stop_time_in_millis" : 1591184351099,
        "total_time_in_millis" : 1626,
        "source" : {
          "bootstrap_new_history_uuid" : false
        },
        "target" : {
          "id" : "YeJHST86S6ei3vN2Y6snfQ",
          "host" : "192.168.137.11",
          "transport_address" : "192.168.137.11:9301",
          "ip" : "192.168.137.11",
          "name" : "node1"
        },
        "index" : {
          "size" : {
            "total_in_bytes" : 359017,
            "reused_in_bytes" : 359017,
            "recovered_in_bytes" : 0,
            "percent" : "100.0%"
          },
          "files" : {
            "total" : 21,
            "reused" : 21,
            "recovered" : 0,
            "percent" : "100.0%"
          },
          "total_time_in_millis" : 12,
          "source_throttle_time_in_millis" : 0,
          "target_throttle_time_in_millis" : 0
        },
        "translog" : {
          "recovered" : 57,
          "total" : 57,
          "percent" : "100.0%",
          "total_on_start" : 57,
          "total_time_in_millis" : 1577
        },
        "verify_index" : {
          "check_index_time_in_millis" : 0,
          "total_time_in_millis" : 0
        }
      }
    ]
  },
  ".security-7" : {
    "shards" : [
      {
        "id" : 0,
        "type" : "PEER",
        "stage" : "DONE",
        "primary" : false,
        "start_time_in_millis" : 1591184353847,
        "stop_time_in_millis" : 1591184354295,
        "total_time_in_millis" : 447,
        "source" : {
          "id" : "fLaYEiq_TrCKNDWoDHs4uw",
          "host" : "192.168.137.11",
          "transport_address" : "192.168.137.11:9302",
          "ip" : "192.168.137.11",
          "name" : "node2"
        },
        "target" : {
          "id" : "o1cz718RT96ahpjXOZz5kg",
          "host" : "192.168.137.11",
          "transport_address" : "192.168.137.11:9303",
          "ip" : "192.168.137.11",
          "name" : "node3"
        },
        "index" : {
          "size" : {
            "total_in_bytes" : 0,
            "reused_in_bytes" : 0,
            "recovered_in_bytes" : 0,
            "percent" : "0.0%"
          },
          "files" : {
            "total" : 0,
            "reused" : 0,
            "recovered" : 0,
            "percent" : "0.0%"
          },
          "total_time_in_millis" : 2,
          "source_throttle_time_in_millis" : 0,
          "target_throttle_time_in_millis" : 0
        },
        "translog" : {
          "recovered" : 0,
          "total" : 0,
          "percent" : "100.0%",
          "total_on_start" : -1,
          "total_time_in_millis" : 415
        },
        "verify_index" : {
          "check_index_time_in_millis" : 0,
          "total_time_in_millis" : 0
        }
      },
      {
        "id" : 0,
        "type" : "EXISTING_STORE",
        "stage" : "DONE",
        "primary" : true,
        "start_time_in_millis" : 1591184352286,
        "stop_time_in_millis" : 1591184352942,
        "total_time_in_millis" : 655,
        "source" : {
          "bootstrap_new_history_uuid" : false
        },
        "target" : {
          "id" : "fLaYEiq_TrCKNDWoDHs4uw",
          "host" : "192.168.137.11",
          "transport_address" : "192.168.137.11:9302",
          "ip" : "192.168.137.11",
          "name" : "node2"
        },
        "index" : {
          "size" : {
            "total_in_bytes" : 83272,
            "reused_in_bytes" : 83272,
            "recovered_in_bytes" : 0,
            "percent" : "100.0%"
          },
          "files" : {
            "total" : 38,
            "reused" : 38,
            "recovered" : 0,
            "percent" : "100.0%"
          },
          "total_time_in_millis" : 5,
          "source_throttle_time_in_millis" : 0,
          "target_throttle_time_in_millis" : 0
        },
        "translog" : {
          "recovered" : 0,
          "total" : 0,
          "percent" : "100.0%",
          "total_on_start" : 0,
          "total_time_in_millis" : 588
        },
        "verify_index" : {
          "check_index_time_in_millis" : 0,
          "total_time_in_millis" : 0
        }
      }
    ]
  },
  ".kibana_task_manager_1" : {
    "shards" : [
      {
        "id" : 0,
        "type" : "PEER",
        "stage" : "DONE",
        "primary" : false,
        "start_time_in_millis" : 1591184354328,
        "stop_time_in_millis" : 1591184355333,
        "total_time_in_millis" : 1004,
        "source" : {
          "id" : "YeJHST86S6ei3vN2Y6snfQ",
          "host" : "192.168.137.11",
          "transport_address" : "192.168.137.11:9301",
          "ip" : "192.168.137.11",
          "name" : "node1"
        },
        "target" : {
          "id" : "o1cz718RT96ahpjXOZz5kg",
          "host" : "192.168.137.11",
          "transport_address" : "192.168.137.11:9303",
          "ip" : "192.168.137.11",
          "name" : "node3"
        },
        "index" : {
          "size" : {
            "total_in_bytes" : 0,
            "reused_in_bytes" : 0,
            "recovered_in_bytes" : 0,
            "percent" : "0.0%"
          },
          "files" : {
            "total" : 0,
            "reused" : 0,
            "recovered" : 0,
            "percent" : "0.0%"
          },
          "total_time_in_millis" : 1,
          "source_throttle_time_in_millis" : 0,
          "target_throttle_time_in_millis" : 0
        },
        "translog" : {
          "recovered" : 0,
          "total" : 0,
          "percent" : "100.0%",
          "total_on_start" : -1,
          "total_time_in_millis" : 294
        },
        "verify_index" : {
          "check_index_time_in_millis" : 0,
          "total_time_in_millis" : 0
        }
      },
      {
        "id" : 0,
        "type" : "EXISTING_STORE",
        "stage" : "DONE",
        "primary" : true,
        "start_time_in_millis" : 1591184349520,
        "stop_time_in_millis" : 1591184350042,
        "total_time_in_millis" : 521,
        "source" : {
          "bootstrap_new_history_uuid" : false
        },
        "target" : {
          "id" : "YeJHST86S6ei3vN2Y6snfQ",
          "host" : "192.168.137.11",
          "transport_address" : "192.168.137.11:9301",
          "ip" : "192.168.137.11",
          "name" : "node1"
        },
        "index" : {
          "size" : {
            "total_in_bytes" : 12872,
            "reused_in_bytes" : 12872,
            "recovered_in_bytes" : 0,
            "percent" : "100.0%"
          },
          "files" : {
            "total" : 7,
            "reused" : 7,
            "recovered" : 0,
            "percent" : "100.0%"
          },
          "total_time_in_millis" : 0,
          "source_throttle_time_in_millis" : 0,
          "target_throttle_time_in_millis" : 0
        },
        "translog" : {
          "recovered" : 0,
          "total" : 0,
          "percent" : "100.0%",
          "total_on_start" : 0,
          "total_time_in_millis" : 465
        },
        "verify_index" : {
          "check_index_time_in_millis" : 0,
          "total_time_in_millis" : 0
        }
      }
    ]
  },
  ".monitoring-es-7-2020.06.03" : {
    "shards" : [
      {
        "id" : 0,
        "type" : "PEER",
        "stage" : "DONE",
        "primary" : false,
        "start_time_in_millis" : 1591184356727,
        "stop_time_in_millis" : 1591184361202,
        "total_time_in_millis" : 4474,
        "source" : {
          "id" : "fLaYEiq_TrCKNDWoDHs4uw",
          "host" : "192.168.137.11",
          "transport_address" : "192.168.137.11:9302",
          "ip" : "192.168.137.11",
          "name" : "node2"
        },
        "target" : {
          "id" : "o1cz718RT96ahpjXOZz5kg",
          "host" : "192.168.137.11",
          "transport_address" : "192.168.137.11:9303",
          "ip" : "192.168.137.11",
          "name" : "node3"
        },
        "index" : {
          "size" : {
            "total_in_bytes" : 0,
            "reused_in_bytes" : 0,
            "recovered_in_bytes" : 0,
            "percent" : "0.0%"
          },
          "files" : {
            "total" : 0,
            "reused" : 0,
            "recovered" : 0,
            "percent" : "0.0%"
          },
          "total_time_in_millis" : 2,
          "source_throttle_time_in_millis" : 0,
          "target_throttle_time_in_millis" : 0
        },
        "translog" : {
          "recovered" : 1697,
          "total" : 1697,
          "percent" : "100.0%",
          "total_on_start" : -1,
          "total_time_in_millis" : 4108
        },
        "verify_index" : {
          "check_index_time_in_millis" : 0,
          "total_time_in_millis" : 0
        }
      },
      {
        "id" : 0,
        "type" : "EXISTING_STORE",
        "stage" : "DONE",
        "primary" : true,
        "start_time_in_millis" : 1591184352320,
        "stop_time_in_millis" : 1591184356308,
        "total_time_in_millis" : 3987,
        "source" : {
          "bootstrap_new_history_uuid" : false
        },
        "target" : {
          "id" : "fLaYEiq_TrCKNDWoDHs4uw",
          "host" : "192.168.137.11",
          "transport_address" : "192.168.137.11:9302",
          "ip" : "192.168.137.11",
          "name" : "node2"
        },
        "index" : {
          "size" : {
            "total_in_bytes" : 7584798,
            "reused_in_bytes" : 7584798,
            "recovered_in_bytes" : 0,
            "percent" : "100.0%"
          },
          "files" : {
            "total" : 51,
            "reused" : 51,
            "recovered" : 0,
            "percent" : "100.0%"
          },
          "total_time_in_millis" : 9,
          "source_throttle_time_in_millis" : 0,
          "target_throttle_time_in_millis" : 0
        },
        "translog" : {
          "recovered" : 1696,
          "total" : 1696,
          "percent" : "100.0%",
          "total_on_start" : 1696,
          "total_time_in_millis" : 3858
        },
        "verify_index" : {
          "check_index_time_in_millis" : 0,
          "total_time_in_millis" : 0
        }
      }
    ]
  },
  ".apm-agent-configuration" : {
    "shards" : [
      {
        "id" : 0,
        "type" : "PEER",
        "stage" : "DONE",
        "primary" : false,
        "start_time_in_millis" : 1591184353017,
        "stop_time_in_millis" : 1591184353862,
        "total_time_in_millis" : 845,
        "source" : {
          "id" : "fLaYEiq_TrCKNDWoDHs4uw",
          "host" : "192.168.137.11",
          "transport_address" : "192.168.137.11:9302",
          "ip" : "192.168.137.11",
          "name" : "node2"
        },
        "target" : {
          "id" : "YeJHST86S6ei3vN2Y6snfQ",
          "host" : "192.168.137.11",
          "transport_address" : "192.168.137.11:9301",
          "ip" : "192.168.137.11",
          "name" : "node1"
        },
        "index" : {
          "size" : {
            "total_in_bytes" : 0,
            "reused_in_bytes" : 0,
            "recovered_in_bytes" : 0,
            "percent" : "0.0%"
          },
          "files" : {
            "total" : 0,
            "reused" : 0,
            "recovered" : 0,
            "percent" : "0.0%"
          },
          "total_time_in_millis" : 1,
          "source_throttle_time_in_millis" : 0,
          "target_throttle_time_in_millis" : 0
        },
        "translog" : {
          "recovered" : 0,
          "total" : 0,
          "percent" : "100.0%",
          "total_on_start" : -1,
          "total_time_in_millis" : 674
        },
        "verify_index" : {
          "check_index_time_in_millis" : 0,
          "total_time_in_millis" : 0
        }
      },
      {
        "id" : 0,
        "type" : "EXISTING_STORE",
        "stage" : "DONE",
        "primary" : true,
        "start_time_in_millis" : 1591184352314,
        "stop_time_in_millis" : 1591184352691,
        "total_time_in_millis" : 377,
        "source" : {
          "bootstrap_new_history_uuid" : false
        },
        "target" : {
          "id" : "fLaYEiq_TrCKNDWoDHs4uw",
          "host" : "192.168.137.11",
          "transport_address" : "192.168.137.11:9302",
          "ip" : "192.168.137.11",
          "name" : "node2"
        },
        "index" : {
          "size" : {
            "total_in_bytes" : 283,
            "reused_in_bytes" : 283,
            "recovered_in_bytes" : 0,
            "percent" : "100.0%"
          },
          "files" : {
            "total" : 1,
            "reused" : 1,
            "recovered" : 0,
            "percent" : "100.0%"
          },
          "total_time_in_millis" : 0,
          "source_throttle_time_in_millis" : 0,
          "target_throttle_time_in_millis" : 0
        },
        "translog" : {
          "recovered" : 0,
          "total" : 0,
          "percent" : "100.0%",
          "total_on_start" : 0,
          "total_time_in_millis" : 337
        },
        "verify_index" : {
          "check_index_time_in_millis" : 0,
          "total_time_in_millis" : 0
        }
      }
    ]
  },
  "name" : {
    "shards" : [
      {
        "id" : 0,
        "type" : "EMPTY_STORE",
        "stage" : "DONE",
        "primary" : true,
        "start_time_in_millis" : 1591195879522,
        "stop_time_in_millis" : 1591195879541,
        "total_time_in_millis" : 18,
        "source" : { },
        "target" : {
          "id" : "YeJHST86S6ei3vN2Y6snfQ",
          "host" : "192.168.137.11",
          "transport_address" : "192.168.137.11:9301",
          "ip" : "192.168.137.11",
          "name" : "node1"
        },
        "index" : {
          "size" : {
            "total_in_bytes" : 0,
            "reused_in_bytes" : 0,
            "recovered_in_bytes" : 0,
            "percent" : "0.0%"
          },
          "files" : {
            "total" : 0,
            "reused" : 0,
            "recovered" : 0,
            "percent" : "0.0%"
          },
          "total_time_in_millis" : 6,
          "source_throttle_time_in_millis" : 0,
          "target_throttle_time_in_millis" : 0
        },
        "translog" : {
          "recovered" : 0,
          "total" : 0,
          "percent" : "100.0%",
          "total_on_start" : 0,
          "total_time_in_millis" : 5
        },
        "verify_index" : {
          "check_index_time_in_millis" : 0,
          "total_time_in_millis" : 0
        }
      },
      {
        "id" : 0,
        "type" : "PEER",
        "stage" : "DONE",
        "primary" : false,
        "start_time_in_millis" : 1591195879565,
        "stop_time_in_millis" : 1591195879725,
        "total_time_in_millis" : 159,
        "source" : {
          "id" : "YeJHST86S6ei3vN2Y6snfQ",
          "host" : "192.168.137.11",
          "transport_address" : "192.168.137.11:9301",
          "ip" : "192.168.137.11",
          "name" : "node1"
        },
        "target" : {
          "id" : "fLaYEiq_TrCKNDWoDHs4uw",
          "host" : "192.168.137.11",
          "transport_address" : "192.168.137.11:9302",
          "ip" : "192.168.137.11",
          "name" : "node2"
        },
        "index" : {
          "size" : {
            "total_in_bytes" : 230,
            "reused_in_bytes" : 0,
            "recovered_in_bytes" : 230,
            "percent" : "100.0%"
          },
          "files" : {
            "total" : 1,
            "reused" : 0,
            "recovered" : 1,
            "percent" : "100.0%"
          },
          "total_time_in_millis" : 43,
          "source_throttle_time_in_millis" : 0,
          "target_throttle_time_in_millis" : 0
        },
        "translog" : {
          "recovered" : 1,
          "total" : 1,
          "percent" : "100.0%",
          "total_on_start" : 0,
          "total_time_in_millis" : 98
        },
        "verify_index" : {
          "check_index_time_in_millis" : 0,
          "total_time_in_millis" : 0
        }
      }
    ]
  },
  "kibana_sample_data_logs" : {
    "shards" : [
      {
        "id" : 0,
        "type" : "SNAPSHOT",
        "stage" : "DONE",
        "primary" : true,
        "start_time_in_millis" : 1591186687934,
        "stop_time_in_millis" : 1591186688200,
        "total_time_in_millis" : 265,
        "source" : {
          "repository" : "my_backup",
          "snapshot" : "snapshot_1",
          "version" : "7.4.0",
          "index" : "kibana_sample_data_logs",
          "restoreUUID" : "25k0feqzTzWa9m6qTcGFTw"
        },
        "target" : {
          "id" : "o1cz718RT96ahpjXOZz5kg",
          "host" : "192.168.137.11",
          "transport_address" : "192.168.137.11:9303",
          "ip" : "192.168.137.11",
          "name" : "node3"
        },
        "index" : {
          "size" : {
            "total_in_bytes" : 11820808,
            "reused_in_bytes" : 0,
            "recovered_in_bytes" : 11820808,
            "percent" : "100.0%"
          },
          "files" : {
            "total" : 27,
            "reused" : 0,
            "recovered" : 27,
            "percent" : "100.0%"
          },
          "total_time_in_millis" : 234,
          "source_throttle_time_in_millis" : 0,
          "target_throttle_time_in_millis" : 0
        },
        "translog" : {
          "recovered" : 0,
          "total" : 0,
          "percent" : "100.0%",
          "total_on_start" : 0,
          "total_time_in_millis" : 13
        },
        "verify_index" : {
          "check_index_time_in_millis" : 0,
          "total_time_in_millis" : 0
        }
      },
      {
        "id" : 0,
        "type" : "PEER",
        "stage" : "DONE",
        "primary" : false,
        "start_time_in_millis" : 1591186688243,
        "stop_time_in_millis" : 1591186688639,
        "total_time_in_millis" : 396,
        "source" : {
          "id" : "o1cz718RT96ahpjXOZz5kg",
          "host" : "192.168.137.11",
          "transport_address" : "192.168.137.11:9303",
          "ip" : "192.168.137.11",
          "name" : "node3"
        },
        "target" : {
          "id" : "YeJHST86S6ei3vN2Y6snfQ",
          "host" : "192.168.137.11",
          "transport_address" : "192.168.137.11:9301",
          "ip" : "192.168.137.11",
          "name" : "node1"
        },
        "index" : {
          "size" : {
            "total_in_bytes" : 11820808,
            "reused_in_bytes" : 0,
            "recovered_in_bytes" : 11820808,
            "percent" : "100.0%"
          },
          "files" : {
            "total" : 27,
            "reused" : 0,
            "recovered" : 27,
            "percent" : "100.0%"
          },
          "total_time_in_millis" : 348,
          "source_throttle_time_in_millis" : 190,
          "target_throttle_time_in_millis" : 102
        },
        "translog" : {
          "recovered" : 0,
          "total" : 0,
          "percent" : "100.0%",
          "total_on_start" : 0,
          "total_time_in_millis" : 35
        },
        "verify_index" : {
          "check_index_time_in_millis" : 0,
          "total_time_in_millis" : 0
        }
      }
    ]
  },
  ".kibana_1" : {
    "shards" : [
      {
        "id" : 0,
        "type" : "EXISTING_STORE",
        "stage" : "DONE",
        "primary" : true,
        "start_time_in_millis" : 1591184349501,
        "stop_time_in_millis" : 1591184350141,
        "total_time_in_millis" : 640,
        "source" : {
          "bootstrap_new_history_uuid" : false
        },
        "target" : {
          "id" : "YeJHST86S6ei3vN2Y6snfQ",
          "host" : "192.168.137.11",
          "transport_address" : "192.168.137.11:9301",
          "ip" : "192.168.137.11",
          "name" : "node1"
        },
        "index" : {
          "size" : {
            "total_in_bytes" : 22482,
            "reused_in_bytes" : 22482,
            "recovered_in_bytes" : 0,
            "percent" : "100.0%"
          },
          "files" : {
            "total" : 16,
            "reused" : 16,
            "recovered" : 0,
            "percent" : "100.0%"
          },
          "total_time_in_millis" : 2,
          "source_throttle_time_in_millis" : 0,
          "target_throttle_time_in_millis" : 0
        },
        "translog" : {
          "recovered" : 0,
          "total" : 0,
          "percent" : "100.0%",
          "total_on_start" : 0,
          "total_time_in_millis" : 579
        },
        "verify_index" : {
          "check_index_time_in_millis" : 0,
          "total_time_in_millis" : 0
        }
      },
      {
        "id" : 0,
        "type" : "PEER",
        "stage" : "DONE",
        "primary" : false,
        "start_time_in_millis" : 1591184353648,
        "stop_time_in_millis" : 1591184354331,
        "total_time_in_millis" : 682,
        "source" : {
          "id" : "YeJHST86S6ei3vN2Y6snfQ",
          "host" : "192.168.137.11",
          "transport_address" : "192.168.137.11:9301",
          "ip" : "192.168.137.11",
          "name" : "node1"
        },
        "target" : {
          "id" : "fLaYEiq_TrCKNDWoDHs4uw",
          "host" : "192.168.137.11",
          "transport_address" : "192.168.137.11:9302",
          "ip" : "192.168.137.11",
          "name" : "node2"
        },
        "index" : {
          "size" : {
            "total_in_bytes" : 0,
            "reused_in_bytes" : 0,
            "recovered_in_bytes" : 0,
            "percent" : "0.0%"
          },
          "files" : {
            "total" : 0,
            "reused" : 0,
            "recovered" : 0,
            "percent" : "0.0%"
          },
          "total_time_in_millis" : 3,
          "source_throttle_time_in_millis" : 0,
          "target_throttle_time_in_millis" : 0
        },
        "translog" : {
          "recovered" : 0,
          "total" : 0,
          "percent" : "100.0%",
          "total_on_start" : -1,
          "total_time_in_millis" : 605
        },
        "verify_index" : {
          "check_index_time_in_millis" : 0,
          "total_time_in_millis" : 0
        }
      }
    ]
  },
  "age" : {
    "shards" : [
      {
        "id" : 0,
        "type" : "PEER",
        "stage" : "DONE",
        "primary" : false,
        "start_time_in_millis" : 1591195876756,
        "stop_time_in_millis" : 1591195876875,
        "total_time_in_millis" : 119,
        "source" : {
          "id" : "fLaYEiq_TrCKNDWoDHs4uw",
          "host" : "192.168.137.11",
          "transport_address" : "192.168.137.11:9302",
          "ip" : "192.168.137.11",
          "name" : "node2"
        },
        "target" : {
          "id" : "o1cz718RT96ahpjXOZz5kg",
          "host" : "192.168.137.11",
          "transport_address" : "192.168.137.11:9303",
          "ip" : "192.168.137.11",
          "name" : "node3"
        },
        "index" : {
          "size" : {
            "total_in_bytes" : 230,
            "reused_in_bytes" : 0,
            "recovered_in_bytes" : 230,
            "percent" : "100.0%"
          },
          "files" : {
            "total" : 1,
            "reused" : 0,
            "recovered" : 1,
            "percent" : "100.0%"
          },
          "total_time_in_millis" : 25,
          "source_throttle_time_in_millis" : 0,
          "target_throttle_time_in_millis" : 0
        },
        "translog" : {
          "recovered" : 1,
          "total" : 1,
          "percent" : "100.0%",
          "total_on_start" : 0,
          "total_time_in_millis" : 80
        },
        "verify_index" : {
          "check_index_time_in_millis" : 0,
          "total_time_in_millis" : 0
        }
      },
      {
        "id" : 0,
        "type" : "EMPTY_STORE",
        "stage" : "DONE",
        "primary" : true,
        "start_time_in_millis" : 1591195876703,
        "stop_time_in_millis" : 1591195876724,
        "total_time_in_millis" : 21,
        "source" : { },
        "target" : {
          "id" : "fLaYEiq_TrCKNDWoDHs4uw",
          "host" : "192.168.137.11",
          "transport_address" : "192.168.137.11:9302",
          "ip" : "192.168.137.11",
          "name" : "node2"
        },
        "index" : {
          "size" : {
            "total_in_bytes" : 0,
            "reused_in_bytes" : 0,
            "recovered_in_bytes" : 0,
            "percent" : "0.0%"
          },
          "files" : {
            "total" : 0,
            "reused" : 0,
            "recovered" : 0,
            "percent" : "0.0%"
          },
          "total_time_in_millis" : 8,
          "source_throttle_time_in_millis" : 0,
          "target_throttle_time_in_millis" : 0
        },
        "translog" : {
          "recovered" : 0,
          "total" : 0,
          "percent" : "100.0%",
          "total_on_start" : 0,
          "total_time_in_millis" : 8
        },
        "verify_index" : {
          "check_index_time_in_millis" : 0,
          "total_time_in_millis" : 0
        }
      }
    ]
  }
}
           

輸出會跟這個類似(注意,根據叢集的活躍度,輸出可能會非常多):

  • type 字段告訴恢複的本質;這個分片是在從一個快照恢複。
  • source 哈希描述了作為恢複來源的特定快照和倉庫。
  • percent 字段讓對恢複的狀态有個概念。

      輸出會列出所有目前正在經曆恢複的索引,然後列出這些索引裡的所有分片。每個分片裡會有啟動/停止時間、持續時間、恢複百分比、傳輸位元組數等統計值。

2.3 取消恢複

  要取消一個恢複,需要删除正在恢複的索引。因為恢複程序其實就是分片恢複,發送一個 删除索引 API 修改叢集狀态,就可以停止恢複程序。比如:

DELETE /restored_name           

  如果 restored_name 正在恢複中,這個删除指令會停止恢複,同時删除所有已經恢複到叢集裡的資料。

三、叢集塊對備份和恢複操作的影響

  許多備份和恢複操作受叢集和索引塊的影響。例如,建立和删除倉庫需要寫入全局中繼資料通路。備份操作要求所有索引及其中繼資料以及全局中繼資料均可讀。恢複操作要求全局中繼資料可寫,但是在恢複過程中會忽略索引級别塊,因為索引實際上是在還原過程中重新建立的。倉庫内容不是叢集的一部分,是以叢集塊不會影響内部倉庫操作。

四、附錄

//////////////////////備份/////////////////////////
//建立/更新倉庫配置my_backup20200603
POST _snapshot/my_backup20200603/ 
{
    "type": "fs",
    "settings": {
        "location": "/backups/my_backup/20200603",
        "max_snapshot_bytes_per_sec" : "50mb", 
        "max_restore_bytes_per_sec" : "50mb"
    }
}

GET _cat/tasks?v
//生成測試資料
GET /_cat/indices?v
GET /_cat/indices/name,age?v
POST age/_doc
{
    "age" : 1
}
POST name/_doc
{
    "user" : "Mike"
}
GET name/_search
GET age/_search
GET movies/_search
GET movies/_mappings
GET movies/_settings

//快照所有打開的索引
PUT _snapshot/my_backup20200603/snapshot_1
PUT _snapshot/my_backup20200603/snapshot_2
PUT _snapshot/my_backup20200603/snapshot_3

//建立/更新倉庫配置my_backup20200604
POST _snapshot/my_backup20200604/
{
    "type": "fs",
    "settings": {
        "location": "/backups/my_backup/20200604",
        "max_snapshot_bytes_per_sec" : "50mb", 
        "max_restore_bytes_per_sec" : "50mb"
    }
}

//快照指定索引
PUT _snapshot/my_backup20200604/snapshot_1
{
    "indices": "name"
}

//列出快照相關資訊
GET _snapshot/my_backup20200603/snapshot_1
GET _snapshot/my_backup20200603/_all

// 檢視快照進度
GET _snapshot/my_backup20200604/snapshot_1
GET _snapshot/my_backup20200604/snapshot_1/_status


//删除快照/取消快照
DELETE _snapshot/my_backup20200603/snapshot_1

DELETE name
DELETE age
//删除倉庫
DELETE _snapshot/my_backup20200603
//清理倉庫
POST _snapshot/my_backup20200603/_cleanup?pretty

//////////////////////恢複/////////////////////////

//恢複快照
POST _snapshot/my_backup20200603/snapshot_1/_restore
POST /_snapshot/my_backup20200603/snapshot_3/_restore
{

    "indices": "name,age", 
    "rename_pattern": "(.+)", 
    "rename_replacement": "$1" 
}
GET restored_index_name/_search
//檢視恢複狀态
GET restored_index_name/_recovery
GET /_recovery/

//取消恢複
DELETE /restored_index_name