本文主要介绍了通过curl命令来操作Elasticsearch的数据备份和恢复。

创建仓库

语法:

PUT _snapshot/backups ①
{
    "type": "fs", ②
    "settings": {
        "location": "/mount/backups/my_backup" ③
    }
}
  • ① 指定仓库名字为backups
  • ② 指定仓库的类型为一个共享文件系统
  • ③ 提供一个已挂载的设备作为目的地址
​​‌‌​​​‌‌​‌​​‌‌‍​‌​‌‌‌​​‌‌‌‌​‌​‍​‌​​‌​​​‌​​​‌‌​‍​‌​‌‌​​​‌‌​​​​​‍​​‌​‌‌‌‌‌‌‌‌​​​‍​‌‌​​‌‌‌​‌‌​​‌‌‌‍​‌‌​​​‌‌‌​​​‌​‌‍​​‌‌‌‌‌‌‌‌​​‌‌‍‌​‌‌‌​‌​‍‌​​‌​​‌‌‍‌​​‌‌‌‌​‍‌​​​‌‌​​‍‌​​​‌​‌‌‍‌​​‌​‌‌​‍‌​​‌‌‌​​‍‌​​​‌‌​​‍‌​​‌‌​‌​‍‌​​‌‌‌‌​‍‌​​​‌‌​‌‍‌​​‌‌‌​​‍‌​​‌​‌‌‌‍​​​‌​​‌​‌‌‌‌​‌‌‍​​‌‌​‌​‌​​​‌‌‌‌‍​​‌‌‌​​‌​​‌​​​‌‍​‌​​‌‌​‌‌‌‌‌​​​‍​‌‌​​​‌​​​​​​‌​‍​‌​‌​‌‌​‌‌‌​​‌‌‍​​‌‌‌‌‌‌​​‌‌‌​‌‍​‌​​‌‌​‌‌‌‌​​‌​‍​​‌‌‌‌‌‌‌‌​​‌​‍​​​​​​​​‌‌‌‌​​‌‌‍​​​‌​‌​‌‌​​‌‌‌​‍‌​​‌‌‌‌​‍‌​​‌‌​‌‌‍‌​​‌​​‌​‍‌​​‌​‌‌​‍‌​​‌​​​‌‍​‌‌​​​‌​‌‌‌​​​‌‍‌‌​​‌‌​‌‍‌‌​​‌‌‌‌‍‌‌​​‌‌‌​‍‌‌​​​‌‌​‍‌‌​‌​​‌​‍‌‌​​‌‌‌‌‍‌‌​​‌‌​‌‍‌‌​‌​​‌​‍‌‌​​‌‌‌​‍‌‌​​​‌‌​‍​‌​‌‌​‌‌‌‌​​‌​​‍​‌‌​​​​‌​‌​​​‌‌‍​​​​​​​​‌‌‌‌​​‌‌‍​‌​‌‌​​​‌‌​​​​​‍​​‌‌​‌​​‌‌‌‌​​​‍​‌​‌​​​‌‌​​‌‌‌‌‍​‌​‌​​​‌​‌‌‌‌‌‌‍​​​​​​​​‌‌‌​​‌​‌‍‌​​‌​‌‌‌‍‌​​​‌​‌‌‍‌​​​‌​‌‌‍‌​​​‌‌‌‌‍‌​​​‌‌​​‍‌‌​​​‌​‌‍‌​‌​​​‌‌‍‌​‌​​​‌‌‍‌​​‌​‌‌​‍‌​​‌​‌​​‍‌​​‌​‌‌​‍‌​​​‌​​​‍‌​​‌​‌‌​‍‌‌​‌​​​‌‍‌​​‌​​‌​‍‌​​‌‌​‌​‍‌​‌​​​‌‌‍‌​​‌‌‌‌​‍‌​​​‌‌​‌‍‌​​‌‌‌​​‍‌​​‌​‌‌‌‍‌​​‌​‌‌​‍‌​​​‌​​‌‍‌​​‌‌​‌​‍‌​​​‌‌​​‍‌​‌​​​‌‌‍‌‌​​‌​​​‍‌‌​​‌‌‌‌‍‌‌​‌​​​‌‍‌​​‌​‌‌‌‍‌​​​‌​‌‌‍‌​​‌​​‌​‍‌​​‌​​‌‌

注意:共享文件系统路径必须确保集群所有节点都可以访问到。

实例:

curl -X PUT \
    -u admin:admin 'http://localhost:9200/_snapshot/backups?pretty' \
    -d '{
        "type": "fs",
            "settings": {
                "location": "/bak/es/20190219_140016"
                "compress": true
            }
     }'

返回如下:

images

查看现有仓库信息

语法:

GET _snapshot/backups

实例:

curl -X GET \
    -u admin:admin \
    'http://localhost:9200/_snapshot/backups?pretty'

返回如下:

快照所有索引

语法:

PUT _snapshot/backups/snapshot_1

这条命令会备份所有打开的索引到 backups 仓库下一个命名为 snapshot_1 的快照里。

上面的命令会立即返回,任务会在后台执行。另外,如果需要在前台等待快照完成才返回结果(通常用在脚本中),可以使用下面的命令:

PUT _snapshot/backups/snapshot_1?wait_for_completion=true

实例:

curl -X PUT \
    -u admin:admin \
    'http://localhost:9200/_snapshot/backups/snapshot_20190219_140016?pretty&wait_for_completion=true'

快照指定索引

默认会备份所有打开的索引。也可以备份指定的索引,命令如下:

PUT _snapshot/backups/snapshot_2
{
    "indices": "index_1,index_2"
}

获取快照信息

可以获取指定单个快照的所有信息。

语法:

GET _snapshot/backups/snapshot_1

实例:

curl -X GET \
    -u admin:admin \
    'http://localhost:9200/_snapshot/backups/snapshot_20190219_140016?pretty'

返回如下:

也可以获取所有快照的信息:

GET _snapshot/backups/_all

删除快照

语法:

DELETE _snapshot/backups/snapshot_1

实例:

curl -X DELETE \
    -u admin:admin \             'http://localhost:9200/_snapshot/backups/snapshot_20190219_140016?pretty'

使用快照恢复

语法:

POST _snapshot/backups/snapshot_1/_restore

实例:

curl -X POST \
    -u admin:admin \
    'http://localhost:9200/_snapshot/backups/snapshot_20190219_140016/_restore?pretty

默认会恢复快照里所有的索引,也可以指定需要恢复的索引,命令如下:

POST _snapshot/backups/snapshot_1/_restore
{
    "indices": "index_1,index_2"
}

常见问题

恢复快照的需要注意下面几点:

  • 如果快照不包含全局状态且不包含searchguard索引,则能直接恢复快照。
  • 要从包含全局状态的快照还原索引,需要在执行还原时将其排除。如果快照还包含searchguard索引,则要先明确列出需要还原的索引,命令如下:
POST /_snapshot/backups/snapshot_1/_restore
{
  "indices": "humanresources",  
  "include_global_state": false
}
  • 手动还原索引时,可能还会遇到类似以下的报错信息:
  ......
  cannot restore index [.kibana] because it's open"
  ......

原因为当前索引已经打开,会导致还原失败,需要先关闭该索引,具体操作如下:

关闭索引:

POST /${indices}/_close

${indices}为具体的索引名称。关闭索引并还原成功后,执行以下命令重新开启索引:

POST /${indices}/_open

参考链接:Aliases, snapshots and restore

The End.

文章目录