摘要: 在Elasticsearch中的能夠建立快照,它建立單個索引或整個羣集到一個遠程的存儲庫中。在之前的版本中,系統只支持共享存儲的快照建立,最新的版本能夠經過插件支持更多的方式。在執行快照操做前,須要在Elasticsearch中進行註冊快照倉庫。node
在Elasticsearch中的能夠建立快照,它建立單個索引或整個羣集到一個遠程的存儲庫中。在之前的版本中,系統只支持共享存儲的快照建立,最新的版本能夠經過插件支持更多的方式。在執行快照操做前,須要在Elasticsearch中進行註冊快照倉庫。註冊倉庫的設置須要執行倉庫類型,例如:正則表達式
請求:PUT /_snapshot/my_backup算法
參數:json
{
"type": "fs", "settings": { ... repository specific settings ... } }
當註冊後,能夠經過查詢來獲得以前註冊的信息。固然系統也支持用逗號分開來查詢多個註冊,支持通配符查詢多個註冊,甚至可使用_all查詢全部註冊。api
請求:GET /_snapshot/my_backup服務器
返回值:dom
{
"my_backup": { "type": "fs", "settings": { "compress": "true", "location": "/mount/backups/my_backup" } } }
共享文件系統存儲("type": "fs")使用共享文件系統來存儲快照。爲了註冊共享的文件系統存儲庫,必須將同一個共享文件系統安裝到全部主節點和數據節點上相同的位置上。這個位置(或它的父目錄)必須在全部主節點數據節點上設置path.repo參數。假設共享文件系統安裝在/mount/backups/my_backup目錄下,在elasticsearch.yml文件中的設置應增長:elasticsearch
path.repo: ["/mount/backups", "/mount/longterm_backups"]oop
備註:path.repo設置支持微軟Windows UNC路徑,只要服務器名和共享名稱進行正確的設置,例如:url
path.repo: ["\\\\MY_SERVER\\Snapshots"]
只有當全部的節點都從新啓動後,使用如下面的命令能夠爲名稱爲my_backup的共享文件系統庫進行快照和恢復,例如:
請求:PUT http://localhost:9200/_snapshot/my_backup
參數:
{
"type": "fs", "settings": { "location": "/mount/backups/my_backup", "compress": true } }
系統支持相對路徑的,若是存儲位置指定爲相對路徑,則不須要寫具體的全路徑,例如:
請求:PUT http://localhost:9200/_snapshot/my_backup
參數:
{
"type": "fs", "settings": { "location": "my_backup", "compress": true } }
系統支持一下參數:
location:快照位置,必需要有。
compress:打開快照文件的壓縮。壓縮僅適用於元數據文件,數據文件不進行壓縮。默認爲true。
chunk_size:若是須要能夠把大的文件分解成不一樣的快照。塊的大小能夠指定字節例如1G,10m,5K。默認值爲null表示無限的塊大小。
max_restore_bytes_per_sec:使每一個節點的恢復的速度。默認爲40MB每秒。
max_snapshot_bytes_per_sec:每一個節點生成的快照的速度。默認爲40MB每秒。
readonly:使存儲庫只讀。默認爲false。
只讀倉庫
URL倉庫("type": "url")被用在共享文件系統庫中建立只讀方式數據倉庫。在url參數中指定指向共享的文件系統存儲庫的根節點,支持如下設置:
url:強制性的快照位置。
url參數支持如下協議:"http", "https", "ftp", "file" , "jar",在http:, https:, and ftp: 這些協議中,能夠支持白名單,白名單的設置在 repositories.url.allowed_urls 參數中,例如:
repositories.url.allowed_urls: ["http://www.example.org/root/*", "https://*.mydomain.com/*?*#*"]
存儲庫能夠經過插件支持更多的方式,好比:
AWS雲插件的S3存儲庫,Hadoop的HDFS插件環境,Azure雲存儲庫插件。
當一個存儲庫被註冊時,它當即被驗證在全部主節點和數據節點上,以確保它在羣集中的全部節點上均可以使用。驗證參數可用於在註冊或更新存儲庫時顯式禁用,例如:
請求:PUT /_snapshot/s3_repository?verify=false
參數:
{
"type": "s3", "settings": { "bucket": "my_s3_bucket", "region": "eu-west-1" } }
驗證過程也能夠經過運行如下命令來手動執行:
POST /_snapshot/s3_repository/_verify
它返回一個節點列表,若是驗證過程失敗,則會成功驗證或錯誤消息。
本文由賽克 藍德(secisland)原創,轉載請標明做者和出處。
一個存儲庫能夠包含同一個羣集的多個快照。快照在集羣內的名稱是惟一的。在一個庫中建立名稱爲snapshot_1快照能夠執行下面的命令:
PUT /_snapshot/my_backup/snapshot_1?wait_for_completion=true
wait_for_completion參數指定快照初始化後當即返回(默認)仍是等待快照完成後返回。在快照初始化時,全部之前的快照信息加載到內存,這意味着建立一個大的庫快照可能須要幾秒鐘(甚至幾分鐘)。因此有時候wait_for_completion參數設置爲false也是須要等待一會的。
默認狀況下全部打開的快照和在集羣中開始索引時建立,此行爲能夠經過指定快照請求中的索引列表來改變,例如:
請求:PUT /_snapshot/my_backup/snapshot_1
參數:
{
"indices": "index_1,index_2", "ignore_unavailable": "true", "include_global_state": false }
可使用支持多索引語法的索引參數來指定快照的索引列表。快照請求也支持ignore_unavailable選項,將它設置爲true時能夠在快照建立過程當中把不存在的索引忽略掉。默認狀況下,當ignore_unavailable選項不設置或者設置爲false的時候,若是不存在索引,索引的快照請求將失敗。經過設置include_global_state爲false能夠防止集羣全局狀態被被存儲爲快照的一部分。默認狀況下,若是有一個或多個索引沒有可用的主分片整個快照會失敗,這種行爲能夠經過設置部分來改變。
索引快照處理是漸進的。在索引快照的過程當中Elasticsearch會分析索引文件的列表是否已存儲在存儲庫中,同時複製上次建立的快照或更改的文件。這容許在一個緊湊形式的存儲庫中保存多個快照,快照的過程是非阻塞的方式執行。當對索引正在執行快照時全部的索引和搜索操做能夠繼續執行。然而,快照執行的數據是在快照建立時的時間點肯定的,因此在快照過程開始後添加到索引中的記錄將不會再快照中出現。在1.2.0以前版本以前,若是羣集有遷移或者在索引中初始化分片時會失敗,在1.2.0以後,快照的操做會等待這些完成後再操做。一個快照除了建立集羣的副本外,還能夠存儲全局羣集元數據,其中包括持久性羣集設置和模板。臨時設置和註冊的快照庫不會存儲爲快照的一部分。
在任什麼時候間只有一個快照過程在集羣中被執行。而一個特定的快照被建立分片時,這分片不能移動到另外一個節點,它可能干擾再平衡過程和過濾操做。一次快照完成Elasticsearch只能移動一塊到另外一個節點(根據當前配置過濾設置和調整算法)。一旦一個快照完成,關於這個快照的信息,可使用如下命令來得到:
GET /_snapshot/my_backup/snapshot_1
相似的倉庫,對多個快照信息能夠經過一次進行查詢,以及支持通配符,或者用_all查詢全部:
GET /_snapshot/my_backup/snapshot_*,some_other_snapshot
若是一些快照不可用,該命令將失敗。布爾參數ignore_unvailable可用於返回全部目前可用的快照。可使用如下命令查詢當前正在運行的快照:
GET localhost:9200/_snapshot/my_backup/_current
快照能夠從使用下列命令的存儲庫中刪除:
DELETE /_snapshot/my_backup/snapshot_1
當快照是從庫中刪除時,Elasticsearch將刪除與快照關聯的和其餘快照也不使用的全部文件,若是執行快照建立的過程當中同時刪除快照,則快照建立的過程會中止,同時刪除相關的文件。所以,刪除快照操做能夠用來取消被錯誤啓動的長時間運行快照操做。使用下面的命令能夠刪除存儲庫:
DELETE /_snapshot/my_backup
當一個庫被刪除,Elasticsearch僅刪除存儲庫的位置的引用,快照自己並無被刪除。
使用如下命令可恢復快照:
POST /_snapshot/my_backup/snapshot_1/_restore
默認狀況下,快照中的全部索引以及羣集狀態將被恢復,在恢復include_global_state選項時,能夠指定具體的索引和集羣狀態被恢復。索引的列表支持多索引語法。rename_pattern和rename_replacement選項也可用於重命名索引,可使用正則表達式,該表達式支持引用原始文本。設置include_aliases爲假能夠防止相關索引的別名被一塊兒恢復,例如:
請求:POST /_snapshot/my_backup/snapshot_1/_restore
參數:
{
"indices": "index_1,index_2", "ignore_unavailable": "true", "include_global_state": false, "rename_pattern": "index_(.+)", "rename_replacement": "restored_index_$1" }
恢復操做能夠在一個功能集羣上執行。在快照索中有相同數量分片的索引若是是關閉的,則只能恢復。若是索引是關閉的則恢復操做會自動打開索引,若是索引在集羣中不存在,恢復操做將會建立新的索引,若是恢復羣集狀態,則在該羣集中不存在的模板將被添加,已恢復的模板會替換爲具備相同名稱的現有模板。恢復中的設置被添加到現有的設置中。
部分恢復,默認狀況下,若是一個或更多的索引若是沒有可用的快照碎片,整個恢復操做將失敗。若是一些碎片沒有快照,經過設置partial爲true,仍能夠恢復部分索引。請注意,在這種狀況下只有有分片的索引會被正確恢復,沒有的索引會創建空的索引。
在恢復過程當中改變索引設置,在恢復過程當中大多數索引的設置能夠被覆蓋。例如,下面的命令將不建立任何副本而切換回默認刷新間隔的恢復索引index_1:
請求:POST /_snapshot/my_backup/snapshot_1/_restore
參數:
{
"indices": "index_1", "index_settings": { "index.number_of_replicas": 0 }, "ignore_index_settings": [ "index.refresh_interval" ]}
請注意,一些設置,如index.number_of_shards在恢復操做期間是沒法更改的。
恢復到不一樣的集羣,快照中存儲的信息不依賴於特定的羣集或羣集名稱。所以,它有可能恢復從一個羣集到另外一個羣集的快照。僅要求註冊存儲庫中包含快照,並啓動恢復過程,新的羣集不具備相同的大小或拓撲結構。若是一個集羣有的空間比較小,須要考慮的事情有:首先,要確保新的集羣有足夠的容量來存儲快照中的全部索引。在還原的過程當中,能夠改變索引設置,以減小複製的次數,這能夠幫助將快照恢復到較小的羣集,也能夠選擇使用索引參數。在版本1.5.0以前,Elasticsearch沒有檢查恢復持續的設置使得有可能恢復出錯,參數discovery.zen.minimum_master_nodes 禁用一個小集羣直到添加所需的主節點數。從版本1.5.0此的設置將被忽略。若是在原始集羣的索引被分配到特定的節點,使用過濾分片配置,一樣的規則將在新的集羣執行。所以,若是新的羣集不包含具備已有屬性的節點,則該恢復的索引能夠被分配,除非這些索引分配設置在恢復操做期間改變,不然不會恢復成功。
快照statusedit
使用如下命令可得到當前運行快照的詳細狀態信息列表:
GET /_snapshot/_status
下面的命令將返回有關當前正在運行的快照的信息。經過指定一個存儲庫的名稱,能夠將結果限制爲特定的存儲庫:
GET /_snapshot/my_backup/_status
若是指定了存儲庫名稱和快照標識,該命令將返回給定快照的詳細狀態信息:
GET /_snapshot/my_backup/snapshot_1/_status
一樣支持多個id的查詢,例如:
GET /_snapshot/my_backup/snapshot_1,snapshot_2/_status
監控快照恢復過程
當快照的進度和恢復正在運行有幾種方法來監視它們過程。wait_for_completion參數會阻止客戶端直到操做完成。這是最簡單的方法,能夠用來得到有關操做完成的通知。
快照操做還能夠按期對快照信息進行監視,例如:
GET /_snapshot/my_backup/snapshot_1
請注意,快照信息的操做使用相同的資源和線程池做爲快照操做。因此,當大的分片被快照會致使快照操做,在返回結果以前在等待可用資源,因此這種會佔用不少的時間。爲了得到更直接的快照狀態的完整信息,可使用快照狀態命令來查詢,例如:
GET /_snapshot/my_backup/snapshot_1/_status
快照信息方法在處理過程當中返回快照的基本信息,快照狀態返回在快照中每一個分片的當前狀態。
在恢復操做時,Elasticsearch的集羣一般會進入紅色狀態。這是由於還原操做開始恢復的索引主要碎片。在這個操做時,主分片變得不可用,這體如今紅色狀態。一旦碎片恢復完成Elasticsearch是轉換爲標準的複製過程,建立所需數量的副本這時集羣切換到黃色狀態。一旦全部所需的複製品被建立,羣集切換到綠色狀態。羣集健康操做僅爲恢復過程的高層次狀態。經過使用索引恢復和精簡api能夠得到更詳細的恢復過程當中的狀態。
中止當前正在運行的快照和恢復操做
快照和恢復操做容許一次只運行一個快照或一次恢復。若是一個當前運行的快照被錯誤地執行,或者須要很長的時間,可使用快照刪除操做來終止它。快照刪除時是會進行檢查,若是刪除快照正在運行,則中止這次刪除。
還原操做使用標準的分片恢復機制。所以,能夠經過刪除索引來取消恢復的操做。請注意,在這種狀況下全部已刪除索引的數據將被從集羣中移除。
快照和恢復操做對集羣塊的影響,快照和恢復操做都受集羣和索引塊的影響。例如,註冊和註銷庫須要經過編寫全局元數據來進行訪問。快照操做須要全部的索引和元數據以及全局元數據都是可讀的。恢復操做須要全局元數據是可寫的,可是索引水平塊將被忽略,由於在恢復的過程當中索引是重建的。請注意,存儲庫內容不是羣集的一部分,所以羣集塊不影響內部存儲庫操做,例如已註冊的存儲庫中的列表或刪除快照。
賽克藍德(secisland)後續會逐步對Elasticsearch的最新版本的各項功能進行分析,近請期待。也歡迎加入secisland公衆號進行關注。