通過 Elasticsearch 快照功能,將叢集中的索引資料備份到阿里雲Object Storage Service,並在需要時從備份中恢複資料。手動快照適用於資料移轉、特定時間點恢複、開發測試環境搭建以及高危操作前的安全備份。與自動快照相比,手動快照在快照範圍和時間上更靈活,但需要自行管理快照的生命週期。
資料備份與恢複依賴 elasticsearch-repository-oss 外掛程式,阿里雲 Elasticsearch 執行個體預設已安裝且不可卸載。詳情請參見 elasticsearch-repository-oss。
快照僅儲存索引資料,不儲存監控資料(.monitoring、.security_audit首碼索引)、中繼資料、Translog、執行個體配置、軟體包、外掛程式和日誌。本文中的命令均可在 Kibana 控制台的 Dev Tools 中執行,詳情請參見通過Kibana串連叢集。
建立快照倉庫
快照倉庫是存放快照的邏輯容器。建立倉庫前,需準備一個與 Elasticsearch 執行個體同地區的 OSS Bucket(建議使用標準儲存類型)。具體操作請參見建立儲存空間。RAM 使用者需具備 AliyunOSSFullAccess 權限原則,具體操作請參見管理RAM使用者的許可權。
以下樣本建立名為 my_backup 的倉庫。
雲上叢集
PUT _snapshot/my_backup/
{
"type": "oss",
"settings": {
"endpoint": "http://oss-cn-hangzhou-internal.aliyuncs.com",
"access_key_id": "xxxx",
"secret_access_key": "xxxxxx",
"bucket": "xxxxxx",
"compress": true,
"chunk_size": "500mb",
"base_path": "snapshot/"
}
}8.x 版本自建叢集
自建叢集需先安裝 elasticsearch-repository-oss 外掛程式,具體操作請參見elasticsearch-repository-oss外掛程式。自建叢集使用不同版本的外掛程式,參數名需添加 oss.client. 首碼。
PUT /_snapshot/my_backup
{
"type": "oss",
"settings": {
"oss.client.endpoint": "oss-cn-shanghai.aliyuncs.com",
"oss.client.access_key_id": "xxx",
"oss.client.secret_access_key": "xxx",
"oss.client.bucket": "xxxxxx",
"oss.client.base_path":"snapshot/",
"oss.client.compress": true
}
}參數說明
參數 | 說明 |
endpoint | OSS Bucket 的內網訪問網域名稱。擷取方式請參見地區和Endpoint。 |
access_key_id | RAM 使用者的 AccessKey ID。擷取方式請參見建立AccessKey。 |
secret_access_key | RAM 使用者的 AccessKey Secret。擷取方式請參見建立AccessKey。 |
bucket | OSS Bucket 名稱,需使用已存在的 Bucket。 |
compress | 是否壓縮快照的中繼資料檔案(索引映射和設定)。資料檔案不受此參數影響。預設值:false。 |
chunk_size | 快照過程中分塊上傳的大小限制。超過此大小的資料會被分塊上傳到 OSS。 |
base_path | 倉庫的起始路徑,預設為根目錄。可指定子目錄隔離不同叢集或環境的快照,例如 |
驗證倉庫連通性
POST _snapshot/my_backup/_verify配置正確時返回所有串連成功的節點列表。如果返回錯誤,檢查 Endpoint、Bucket 名稱及 RAM 許可權配置。
擷取倉庫資訊
# 擷取所有倉庫的資訊
GET _snapshot
# 擷取指定倉庫的資訊
GET _snapshot/my_backup建立快照
為全部索引建立快照
PUT _snapshot/my_backup/snapshot_1此命令為所有 open 狀態的索引建立名為 snapshot_1 的快照,命令立即返回並在後台執行。添加 wait_for_completion=true 參數可阻塞直到備份完成:
PUT _snapshot/my_backup/snapshot_1?wait_for_completion=true一個倉庫可包含多個快照。首次建立快照時備份全量資料,後續快照僅備份增量資料,因此速度更快。
為指定索引建立快照
PUT _snapshot/my_backup/snapshot_2
{
"indices": "index_1,index_2",
"ignore_unavailable": true,
"include_global_state": false
}參數 | 說明 |
indices | 指定要備份的索引,多個索引用逗號分隔,支援萬用字元(如 |
ignore_unavailable | 設為 true 時,指定索引不存在則忽略而非失敗。 |
include_global_state | 設為 false 時不備份組群全域狀態,僅備份資料時建議設為 false。 |
查看快照資訊
# 查看所有快照
GET _snapshot/my_backup/_all
# 查看指定快照
GET _snapshot/my_backup/snapshot_1
# 查看快照詳細狀態(含每個索引和分區的統計值)
GET _snapshot/my_backup/snapshot_1/_status刪除快照
DELETE _snapshot/my_backup/snapshot_1如果快照進行中中,此命令會中斷快照進程並刪除已建立的部分資料。
嚴禁直接在 OSS 控制台或通過其他工具刪除快照檔案,此操作會破壞增量備份鏈,可能導致後續所有快照損壞且無法恢複。
從快照恢複資料
恢複前注意:
不建議恢複
.開頭的系統索引,否則可能導致 Kibana 訪問失敗。如果叢集中已存在同名索引,需先關閉或刪除該索引,否則恢複失敗。
跨地區恢複需先將 OSS 中的快照資料移轉到目標地區,再恢複到目的地組群。OSS 間遷移請參見遷移實施。
在目的地組群中建立 OSS 倉庫
恢複前需在目的地組群中建立倉庫,映射到與備份相同的 OSS 地址,參數配置請參見建立快照倉庫。
PUT _snapshot/my_backup_restore/
{
"type": "oss",
"settings": {
"endpoint": "http://oss-cn-hangzhou-internal.aliyuncs.com",
"access_key_id": "xxxx",
"secret_access_key": "xxxxxx",
"bucket": "xxxxxx",
"compress": true,
"chunk_size": "500mb",
"base_path": "snapshot/"
}
}恢複指定索引
恢複指定索引並重新命名,避免與現有索引衝突:
POST /_snapshot/my_backup_restore/snapshot_1/_restore
{
"indices": "index_1",
"rename_pattern": "index_(.+)",
"rename_replacement": "restored_index_$1"
}參數 | 說明 |
indices | 指定要恢複的索引,忽略快照中的其他索引。 |
rename_pattern | Regex模板,匹配待恢複索引的名稱。 |
rename_replacement | 重新命名後的索引名稱,支援正則擷取的群組引用。 |
恢複所有索引(除系統索引)
POST _snapshot/my_backup_restore/snapshot_1/_restore
{"indices": "*,-.monitoring*,-.security*,-.kibana*,-.internal.alerts*,-.alerts*","ignore_unavailable": true}以上排除模式為常見系統索引樣本。不同版本的叢集可能包含其他系統索引(如.ds-ilm-history-*、.slo-*等),需根據實際叢集中的系統索引調整排除清單。8.x 版本叢集通常還需額外排除-.ds*等 data stream backing index。
恢複所有索引(包含系統索引)
POST _snapshot/my_backup_restore/snapshot_1/_restore_restore API 立即返回,恢複在後台進行。添加 wait_for_completion=true 可阻塞直到恢複完成:
POST _snapshot/my_backup_restore/snapshot_1/_restore?wait_for_completion=true恢複到 Indexing Service 執行個體
恢複快照到 Indexing Service 執行個體時,需通過 ignore_index_settings 參數忽略不相容的索引設定:
POST /_snapshot/my_backup_restore/snapshot_1/_restore
{
"indices": "index_1",
"ignore_index_settings": [
"index.apack.cube.following_index"
]
}查看快照恢複資訊
通過 _recovery API 監控恢複的狀態和進度。
# 查看指定索引的恢複狀態
GET restored_index_1/_recovery
# 查看叢集中所有索引的恢複資訊(可能包含與當前恢複無關的分區資訊)
GET /_recovery/輸出結果中的關鍵字段:
欄位 | 說明 |
type | 恢複類型。 |
source | 待恢複的快照和倉庫。 |
percent | 恢複進度百分比。 |
取消恢複
刪除正在恢複的索引即可取消恢複操作:
DELETE /restored_index_3此命令會停止恢複進程,同時刪除所有已恢複到叢集中的資料。