09.snapshot and restore操作
文章目錄
- 1. es 快照(snapshot)簡介
- 2. 快照(snapshot)的版本兼容
- 3. 快照(snapshot)倉庫 repository
- 4.基于共享文件系統配置repository
- 5. source only repository
- 6. 其他存儲類型的repository
- 7. verify repository的狀態
- 8. snapshot快照(snapshot)操作
- 9.resotre 恢復操作
- 1. partial restore 部分恢復
- 2. restore的時候change index settings
- 3. restore到different cluster當中去
- 10. snapshot/resotre的狀態監測
1. es 快照(snapshot)簡介
快照(snapshot)是從正在運行的Elasticsearch集群中獲取的備份。您可以獲取單個索引或整個群集的快照(snapshot),并將其存儲在共享文件系統上的存儲庫(repository)中,并且有些插件支持S3,HDFS,Azure,Google Cloud Storage等上的遠程存儲庫(repository)。
快照(snapshot)是增量獲取的。這意味著,當創建索引快照(snapshot)時,Elasticsearch避免復制同一個index在任何之前產生快照(snapshot)時已存儲在存儲庫(repository)中的數據。因此,可以非常頻繁地為群集創建快照(snapshot)。
您可以通過還原(restore)API將快照(snapshot)還原(restore)到正在運行的群集中。還原(restore)索引時,可以更改還原(restore)索引的名稱及其某些設置。快照(snapshot)和還原(restore)功能的使用方式具有很大的靈活性。
不能僅通過獲取其所有節點的數據目錄副本來備份Elasticsearch集群。 Elasticsearch可能正在運行時對其數據目錄的內容進行更改;復制其數據目錄不能期望捕獲其內容的一致圖片。如果嘗試從此類備份還原(restore)群集,則該群集可能會失敗并報告損壞和/或丟失文件。另外,它似乎成功了,盡管它默默地丟失了一些數據。備份群集的唯一可靠方法是使用快照(snapshot)和還原(restore)功能。
2. 快照(snapshot)的版本兼容
快照(snapshot)包含組成索引的磁盤上數據結構的副本。這意味著快照(snapshot)只能還原(restore)到可以讀取索引的Elasticsearch版本:
在6.x中創建的索引快照(snapshot)可以恢復到7.x。
在5.x中創建的索引快照(snapshot)可以恢復到6.x。
在2.x中創建的索引快照(snapshot)可以恢復到5.x。
可以將在1.x中創建的索引的快照(snapshot)還原(restore)到2.x。
相反,無法將在1.x中創建的索引快照(snapshot)還原(restore)到5.x或6.x,無法將在2.x中創建的索引快照(snapshot)還原(restore)到6.x或7.x,以及在5中創建的索引快照(snapshot)。 x無法還原(restore)到7.x。
每個快照(snapshot)可以包含在各種版本的Elasticsearch中創建的索引,并且在還原(restore)快照(snapshot)時,必須有可能將所有索引還原(restore)到目標集群中。如果快照(snapshot)中的任何索引是在不兼容的版本中創建的,則將無法還原(restore)快照(snapshot)。
在升級之前備份數據時,請記住,如果快照(snapshot)中包含與升級版本不兼容的版本中創建的索引,則將無法還原(restore)快照(snapshot)。
如果最終遇到需要還原(restore)與當前運行的群集版本不兼容的索引快照(snapshot)的情況,則可以將其還原(restore)到最新的兼容版本上,然后使用reindex-from-remote重建索引。當前版本的索引。僅當原始索引啟用了源時,才可以從遠程重新索引。與簡單地還原(restore)快照(snapshot)相比,檢索和重新索引數據所花費的時間可能要長得多。如果您有大量數據,建議您使用數據的一部分測試遠程過程中的重新索引,以了解時間要求,然后再繼續。
3. 快照(snapshot)倉庫 repository
必須先注冊快照(snapshot)存儲庫(repository),然后才能執行快照(snapshot)和還原(restore)操作。我們建議為每個主要版本創建一個新的快照(snapshot)存儲庫(repository)。有效的存儲庫(repository)設置取決于存儲庫(repository)類型。
如果您向多個群集注冊同一快照(snapshot)存儲庫(repository),則只有一個群集應具有對該存儲庫(repository)的寫訪問權限。連接到該存儲庫(repository)的所有其他集群應將存儲庫(repository)設置為只讀模式。
快照(snapshot)格式可能會在主要版本之間發生變化,因此,如果多個不同版本的集群嘗試寫入同一存儲庫(repository),則一個集群寫的快照(snapshot)可能對另一集群不可見,并且存儲庫(repository)可能已損壞。
創建repository操作
PUT /_snapshot/my_backup {"type": "fs","settings": {"location": "my_backup_location"} }To retrieve information about a registered repository, use a GET request:
GET /_snapshot/my_backup返回 {"my_backup": {"type": "fs","settings": {"location": "my_backup_location"}} }也可獲取多個repository的信息
GET /_snapshot/repo*,*backup* GET /_snapshot GET /_snapshot/_all4.基于共享文件系統配置repository
共享文件系統存儲庫(repository)(“類型”:“ fs”)使用共享文件系統存儲快照(snapshot)。為了注冊共享文件系統存儲庫(repository),必須將相同的共享文件系統安裝到所有主節點和數據節點上的相同位置。此位置(或其父目錄之一)必須在所有主節點和數據節點上的path.repo設置中注冊。
假設共享文件系統已安裝到/ mount/backups/my_fs_backup_location,則應將以下設置添加到elasticsearch.yml文件中:
path.repo: ["/mount/backups", "/mount/longterm_backups"]重新啟動所有節點后,可以使用以下命令注冊名稱為my_fs_backup的共享文件系統存儲庫(repository):
PUT /_snapshot/my_fs_backup {"type": "fs","settings": {"location": "/mount/backups/my_fs_backup_location","compress": true} }也可以使用相對路徑 PUT /_snapshot/my_fs_backup {"type": "fs","settings": {"location": "my_fs_backup_location","compress": true} }支持的參數有
5. source only repository
使用源存儲庫(repository),您可以創建最少的僅source的快照(snapshot),占用的磁盤空間最多減少50%。源快照(snapshot)包含stored field和索引元數據。它們不包括索引或doc_value結構,并且在還原(restore)后不可搜索。還原(restore) source_only 快照(snapshot)后,必須將數據reindex到新的索引中。
源存儲庫代表了另一種repository
僅當啟用_source字段并且未應用任何源篩選時,才支持 source_only 快照(snapshot)。還原(restore)source_only 快照(snapshot)時:
創建源存儲庫(repository)時,必須指定將存儲快照(snapshot)的repository的類型和名稱:
PUT _snapshot/my_src_only_repository {"type": "source","settings": {"delegate_type": "fs","location": "my_backup_location"} }樣例
PUT _snapshot/src_back {"type": "source","settings": {"delegate_type": "fs","location": "my_backup_location"} }創建index,使用自動mapping識別的方式
PUT source_index/_doc/1 {"title":"this is a text doc" }GET source_index/ 返回{"source_index" : {"aliases" : { },"mappings" : {"properties" : {"title" : {"type" : "text","fields" : {"keyword" : {"type" : "keyword","ignore_above" : 256}}}}},"settings" : {"index" : {"creation_date" : "1605500191921","number_of_shards" : "1","number_of_replicas" : "1","uuid" : "-GxxcRWNRRiT-Ot6cEJuLA","version" : {"created" : "7020099"},"provided_name" : "source_index"}}} }創建snapshot
POST _snapshot/src_back/srcback02?wait_for_completion=true {"indices": "source_index" }恢復
POST _snapshot/src_back/srcback02/_restore {"rename_pattern": "(source_index)","rename_replacement": "restored_index_$1" }查看恢復后的index的mapping和setting GET restored_index_source_index?flat_settings=true 返回 {"restored_index_source_index" : {"aliases" : { },"mappings" : {"enabled" : false,"_meta" : {"_doc" : {"properties" : {"title" : {"type" : "text","fields" : {"keyword" : {"type" : "keyword","ignore_above" : 256}}}}}}},"settings" : {"index.blocks.write" : "true","index.creation_date" : "1605500191921","index.number_of_replicas" : "1","index.number_of_shards" : "1","index.provided_name" : "source_index","index.source_only" : "true","index.uuid" : "dMDTfqUoRIGkBIm6VFb9DA","index.version.created" : "7020099"}}可以看到對應的mapping只有enable和_meta字段,沒有properties字段
而且enable是false,所以這些字段都不會被index,不能被檢索
setting中有
"index.blocks.write" : "true","index.source_only" : "true",等設置
6. 其他存儲類型的repository
這些都要使用plugin才行
repository-s3 for S3 repository support
repository-hdfs for HDFS repository support in Hadoop environments
repository-azure for Azure storage repositories
repository-gcs for Google Cloud Storage repositories
7. verify repository的狀態
注冊存儲庫(repository)后,系統會立即在所有主節點和數據節點上對存儲庫(repository)進行驗證,以確保該存儲庫(repository)在集群中當前存在的所有節點上都可以正常運行。在注冊或更新存儲庫(repository)時,可以使用verify參數來顯式禁用存儲庫(repository)驗證:
PUT /_snapshot/my_unverified_backup?verify=false {"type": "fs","settings": {"location": "my_unverified_backup_location"} }POST /_snapshot/my_unverified_backup/_verify8. snapshot快照(snapshot)操作
一個存儲庫(repository)可以包含同一集群的多個快照(snapshot)。快照(snapshot)由群集中的唯一名稱標識。可以通過執行以下命令來創建存儲庫(repository)my_backup中名稱為snapshot_1的快照(snapshot):
PUT /_snapshot/my_backup/snapshot_1?wait_for_completion=truewait_for_completion參數指定快照(snapshot)初始化(默認值)后應立即返回請求還是等待快照(snapshot)完成。在快照(snapshot)初始化期間,有關所有先前快照(snapshot)的信息將加載到內存中,這意味著在大型存儲庫(repository)中,即使將wait_for_completion參數設置為false,此命令也可能需要幾秒鐘(甚至幾分鐘)才能返回。
默認情況下,將創建集群中所有打開和啟動的索引的快照(snapshot)。可以通過在快照(snapshot)請求的正文中指定索引列表來更改此行為。
PUT /_snapshot/my_backup/snapshot_2?wait_for_completion=true {"indices": "index_1,index_2","ignore_unavailable": true,"include_global_state": false }可以使用支持多索引語法的indexs參數指定應包含在快照(snapshot)中的索引列表。快照(snapshot)請求還支持ignore_unavailable選項。將其設置為true將導致在快照(snapshot)創建期間不存在的索引被忽略。默認情況下,如果未設置ignore_unavailable選項并且缺少索引,則快照(snapshot)請求將失敗。將include_global_state設置為false可以防止將群集全局狀態存儲為快照(snapshot)的一部分。默認情況下,如果參與快照(snapshot)的一個或多個索引沒有所有可用的主分片,則整個快照(snapshot)將失敗。通過將partial設置為true,可以更改此行為。
快照(snapshot)名稱可以使用日期數學表達式自動導出,類似于創建新索引時。請注意,特殊字符需要進行URI編碼。
例如,可以使用以下命令來實現以當前日期作為名稱創建快照(snapshot),例如snapshot-2018.05.11。
# PUT /_snapshot/my_backup/<snapshot-{now/d}> PUT /_snapshot/my_backup/%3Csnapshot-%7Bnow%2Fd%7D%3E索引快照(snapshot)過程是增量的。在制作索引快照(snapshot)的過程中,Elasticsearch分析已存儲在存儲庫(repository)中的索引文件的列表,并僅復制自上一個快照(snapshot)以來創建或更改的文件。這樣可以將多個快照(snapshot)以緊湊的形式保存在存儲庫(repository)中。快照(snapshot)過程以非阻塞方式執行。可以繼續對正在快照(snapshot)的索引執行所有索引和搜索操作。但是,快照(snapshot)代表創建快照(snapshot)時索引的時間點視圖,因此在快照(snapshot)過程開始后不會添加任何add到索引的記錄。對于已啟動且當前未重定位的主要分片,快照(snapshot)過程將立即啟動。在1.2.0版之前,如果群集具有參與快照(snapshot)的索引的任何重定位或初始化主鍵,則快照(snapshot)操作將失敗。從1.2.0版開始,Elasticsearch在對快照(snapshot)進行快照(snapshot)之前,等待碎片的重新定位或初始化完成。
除了創建每個索引的副本之外,快照(snapshot)過程還可以存儲全局群集元數據,其中包括持久性群集設置和模板。瞬態設置和注冊的快照(snapshot)存儲庫(repository)不存儲為快照(snapshot)的一部分。
群集中任何時間只能執行一個快照(snapshot)過程。在創建特定分片的快照(snapshot)時,該分片無法移動到另一個節點,這可能會干擾重新平衡過程和分配篩選。快照(snapshot)完成后,Elasticsearch將只能將分片移動到另一個節點(根據當前的分配過濾設置和重新平衡算法)。
創建快照(snapshot)后,可以使用以下命令獲取有關該快照(snapshot)的信息:
GET /_snapshot/my_backup/snapshot_1該命令返回有關快照(snapshot)的基本信息,包括開始和結束時間,創建快照(snapshot)的Elasticsearch版本,包含的索引列表,快照(snapshot)的當前狀態以及快照(snapshot)過程中發生的故障列表。快照(snapshot)狀態可以是
IN_PROGRESS: 快照(snapshot)當前正在運行。
SUCCESS: 快照(snapshot)完成,所有分片已成功存儲。
FAILED: 快照(snapshot)以錯誤結束,無法存儲任何數據。
PARTIAL: 全局群集狀態已存儲,但沒有成功存儲至少一個分片的數據。在這種情況下,失敗部分應包含有關未正確處理的分片的更多詳細信息。
INCOMPATIBLE: 快照(snapshot)是使用舊版本的Elasticsearch創建的,因此與集群的當前版本不兼容。
如果某些快照(snapshot)不可用,該命令將失敗。布爾參數ignore_unavailable可用于返回當前可用的所有快照(snapshot)。
從成本和性能的角度來看,在基于云的存儲庫(repository)中獲取存儲庫(repository)中的所有快照(snapshot)可能會付出高昂的代價。如果唯一需要的信息是存儲庫(repository)中的快照(snapshot)名稱/ uuid以及每個快照(snapshot)中的索引,則可以將可選的布爾參數verbose設置為false,以對存儲庫(repository)中的快照(snapshot)執行更高效且更具成本效益的檢索。請注意,將verbose設置為false將忽略有關快照(snapshot)的所有其他信息,例如狀態信息,快照(snapshot)分片的數量等。verbose參數的默認值為true。
可以使用以下命令來檢索當前正在運行的快照(snapshot):
GET /_snapshot/my_backup/_current刪除一個snapshot
DELETE /_snapshot/my_backup/snapshot_2從存儲庫(repository)中刪除快照(snapshot)后,Elasticsearch會刪除與刪除的快照(snapshot)關聯且未被其他任何快照(snapshot)使用的所有文件。如果在創建快照(snapshot)時執行了刪除的快照(snapshot)操作,則快照(snapshot)過程將中止,并且將清理作為快照(snapshot)過程一部分創建的所有文件。因此,刪除快照(snapshot)操作可用于取消誤啟動的長時間運行的快照(snapshot)操作。
刪除repository
DELETE /_snapshot/my_backup這個只是刪除了指向該地址的應用,并不會清除repository中的snapshot文件
9.resotre 恢復操作
POST /_snapshot/my_backup/snapshot_1/_restore默認情況下,將還原(restore)快照(snapshot)中的所有索引,并且不還原(restore)群集狀態。通過使用還原(restore)請求主體中的索引和include_global_state選項,可以選擇應還原(restore)的索引以及允許還原(restore)全局群集狀態。索引列表支持多索引語法。還可以使用rename_pattern和rename_replacement選項在還原(restore)時使用支持引用原始文本的正則表達式來重命名索引,如此處所述。將include_aliases設置為false可以防止別名與關聯索引一起還原(restore)
POST /_snapshot/my_backup/snapshot_1/_restore {"indices": "index_1,index_2","ignore_unavailable": true,"include_global_state": true,"rename_pattern": "index_(.+)","rename_replacement": "restored_index_$1" }可以在正常運行的群集上執行還原(restore)操作。但是,僅當現有索引closed且分片數量與快照(snapshot)中的索引數量相同時,才能還原(restore)該索引。如果關閉了已還原(restore)的索引,則還原(restore)操作會自動打開它們;如果集群中不存在已創建的索引,則會自動創建新索引。如果使用include_global_state還原(restore)了群集狀態(默認為false),則會添加群集中當前不存在的已還原(restore)模板,并使用已還原(restore)的模板替換具有相同名稱的現有模板。還原(restore)的持久性設置將添加到現有的持久性設置中。
1. partial restore 部分恢復
默認情況下,如果參與該操作的一個或多個索引沒有所有可用分片的快照(snapshot),則整個還原(restore)操作將失敗。例如,如果某些分片無法快照(snapshot),則會發生這種情況。通過將partial設置為true,仍然可以恢復此類索引。請注意,在這種情況下,只有成功快照(snapshot)的分片將被還原(restore),所有丟失的分片將被重新創建為空。
2. restore的時候change index settings
POST /_snapshot/my_backup/snapshot_1/_restore {"indices": "index_1","index_settings": {"index.number_of_replicas": 0},"ignore_index_settings": ["index.refresh_interval"] }3. restore到different cluster當中去
快照(snapshot)中存儲的信息不綁定到特定的群集或群集名稱。因此,可以將一個群集中的快照(snapshot)還原(restore)到另一個群集中。所需要做的就是在新集群中注冊包含快照(snapshot)的存儲庫(repository)并開始還原(restore)過程。新群集不必具有相同的大小或拓撲。但是,新群集的版本應該與用于創建快照(snapshot)的群集相同或更高(只有1個主要版本更新)。例如,您可以將1.x快照(snapshot)還原(restore)到2.x群集,但不能將1.x快照(snapshot)還原(restore)到5.x群集。
如果新群集的大小較小,則應考慮其他因素。首先,必須確保新群集具有足夠的容量以將所有索引存儲在快照(snapshot)中。可以在還原(restore)過程中更改索引設置,以減少副本數量,這有助于將快照(snapshot)還原(restore)到較小的群集中。也可以使用indexs參數選擇索引的子集。
如果使用分片分配過濾將原始群集中的索引分配給特定節點,則將在新群集中強制執行相同的規則。因此,如果新集群不包含具有可分配還原(restore)索引的適當屬性的節點,則除非在還原(restore)操作期間更改了這些索引分配設置,否則無法成功還原(restore)該索引。
還原(restore)操作還檢查還原(restore)的持久性設置是否與當前群集兼容,以避免意外還原(restore)不兼容的設置。如果需要使用不兼容的持久性設置還原(restore)快照(snapshot),請嘗試在不具有全局群集狀態的情況下還原(restore)快照(snapshot)。
10. snapshot/resotre的狀態監測
GET /_snapshot/my_backup/snapshot_1GET /_snapshot/my_backup/snapshot_1/_status參考
https://www.cnblogs.com/sanduzxcvbnm/p/12090809.html
總結
以上是生活随笔為你收集整理的09.snapshot and restore操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 08.remote_cluster配置
- 下一篇: 02.pipeline常用process