Elasticsearch的備份和恢復

備份

Elasticsearch的一大特點就是使用簡單,api也比較強大,備份也不例外。簡單來說,備份分兩步:1、創建一個倉庫。2、備份指定索引。下面一步一步來:

1、創建一個倉庫(creating the repository)

備份數據之前,要創建一個倉庫來保存數據,倉庫的類型支持Shared filesystem, Amazon S3, HDFS和Azure Cloud。下面以文件系統爲例:

[javascript] view plain copy
 print?
  1. PUT http://127.0.0.1:9200/_snapshot/my_backup   
  2. {  
  3.     "type""fs",   
  4.     "settings": {  
  5.         "location""/mount/backups/my_backup"   
  6.     }  
  7. }  

上面的代碼,我們創建了一個名叫my_backup 的備份,存放在本地的/mount/backups/my_backup 目錄下。除了location 參數外,還可以通過max_snapshot_bytes_per_sec 和max_restore_bytes_per_sec 來限制備份和恢復時的速度,如下:

[javascript] view plain copy
 print?
  1. POST http://127.0.0.1:9200/_snapshot/my_backup/   
  2. {  
  3.     "type""fs",  
  4.     "settings": {  
  5.         "location""/mount/backups/my_backup",  
  6.         "max_snapshot_bytes_per_sec" : "50mb",   
  7.         "max_restore_bytes_per_sec" : "50mb"  
  8.     }  
  9. }  

注意:第一段代碼用的是PUT 請求,用來創建repository,第二段代碼用的是POST 請求,來修改已經存在的repository。

2、備份索引

倉庫創建好之後就可以開始備份了。一個倉庫可以包含多個快照(snapshots),快照可以存所有的索引,部分索引或者一個單獨的索引。可以給索引指定一個唯一的名字:

[javascript] view plain copy
 print?
  1. PUT http://127.0.0.1:9200/_snapshot/my_backup/snapshot_1  

上面的代碼會將所有正在運行的索引,備份到my_backup倉庫下一個叫snapshot_1的快照中。上面的api會立刻返回,然後備份工作在後臺運行。如果你想api同步執行,可以加wait_for_completion標誌:

[javascript] view plain copy
 print?
  1. PUT http://127.0.0.1:9200/_snapshot/my_backup/snapshot_1?wait_for_completion=true  

上面的方法會在備份完成後才返回,如果數據量大的話,會花很長時間。

如果只想備份部分索引的話,可以加上indices 參數:

[javascript] view plain copy
 print?
  1. PUT http://127.0.0.1:9200/_snapshot/my_backup/snapshot_2  
  2. {  
  3.     "indices""index_1,index_2"  
  4. }  

3、刪除備份

不要手動刪除文件(Elasticsearch一貫主張使用api操作,尤其是大集羣中),刪除snapshot_2:

[javascript] view plain copy
 print?
  1. DELETE http://127.0.0.1:9200/_snapshot/my_backup/snapshot_2  
如果備份正在後臺進行,也可以直接刪除來取消此次備份。

4、查看備份信息

[javascript] view plain copy
 print?
  1. GET http://127.0.0.1:9200/_snapshot/my_backup/snapshot_2  
返回類似下面的值:
[javascript] view plain copy
 print?
  1. {  
  2.    "snapshots": [  
  3.       {  
  4.          "snapshot""snapshot_2",  
  5.          "indices": [  
  6.             ".marvel_2014_28_10",  
  7.             "index1",  
  8.             "index2"  
  9.          ],  
  10.          "state""SUCCESS",  
  11.          "start_time""2014-09-02T13:01:43.115Z",  
  12.          "start_time_in_millis": 1409662903115,  
  13.          "end_time""2014-09-02T13:01:43.439Z",  
  14.          "end_time_in_millis": 1409662903439,  
  15.          "duration_in_millis": 324,  
  16.          "failures": [],  
  17.          "shards": {  
  18.             "total": 10,  
  19.             "failed": 0,  
  20.             "successful": 10  
  21.          }  
  22.       }  
  23.    ]  
  24. }  
如果要查看所有索引的信息,使用如下api:
[javascript] view plain copy
 print?
  1. GET http://127.0.0.1:9200/_snapshot/my_backup/_all  

另外還有個一api可以看到更加詳細的信息:

[javascript] view plain copy
 print?
  1. GET http://127.0.0.1:9200/_snapshot/my_backup/snapshot_3/_status  
具體不說了,自己玩一下就知道了,詳細內容可以查看官方的文檔

恢復

備份好後,恢復就更容易了,恢復snapshot_1裏的全部索引:

[javascript] view plain copy
 print?
  1. POST http://127.0.0.1:9200/_snapshot/my_backup/snapshot_1/_restore  

這個api還有額外的參數:

[javascript] view plain copy
 print?
  1. POST http://127.0.0.1:9200/_snapshot/my_backup/snapshot_1/_restore  
  2. {  
  3.     "indices""index_1",   
  4.     "rename_pattern""index_(.+)",   
  5.     "rename_replacement""restored_index_$1"   
  6. }  

參數indices 設置只恢復index_1索引,參數rename_pattern 和rename_replacement 用來正則匹配要恢復的索引,並且重命名。和備份一樣,api會立刻返回值,然後在後臺執行恢復,使用wait_for_completion 標記強制同步執行。

另外可以使用下面兩個api查看狀態:

[javascript] view plain copy
 print?
  1. GET http://127.0.0.1:9200/_recovery/restored_index_3  
  2. GET http://127.0.0.1:9200/_recovery/  

如果要取消恢復過程(不管是已經恢復完,還是正在恢復),直接刪除索引即可:

[javascript] view plain copy
 print?
  1. DELETE http://127.0.0.1:9200/restored_index_3  

更多內容參看官方文檔

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章