Elasticsearch索引数据的备份与恢复

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

Elasticsearch索引数据的备份与恢复

1 背景说明

苍穹的可以将上机日志从数据库中转储到Elasticsearch中,由于这些日志属于生产业务日志数据,不能被清理和丢失的,需要做好备份。可以参考Elasticsearch官方指南-快照恢复:https://www.elastic.co/guide/en/elasticsearch/reference/current/snapshot-restore.html ,下文参考官方指南进行讲解和配置。

备注:Elasticsearch集群模式下,备份仓库路径需要使用共享存储,使每个节点都能共享到。


2 elasticsearch日志备份

2.1 添加备份仓库路径配置

在 config/elasticsearch.yml 文件中加入如下配置:

# 备份仓库的路径,可自定义
path.repo: /kingdee/backup/

配置完成后,需要重启elasticsearch服务: systemctl restart es


2.2 创建备份仓库

# curl -XPUT -H 'Content-Type: application/json' 'http://127.0.0.1:9200/_snapshot/EsBackup_zip' -u 用户名:密码 -d '{"type": "fs","settings": {"location":"备份仓库路径","compress": true}}'

成功后结果返回{"acknowledged":true}. 这时查看刚创建的仓库:

# curl -XGET 'http://127.0.0.1:9200/_snapshot?pretty'

正常结果返回:

{

  "EsBackup_zip" : {

    "type" : "fs",

    "settings" : {

      "compress" : "true",

      "location" : "/kingdee/backup/compress_snapshot"    #此文以该备份路径为例

    }

  }

}

2.3 备份指定索引数据

2.3.1 备份单个索引数据

假设要备份多个索引,以索引名: ierp-log-2022-06-13  为例

# curl -XPUT -H 'Content-Type: application/json' 'http://127.0.0.1:9200/_snapshot/EsBackup_zip/备份名' -d '{"indices": "ierp-log-2022-06-13"}' -u 用户名:密码


2.3.2 备份多个索引数据

假设要备份多个索引, 比如idx_1, idx_2, idx_3, 则可以:

# curl -XPUT -H 'Content-Type: application/json' 'http://127.0.0.1:9200/_snapshot/EsBackup_zip/snapshot_some_name' -d '{"indices": "idx_1,idx_2,idx_3"}' -u 用户名:密码


2.3.3 备份全部索引数据

假设要备份全部索引数据, 则可以:

# curl -XPUT -H 'Content-Type: application/json' 'http://127.0.0.1:9200/_snapshot/EsBackup_zip/snapshot_all' -u 用户名:密码


2.3.4 查看备份状态

# curl -XGET 'http://127.0.0.1:9200/_snapshot/EsBackup_zip/索引名?pretty' -u 用户名:密码



3 elasticsearch恢复备份

默认情况下,恢复请求会尝试恢复快照中的所有常规索引和常规数据流。在大多数情况下,您只需要从快照中恢复特定的索引或数据流。但是,您无法恢复现有的打开索引。

如果您要将数据恢复到预先存在的集群,请使用以下方法之一来避免与现有索引和数据流发生冲突:

·         删除和恢复

·         恢复时重命名

下面讲解恢复索引的操作步骤。


3.1 查看备份的索引

curl -XGET 'http://127.0.0.1:9200/_snapshot?pretty' -u 用户名:密码

查看到备份路径后可以看到index-*文件备份了哪些索引,可以指定单个或多个索引进行恢复。



3.2 恢复备份索引数据

恢复索引前要确保目标es集群中没有存在相同的索引名,或者恢复时重命名索引名。

删除索引语法(支持通配符):

# curl -XDELETE "http://127.0.0.1:9200/索引名" -u 用户名:密码


3.2.1 恢复单个索引数据

恢复单个索引:

# curl -XPOST -H 'Content-Type: application/json' 'http://127.0.0.1:9200/_snapshot/EsBackup_zip/备份名/_restore' -d '{"indices": "索引名"}' -u elastic:Cosmic@2020


3.2.2 恢复索引并重命名索引名

# curl -XPOST -H 'Content-Type: application/json' 'http://127.0.0.1:9200/_snapshot/EsBackup_zip/备份名/_restore' -d '{"indices": "索引名","rename_pattern": "索引名","rename_replacement": "新索引名"}' -u 用户名:密码

参数说明:

indices:只恢复匹配的索引,忽略快照中存在的其他索引,可支持通配符。

rename_pattern:查找所提供的模式能匹配上的正在恢复的索引。用来正则匹配要恢复的索引,并且重命名

rename_replacement:将匹配的索引重命名成替代的模式。用来正则匹配要恢复的索引,并且重命名


3.2.3 恢复整个快照索引数据

# curl -XPOST -H 'Content-Type: application/json' 'http://127.0.0.1:9200/_snapshot/EsBackup_zip/snapshot_all/_restore' -d '{"indices": "索引名*"}' -u 用户名:密码

查看恢复状态:

# curl -XGET "http://127.0.0.1:9200/_snapshot/EsBackup_zip/备份名/_status" -u 用户名:密码

注:由于es创建的用户信息会存放在.security-6索引中,这个索引不能删除,所以在恢复时要排除该索引名的恢复



即只恢复指定索引名数据,下面以索引名为zy-*开头的索引数据为例,注意不要恢复“.security-6”的索引,这个索引记录了用户认证信息,不能被删除

# curl -XPOST -H 'Content-Type: application/json' 'http://127.0.0.1:9200/_snapshot/EsBackup_zip/snapshot_all/_restore' -d '{"indices": "zy-*"}'  -u 用户名:密码

 

查看索引名:

# curl http://127.0.0.1:9200/_cat/indices?v -u 用户名:密码



已经恢复完成




Elasticsearch索引数据的备份与恢复

1 背景说明苍穹的可以将上机日志从数据库中转储到Elasticsearch中,由于这些日志属于生产业务日志数据,不能被清理和丢失的,需要做好备份...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息