elasticsearch快照和恢复
摘要:es可以通過簡單的命令對索引或者整個集群進行快照和恢復(fù)
快照和恢復(fù)
Snapshot and restore 模塊允許創(chuàng)建單個索引或者整個集群的快照到遠(yuǎn)程倉庫. 在初始版本里只支持共享文件系統(tǒng)的倉庫,但是現(xiàn)在通過官方的倉庫插件可以支持各種各樣的后臺倉庫。
倉庫
在進行任何快照或者恢復(fù)操作之前必須有一個快照倉庫注冊在Elasticsearch里。下面的這個命令注冊了 一個名為my_backup?的共享文件系統(tǒng)倉庫,快照將會存儲在?/mount/backups/my_backup?這個目錄。
$ curl -XPUT 'http://localhost:9200/_snapshot/my_backup' -d '{ "type": "fs", "settings": { "location": "/mount/backups/my_backup", "compress": true } }'一旦倉庫被注冊了,就可以只用下面的命令去獲取這個倉庫的信息
$ curl -XGET 'http://localhost:9200/_snapshot/my_backup?pretty' {"my_backup" : {"type" : "fs","settings" : {"compress" : "true","location" : "/mount/backups/my_backup"}} }如果沒有指定倉庫名字,或者使用?_all?作為倉庫名字,Elasticsearch將返回該集群當(dāng)前注冊的所有倉庫的信息:
$ curl -XGET 'http://localhost:9200/_snapshot'or
$ curl -XGET 'http://localhost:9200/_snapshot/_all'共享文件系統(tǒng)的倉庫
共享文件系統(tǒng)倉庫 ("type": "fs") 是使用共享的文件系統(tǒng)去存儲快照。 在?location?參數(shù)里指定的具體存儲路徑必須和共享文件系統(tǒng)里的位置是一樣的并且能被所有的數(shù)據(jù)節(jié)點和master節(jié)點訪問。 另外還支持如下的一些參數(shù)設(shè)置:
| location | 指定快照的存儲位置。必須要有 |
| compress | 指定是否對快照文件進行壓縮. 默認(rèn)是?true. |
| chunk_size | 如果需要在做快照的時候大文件可以被分解成幾塊。這個參數(shù)指明了每塊的字節(jié)數(shù)。也可用不同的單位標(biāo)識。 比如,1g,10m,5k等。默認(rèn)是?null?(表示不限制塊大小)。 |
| max_restore_bytes_per_sec | 每個節(jié)點恢復(fù)數(shù)據(jù)的最高速度限制. 默認(rèn)是?20mb/s |
| max_snapshot_bytes_per_sec | 每個節(jié)點做快照的最高速度限制。默認(rèn)是?20mb/s |
只讀URL倉庫
URL倉庫("type": "url")可以作為使用共享文件系統(tǒng)存儲快照創(chuàng)建的共享文件系統(tǒng)倉庫的只讀訪問方式。?url?參數(shù)指定的URL必須指向共享文件系統(tǒng)倉庫的根。支持的配置方式如下:
| url | 指定快照位置。必須要有 |
倉庫插件
下面這些官方插件中的倉庫后臺都是可用的:
-
AWS Cloud Plugin?亞馬遜S3倉庫
-
HDFS Plugin?Hadoop環(huán)境
-
Azure Cloud Plugin?Azure存儲倉庫
快照
一個倉庫可以包含同一個集群的多個快照??煺崭鶕?jù)集群中的唯一名字進行區(qū)分。 在倉庫?my_backup?里創(chuàng)建一個名為snapshot_1?的快照可以通過下面的命令:
$ curl -XPUT "localhost:9200/_snapshot/my_backup/snapshot_1?wait_for_completion=true"wait_for_completion?參數(shù)指定創(chuàng)建snapshot的請求是否等待快照創(chuàng)建完成再返回。 默認(rèn)情況下,集群中所有打開和啟動的索引是自動創(chuàng)建快照的??梢酝ㄟ^在快照請求里列出需要創(chuàng)建快照的索引。 parameter specifies whether or not the request should return immediately or wait for snapshot completion. By default snapshot of all open and started indices in the cluster is created. This behavior can be changed by specifying the list of indices in the body of the snapshot request.
$ curl -XPUT "localhost:9200/_snapshot/my_backup/snapshot_1" -d '{ "indices": "index_1,index_2", "ignore_unavailable": "true", "include_global_state": false "partial": "false" }'上述命令中通過?indices?參數(shù)指定快照包含的索引,這個參數(shù)支持同時配置多個索引?multi index syntax. 快照請求同樣支持?ignore_unavailable?選項。把這個選項設(shè)置為?true?的時候在創(chuàng)建快照的過程中會忽略不存在的索引。默認(rèn)情況下, 如果沒有設(shè)置?ignore_unavailable?在索引不存在的情況下快照請求將會失敗。通過設(shè)置?include_global_state?為false?能夠防止 集群的全局狀態(tài)被作為快照的一部分存儲起來。默認(rèn)情況下,如果快照中的1個或多個索引不是全部主分片都可用會導(dǎo)致整個創(chuàng)建快照的過 程失敗。 通過設(shè)置?partial?為?true?可以改變這個行為。
索引創(chuàng)建快照的過程是增量的。在給索引創(chuàng)建快照的過程中,Elasticsearch會分析存儲在倉庫中的索引文件并且只會復(fù)制那些自從上次快照 之后新建或有所更新的文件。這使得多個快照以一種緊湊的方式存儲在同一個倉庫里。創(chuàng)建快照的過程是以非阻塞方式執(zhí)行的。一個索引在創(chuàng) 建快照的同時能夠被檢索和查詢。盡管如此,快照保存的是在開始進行創(chuàng)建快照的那個時間點的索引的視圖。所以,在開始創(chuàng)建快照之后的記 錄不會出現(xiàn)在這個快照里。在主分片啟動之后創(chuàng)建快照的過程就會立即開始,并且之后不會改變位置。在1.2.0版本之前如果集群重新定位或者 新加入快照的索引初始化主分片會導(dǎo)致快照操作失敗。從1.2.0版本開始,Elasticsearch會等待重新定位和初始化分片然后再創(chuàng)建快照。
除了給每個索引創(chuàng)建拷貝快照還能存儲集群的全局元數(shù)據(jù),包括集群的設(shè)置和模板。臨時的設(shè)置和已經(jīng)注冊的快照倉庫不會被作為快照的一部 分來存儲。
任何時候在集群里只能有一個創(chuàng)建快照的操作在執(zhí)行。當(dāng)一個分片正在創(chuàng)建快照的時候,這個分片就不能被遷移到別的節(jié)點,因為這會影響重 新平衡和分配過濾的過程。一旦這個分片的快照建立完成,這個分片就可以根據(jù)現(xiàn)有的分配過濾和重新平衡算法被遷移到別的節(jié)點上。
如果快照已經(jīng)建立,我們可以通過如下的命令去獲得快照的信息:
$ curl -XGET "localhost:9200/_snapshot/my_backup/snapshot_1"通過如下的命令可以把倉庫里所有的快照列出來:
$ curl -XGET "localhost:9200/_snapshot/my_backup/_all"可以通過如下的命令將倉庫里的某個快照刪除:
$ curl -XDELETE "localhost:9200/_snapshot/my_backup/snapshot_1"當(dāng)一個快照從倉庫里刪除之后,Elasticsearch會把所有和這個快照相關(guān)并且不被其它快照使用的文件刪除。如果對正在創(chuàng)建的某個快照執(zhí)行 刪除操作,則創(chuàng)建快照的過程會被取消,并且會把創(chuàng)建過程中所有已經(jīng)創(chuàng)建的文件刪除。因此,刪除操作可以用來取消那些由于誤操作引起的 長時間運行的快照操作。
恢復(fù)
快照可以使用如下的操作來恢復(fù):
$ curl -XPOST "localhost:9200/_snapshot/my_backup/snapshot_1/_restore"默認(rèn)情況下,快照中的所有索引以及集群狀態(tài)都會被恢復(fù)。在恢復(fù)請求中可以通過?indices?來指定需要被恢復(fù)的索引,同樣可以使用?include_global_state?選項來防止恢復(fù)集群的狀態(tài)。?indices?支持配置多個索引multi index syntax.rename_pattern?和?rename_replacement?選項可以在恢復(fù)的時候使用正則表達(dá)式來重命名index。詳見?這里.
$ curl -XPOST "localhost:9200/_snapshot/my_backup/snapshot_1/_restore" -d '{ "indices": "index_1,index_2", "ignore_unavailable": "true", "include_global_state": false, "rename_pattern": "index_(.+)", "rename_replacement": "restored_index_$1" }'恢復(fù)操作可以在正在運行的集群上操作。盡管如此,已經(jīng)存在的index只有在關(guān)閉之后才能被恢復(fù)。恢復(fù)操作會自動打開關(guān)閉的恢復(fù)的索引, 并且創(chuàng)建新的索引如果索引不存在。如果集群狀態(tài)也是恢復(fù)的,如果恢復(fù)的模板不存在會被新建,如果同名的模板已經(jīng)存在則會被覆蓋代替。 恢復(fù)的持久性設(shè)置會被增加到現(xiàn)存的持久性設(shè)置里。
快照狀態(tài)
新增于[1.1.0]
正在運行的快照的詳細(xì)信息可以通過如下的命令來獲取:
$ curl -XGET "localhost:9200/_snapshot/_status"在這種格式下,這個命令將會返回所有正在運行的快照的信息。通過指明倉庫名字,能夠把結(jié)果限定到具體的一個倉庫。
$ curl -XGET "localhost:9200/_snapshot/my_backup/_status"如果倉庫名字和快照id都指明了,這個命令就會返回這個快照的詳細(xì)信息,甚至這個快照不是正在運行。
$ curl -XGET "localhost:9200/_snapshot/my_backup/snapshot_1/_status"同樣支持多個快照id:
$ curl -XGET "localhost:9200/_snapshot/my_backup/snapshot_1,snapshot_2/_status"監(jiān)控快照/恢復(fù)進度
有多種方法去監(jiān)控運行時快照和恢復(fù)的進度。這2個操作都支持?wait_for_completion?參數(shù),如果這個了這個參數(shù)將會阻塞客戶端直到 操作完成。這是最簡單的用來獲取操作完成的通知的方法。
快照操作的進度也可以通過定時的調(diào)用下面的命令去獲得:
$ curl -XGET "localhost:9200/_snapshot/my_backup/snapshot_1"注意,獲取快照信息的操作和快照操作使用相同的資源和線程池。所以,執(zhí)行獲取快照信息的操作的時候如果大量的分片正在做快照操作, 在獲取快照新的操作返回結(jié)果之前需要先等到資源可用才行。如果分片太大,等待的時間會挺長。
要獲取更多的及時和完整的關(guān)于快照的信息,可以使用如下的快照狀態(tài)命令。
$ curl -XGET "localhost:9200/_snapshot/my_backup/snapshot_1/_status"獲取快照信息的方法只返回關(guān)于快照進度的基本信息, 快照狀態(tài)命令會返回正在做快照的每個分片的具體信息。
恢復(fù)進度是裝在Elasticsearch的標(biāo)準(zhǔn)恢復(fù)機制里的。所以,標(biāo)準(zhǔn)恢復(fù)監(jiān)控服務(wù)能夠被用來監(jiān)控恢復(fù)的狀態(tài)。當(dāng)恢復(fù)操作在集群里執(zhí)行的時候, 集群通常會變成?紅色?狀態(tài)。可能是因為恢復(fù)操作是從恢復(fù)被恢復(fù)的索引的主分片開始的。在恢復(fù)操作期間主分片變的不可用使得集群處于?紅色?狀態(tài)。一旦主分片的恢復(fù)完成,Elasticsearch會切換到標(biāo)準(zhǔn)復(fù)制過程,在這個過程會創(chuàng)建需要的復(fù)制個數(shù),并且集群狀態(tài)變?yōu)?黃色?。一旦所有的復(fù)制分片創(chuàng)建完成,集群會變成?綠色?狀態(tài)。
集群健康操作只提供恢復(fù)過程的大致狀態(tài)。可以通過?indices recovery?和?cat recovery?APIs 獲取恢復(fù)過程當(dāng)前狀態(tài)的更詳細(xì)的信息。
停止正在運行的快照和恢復(fù)操作
快照和恢復(fù)框架只允許同一時刻每次運行1個快照或恢復(fù)操作。如果正在運行的一個快照是誤操作導(dǎo)致的或者運行的時間太長,可以用快照刪除 操作去終止正在執(zhí)行的快照操作。快照刪除操作會檢查要刪除的快照是否正在運行,如果是,刪除操作先停止這個快照操作,然后再將它從倉庫 里刪除。
恢復(fù)操作是用用標(biāo)準(zhǔn)的分片回復(fù)機制。因此,任何正在運行的恢復(fù)操作可以通過刪除正在恢復(fù)的索引來取消。注意,所有被刪除的索引的數(shù)據(jù)也 會被從集群里刪除。
轉(zhuǎn)載自:http://blog.csdn.net/yinchunxiang/article/details/38727883
轉(zhuǎn)載于:https://www.cnblogs.com/catkins/p/5270368.html
總結(jié)
以上是生活随笔為你收集整理的elasticsearch快照和恢复的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: gsmake —— golang版gra
- 下一篇: canvas画布属性globalAlph