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  

更多内容参看官方文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值