ElasticSearch 数据的备份与恢复

备份

阿里云的ElasticSearch

如果使用的是阿里云的 ES 产品,则参考下面的步骤:

  1. 开通对象存储服务OSS,并新建一个Bucket。
  2. 创建标准存储类型的Bucket(不支持归档存储类型),且Bucket的地域与Elasticsearch实例的地域保持一致。
  3. 创建一个RAM用户,拥有上面Bucket的读写权限。
  4. 在ES控制台登录Kibana,执行下面的命令,创建一个名为my_backup的快照仓库。
PUT _snapshot/my_backup/
{
    "type": "oss",
    "settings": {
        "endpoint": "http://oss-cn-hangzhou-internal.aliyuncs.com",
        "access_key_id": "xxxx",
        "secret_access_key": "xxxxxx",
        "bucket": "xxxxxx",
        "compress": true,
        "chunk_size": "500mb",
        "base_path": "snapshot/"
    }
}
  1. 执行下面的命令,确认上述仓库创建成功。
获取所有仓库的信息
GET _snapshot

获取指定仓库的信息
GET _snapshot/my_backup
  1. 执行下面的命令,为全部的索引创建快照。
PUT _snapshot/my_backup/snapshot_1

以上命令会为所有打开的索引创建名称为 snapshot_1的快照,并保存到 my_backup仓库中。该命令会立刻返回,并在后台执行备份任务。如果您希望任务执行完成后再返回,可通过添加 wait_for_completion实现。该参数会阻塞调用直到备份完成,如果是大型快照,需要很长时间才能返回。

PUT _snapshot/my_backup/snapshot_1?wait_for_completion=true
  • 一个仓库可以包含多个快照,每个快照中可以包含所有、部分或单个索引的备份数据。
  • 第一次创建快照时,系统会备份所有的数据,后续所有的快照仅备份已存快照和新快照之间的增量数据。随着快照的不断进行,备份也在增量的添加和删除。这意味着后续备份会相当快速,因为它们只传输很小的数据量。
  1. 执行下面的命令,查看创建的快照,确认快照状态为SUCCESS。
GET _snapshot/my_backup/_all

系统返回类似下面的结果。

{
  "snapshots": [
    {
      "snapshot": "snapshot_1",
      "uuid": "vIdSCkthTeGa0nSj4D****",
      "version_id": 5050399,
      "version": "5.5.3",
      "indices": [
        ".kibana"
      ],
      "state": "SUCCESS",
      "start_time": "2018-06-28T01:22:39.609Z",
      "start_time_in_millis": 1530148959609,
      "end_time": "2018-06-28T01:22:39.923Z",
      "end_time_in_millis": 1530148959923,
      "duration_in_millis": 314,
      "failures": [],
      "shards": {
        "total": 1,
        "failed": 0,
        "successful": 1
      }
    },
    {
      "snapshot": "snapshot_3",
      "uuid": "XKO_Uwz_Qu6mZrU3Am****",
      "version_id": 5050399,
      "version": "5.5.3",
      "indices": [
        ".kibana"
      ],
      "state": "SUCCESS",
      "start_time": "2018-06-28T01:25:00.764Z",
      "start_time_in_millis": 1530149100764,
      "end_time": "2018-06-28T01:25:01.482Z",
      "end_time_in_millis": 1530149101482,
      "duration_in_millis": 718,
      "failures": [],
      "shards": {
        "total": 1,
        "failed": 0,
        "successful": 1
      }
    }
  ]
}

如果需要,可以执行下面的命令,删除快照。

# 删除所有快照
DELETE _snapshot/my_backup/_all

# 删除指定快照
DELETE _snapshot/my_backup/snapshot_3
  1. 进入OSS,可以看到快照文件已经被创建。

自建ElasticSearch

  1. 在配置文件config/elasticsearch.yml中添加一行数据,设置ES备份的快照数据存储路径,设置好后,需要重启ES。重启ES的方法只有kill掉进程,然后重新运行es。
path.repo: ["/tmp/backups/my_backup"] 
  1. 备份数据之前,要创建一个仓库来保存数据。
curl -H "Content-Type:application/json" -XPUT '127.0.0.1:9200/_snapshot/my_backup' -d '
{
    "type": "fs", 
    "settings": {
        "location": "/tmp/backups/my_backup" 
    }
}'
  1. 执行下面的命令,生成快照。
curl -H "Content-Type:application/json" -XPUT '127.0.0.1:9200/_snapshot/my_backup/snapshot_1'

执行下面的命令,查看快照信息。

curl -H "Content-Type:application/json" -XGET '127.0.0.1:9200/_snapshot/my_backup/snapshot_1?pretty=true'

恢复

阿里云的ElasticSearch

  1. 登录Kibana,确认OSS Bucket中存在快照文件,也可以参考上面备份快照中的命令,确认快照存在。
  2. 执行下面的命令,通过快照恢复数据。
# 将指定快照中备份的所有索引恢复到Elasticsearch集群中。
POST _snapshot/my_backup/snapshot_1/_restore
# 假设snapshot_1中包含5个索引,那么这5个索引都会被恢复到集群中。
# _restore API会立刻返回,恢复进程会在后台进行。如果您希望调用阻塞直到恢复完成,可以添加wait_for_completion参数。
POST _snapshot/my_backup/snapshot_1/_restore?wait_for_completion=true

也可以使用下面的命令,恢复所有不包括.开头的系统索引。

POST _snapshot/my_backup/snapshot_1/_restore 
{"indices":"*,-.monitoring*,-.security*,-.kibana*","ignore_unavailable":"true"}

自建ElasticSearch

在Linux命令行中执行下面的命令,通过快照恢复数据。

curl -H "Content-Type:application/json" -XPOST '127.0.0.1:9200/_snapshot/my_backup/snapshot_1/_restore'

更多信息

当你需要从阿里云ES导出数据到自建ES时,可参考下面的流程:

  1. 在阿里云ES中创建快照。
  2. 从OSS中下载快照文件到本地。
  3. 从本地将快照文件上传到自建ES所在服务器。
  4. 自建ES创建快照到指定目录。
  5. 备份该目录,将步骤3中的快照文件移动到自建ES的快照目录。
  6. 在自建ES中通过恢复命令,恢复快照。
  7. 反之,从自建ES导入数据到阿里云ES,是同理的。

参考文档

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容