最近公司产品将一部分数据存在Elasticsearch中,demo数据希望可以做到每天还原为标准数据,所以学习了下Elasticsearch的备份还原,特此记录下来。
Elasticsearch提供了snapshot API ,它会将集群里当前的状态和数据然后保存到一个共享仓库里。
使用备份API前,需要先创建仓库,有多个仓库类型以供选择:
创建仓库前提需要在Elasticsearch的配置文件 elasticsearch.yml 中增加设置:
path.repo: /data/backup
备份目录可以自定义,但是需要确保集群所有节点都可以访问到,同时注意ES配置文件中空格的要求(某一行配置文件最前面不能有空格,变量冒号后面要有一个空格);
保存配置后,重启ES。
然后,调用 _snapshot api创建仓库,“fs”表示仓库类型,"location"为备份位置;
PUT http:xxxx:9200/_snapshot/my_backup
{
"type": "fs",
"settings": {
"location": "/data/backup/my_backup"
}
}
max_snapshot_bytes_per_sec
当快照数据进入仓库时,这个参数控制这个过程的限流情况。默认是每秒 20mb 。
max_restore_bytes_per_sec
当从仓库恢复数据时,这个参数控制什么时候恢复过程会被限流以保障你的网络不会被占满。默认是每秒 20mb
如果需要增加这些配置并自定义速度,可以使用POST
POST http:xxxx:9200/_snapshot/my_backup/
{
"type": "fs",
"settings": {
"location": "/data/backup/my_backup",
"max_snapshot_bytes_per_sec" : "50mb",
"max_restore_bytes_per_sec" : "50mb"
}
}
备份所有打开的索引到snapshot_1中,调用后会立即返回结果,然后快照在后台运行,同时备份完成后,你可以在备份目录下看到相应文件。
PUT http:xxxx:9200/_snapshot/my_backup/snapshot_1
如果想等备份完成后返回结果也可以加上wait_for_completion=true 参数;
PUT _snapshot/my_backup/snapshot_1?wait_for_completion=true
当然也可以只备份其中几个索引:
PUT _snapshot/my_backup/snapshot_2
{
"indices": "index_1,index_2"
}
还可以参加其他参数,如忽略不可以用的索引,不备份公共部分:
PUT _snapshot/my_backup/snapshot_3
{
"ignore_unavailable": true,
"include_global_state": false
}
查看某个快照时,可以使用
GET _snapshot/my_backup/snapshot_1
查看所有快照时,可以使用“_all”是个通用的,比如关闭所有快照,打开所有快照,都可以使用。
GET _snapshot/my_backup/_all
#关闭所有快照
POST _all/_close
#打开所有快照
POST _all/_open
删除快照时,不建议直接删除备份文件,可以使用DELETE,DELETE也可以取消一个正在备份的快照;
DELETE _snapshot/my_backup/snapshot_1
备份过了数据,恢复它就简单了,只要在你希望恢复回集群的快照ID 加上后面_restore即可,
默认是将快照中所有索引都恢复。
POST _snapshot / my_backup / snapshot_1 / _restore
POST http:xxxx:9200/_snapshot/my_backup/snapshot_1/_restore
恢复命令也可以加上wait_for_completion=true 参数
POST http:xxxx:9200/_snapshot/my_backup/snapshot_1/_restore?wait_for_completion=true