1、fs方式(备份到本地挂载的硬盘)
(1) 创建一个仓库
注:需要在elasticsearch中config/elasticsearch.yml文件中添加权限 path.repo: ["/home/ccx/es/backups", "/mount/my_backup"]
(1.1) 除了localhost参数外,还可以通过max_snapshot_bytes_per_sec和max_restore_bytes_per_sec来限制备份和恢复时的速度。默认均为(20mb/s)
(2) 备份索引
(2.1) 仓库创建好,就可以进行数据备份了。一个仓库可以包含多个快照(snapshot),快照可以存所有的索引、部分索引或者一个单独的索引,可以给索引指定一个唯一的名字。
(2.2) 如果你想api同步执行,可以加入wait_for_completion标志
(2.3) 如果只想备份部分索引的话,可以加上indices参数:
不要手动删除文件(ElasticSearch一贯主张只用api操作,尤其是大集群中),删除snapshot_2
(4.1)
备份好后,恢复就更容易了,恢复snapshot_1里的全部索引
另外可以使用下面两个api查询状态:
(1) 创建一个仓库
PUT /_snapshot/my_backup
{
"type": "fs",
"settings": {
"location": "/mount/my_backup"
}
}
--上面代码创建一个名为“my_backup”的备份,存放在本地磁盘的/mount/my_backup目录下。
注:需要在elasticsearch中config/elasticsearch.yml文件中添加权限 path.repo: ["/home/ccx/es/backups", "/mount/my_backup"]
(1.1) 除了localhost参数外,还可以通过max_snapshot_bytes_per_sec和max_restore_bytes_per_sec来限制备份和恢复时的速度。默认均为(20mb/s)
POST http://localhost:9200/_snapshot/my_backup/ (POST /_snapshot/my_backup)
{
"type": "fs",
"settings": {
"location": "/mount/my_backup",
"max_snapshot_bytes_per_sec" : "50mb",
"max_restore_bytes_per_sec" : "50mb"
}
}
注:第一段代码的PUT请求,用来创建respository,第二段代码的POST请求,用来修改已经存在的respository
(2) 备份索引
(2.1) 仓库创建好,就可以进行数据备份了。一个仓库可以包含多个快照(snapshot),快照可以存所有的索引、部分索引或者一个单独的索引,可以给索引指定一个唯一的名字。
PUT http://localhost:9200/_snapshot/my_backup/snapshot_1 (PUT /_snapshot/my_backup/snapshot_1)
上面代码会将所有正在运行的索引,备份到my_backup仓库下一个叫snapshot_1的快照中。上面的api会立刻返回,然后备份工作在后台进行。
(2.2) 如果你想api同步执行,可以加入wait_for_completion标志
PUT http://localhost:9200/_snapshot/my_backup/snapshot_1 (PUT /_snapshot/my_backup/snapshot_1)
注:上面的方法会在备份完成后才返回,如果数据量大的话,会花比较长的时间。
(2.3) 如果只想备份部分索引的话,可以加上indices参数:
PUT http://localhost:9200/_snapshot/my_backup/snapshot_2 (PUT /_snapshot/my_backup/snapshot_2)
{
"indices": "index_1,index_2"
}
(3) 删除备份
不要手动删除文件(ElasticSearch一贯主张只用api操作,尤其是大集群中),删除snapshot_2
DELETE http://localhost:9200/_snapshot/my_backup/snapshot_2 (DELETE /_snapshot/my_backup/snapshot_2)
(4) 查看备份信息
(4.1)
DELETE http://localhost:9200/_snapshot/my_backup/snapshot_2 (DELETE /_snapshot/my_backup/snapshot_2)
返回值类似以下值:
{
"snapshots": [
{
"snapshot": "snapshot_1",
"uuid": "46ElP6lrQt2MLVlaj57yXg",
"version_id": 5020099,
"version": "5.2.0",
"indices": [
"book_index"
],
"state": "SUCCESS",
"start_time": "2018-03-20T08:14:38.920Z",
"start_time_in_millis": 1521533678920,
"end_time": "2018-03-20T08:14:40.522Z",
"end_time_in_millis": 1521533680522,
"duration_in_millis": 1602,
"failures": [],
"shards": {
"total": 5,
"failed": 0,
"successful": 5
}
}
]
}
(4.2) 如果查看所有索引下的信息,是用以下api:
GET http://localhost:9200/_snapshot/my_backup/_all (GET /_snapshot/my_backup/_all)
另外还有个一api可以看到更加详细的信息:
GET http://localhost:9200/_snapshot/my_backup/snapshot_3/_status
(5) 恢复备份
备份好后,恢复就更容易了,恢复snapshot_1里的全部索引
POST http://localhost:9200/_snapshot/my_backup/snapshot_1/_restore
这个api还有额外的参数:
POST http://localhost:9200/_snapshot/my_backup/snapshot_1/_restore
{
"indices": "index_1",
"rename_pattern": "index_(.+)",
"rename_replacement": "restored_index_$1"
}
参数indices设置只恢复index_1的索引,参数rename_pattern和rename_replacement用来正则匹配要恢复的索引,并且重命名。和备份一样,api会立刻返回值,然后在后台进行恢复,只用wait_for_completion标记强制同步执行。
另外可以使用下面两个api查询状态:
GET http://localhost:9200/_recovery/restored_index_3
GET http://localhost:9200/_recovery/
如果要取消恢复过程(不管是已经恢复完,还是正在恢复),直接删除索引即可:
DELETE http://localhost:9200/restored_index_3