elastichsearch數據備份,恢復,及遷移

遷移注意事項

  • 保證ES集羣不再接受新的數據(如果是備份的話,這一點可以不考慮,但是做數據遷移的話,建議這樣做).
  • 不建議直接在生產環境做這些操作,最好是先在本地搭建一個和生產環境一樣的集羣環境,創建一些測試數據,把整個過程先跑一遍,然後再到生產環境操作。
  • 配置文件中指定path.repo路徑,如:path.repo: /data/backups/elasticsearch
本文假設ES集羣有3個節點,IP分別是: 192.168.0.1, 193.168.0.2, 192.168.0.3

註冊快照倉庫

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’
  • renamepattern: 表示重命名索引以’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的位置爲備份文件所在的地方,然後執行恢復備份的命令即可。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章