elasticsearch 使用快照方式遷移數據


注冊快照倉庫

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" }'

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM