注冊快照倉庫
ES是通過快照的方式來實現數據備份,並且是以增量的方式,所以一般第一次做的話會花費較長的時間。為了做快照,那么就需要注冊一個快照倉庫,告訴ES我們的快照應該如何保存以及將快照保存到哪里.
ES的快照倉庫支持如下幾種形式:
- 共享的文件系統,如NAS
- Amazon S3
- HDFS (Hadoop Distributed File System)
- Azure Cloud
通常選擇注冊第一種形式。
任意選擇一個節點,執行如下命令
$ curl -XPUT http://192.168.0.1:9200/_snapshot/my_backup -d '
{ "type": "fs", "settings": { "location": "/data/backups/elasticsearch" } } '
這樣就注冊了一個名為my_backup
的倉庫,這里的location
需要注意,最好是設置一個每個節點都能訪問並且有寫權限的共享目錄,如smb目錄等(如果整個集群就一個節點那么設置為本地目錄也無所謂)。 我自己在做的時候由於設置了本地目錄/data/backups/elasticsearch
, 最后做出來發現快照被分別保存在集群每個節點的/data/backups/elasticsearch
目錄下,並且一個節點保存了一些信息。最后做數據遷移的時候,不得不從每個節點將快照文件拷貝出來,然后合並到一起。
除了location
外,還有一些其他選項可以設置:
- compress 是否壓縮
- max_snapshot_bytes_per_sec 制作快照的速度,默認20mb/s
- max_restore_bytes_per_sec 快照恢復的速度,默認20mb/s
更新倉庫設置如下:
curl -XPOST http://192.168.0.1:9200/_snapshot/my_backup/
{
"type": "fs", "settings": { "location": "/data/backups/elasticsearch", "max_snapshot_bytes_per_sec" : "50mb", "max_restore_bytes_per_sec" : "50mb", "compress" : true } }
這里需要注意一點是,注冊倉庫用的是PUT
, 而更新倉庫設置用的是POST
.
檢查注冊的倉庫信息
$ curl -XGET http://192.168.0.1:9200/_snapshot/my_backup
開始備份
指定快照名稱為snapshot_20150812
$ curl -XPUT http://192.168.0.1:9200/_snapshot/my_backup/snapshot_20150812
執行上面的上面的命令會馬上返回,並在后台執行備份操作, 如果想等到備份完成,可以加上參數wait_for_completion=true
$ curl -XPUT http://192.168.0.1:9200/_snapshot/my_backup/snapshot_20150812?wait_for_completion=true
默認是備份所有的索引indices, 如果要指定index,可以
curl -XPUT http://192.168.0.1:9200/_snapshot/my_backup/snapshot_20150812
{
"indices": "index_1,index_2" }
這個備份過程需要的時間視數據量而定.
查看備份狀態
整個備份過程中,可以通過如下命令查看備份進度
curl -XGET http://192.168.0.1:9200/_snapshot/my_backup/snapshot_20150812/_status
主要由如下幾種狀態:
- INITIALIZING 集群狀態檢查,檢查當前集群是否可以做快照,通常這個過程會非常快
- STARTED 正在轉移數據到倉庫
- FINALIZING 數據轉移完成,正在轉移元信息
- DONE 完成
- FAILED 備份失敗
取消備份
curl -XDELETE http://192.168.0.1:9200/_snapshot/my_backup/snapshot_20150812
恢復備份
curl -XPOST http://192.168.0.1:9200/_snapshot/my_backup/snapshot_20150812/_restore
同備份一樣,也可以設置wait_for_completion=true等待恢復結果
curl -XPOST http://192.168.0.1:9200/_snapshot/my_backup/snapshot_20150812/_restore?wait_for_completion=true
默認情況下,是恢復所有的索引,我們也可以設置一些參數來指定恢復的索引,以及重命令恢復的索引,這樣可以避免覆蓋原有的數據.
curl -XPOST http://192.168.0.1:9200/_snapshot/my_backup/snapshot_20150812/_restore
{
"indices": "index_1", "rename_pattern": "index_(.+)", "rename_replacement": "restored_index_$1" }
- 上面的indices, 表示只恢復索引’index_1’
- rename_pattern: 表示重命名索引以’index_’開頭的索引.
- rename_replacement: 表示將所有的索引重命名為’restored_index_xxx’.如index_1會被重命名為restored_index_1.
查看恢復進度
# 查看所有索引的恢復進度
curl -XGET http://192.168.0.1:9200/_recovery/
# 查看索引restored_index_1的恢復進度
curl -XGET http://192.168.0.1:9200/_recovery/restored_index_1
取消恢復,只需要刪除索引,即可取消恢復
curl -XDELETE http://192.168.0.1:9200/restored_index_1
備份快照遷移
如果需要將快照遷移到另一個集群.只需要將備份文件全部拷貝到要遷移的機器上, 然后再在新的集群上注冊一個快照倉庫,設置location
的位置為備份文件所在的地方,然后執行恢復備份的命令即可。
查看所有索引:
curl 'http://30.0.0.232:9200/_cat/indices?v' curl 'http://30.0.0.232:9200/_cat/indices?v' -s |less
查看單個索引:
curl 10.0.67.23:9200/_cat/indices/ad-2017.*
查看快照信息:
curl -XGET "10.0.67.21:9200/_snapshot/es_backup/snapshot-20171123-16"
恢復快照:
curl -XPOST "10.0.67.21:9200/_snapshot/es_backup/snapshot-20171123-16/_restore" -d'{ "indices": "ad-2017.11.19" }'