自动备份快照到本地OSS仓库

在Elasticsearch集群中,快照是一种简单而且能够满足自动化的备份方式。7.6及以上版本的集群支持通过定义快照生命周期SLM(Snapshot Lifecycle Management)实现自动备份快照;7.6以下版本需要通过客户端定时任务来触发自动备份快照。本文介绍如何在阿里云Elasticsearch上实现定时自动备份快照,并保存至阿里云OSS仓库。

背景信息

  • 关于快照生命周期SLM的详细信息,请参见Snapshot Lifecycle Management

  • Elasticsearch数据备份与恢复依赖于elasticsearch-repository-oss插件,阿里云Elasticsearch实例默认已安装该插件且不可卸载。关于该插件的详细信息,请参见elasticsearch-repository-oss

前提条件

您已完成以下操作:

  • 开通对象存储服务OSS(Object Storage Service),并新建一个Bucket。具体操作,请参见开通OSS服务创建存储空间

    重要

    请创建标准存储类型的Bucket(不支持归档存储类型),开启Bucket公共读权限,且Bucket的地域与Elasticsearch实例的地域保持一致。

  • 创建仓库。具体操作,请参见创建仓库

    重要

    在将快照恢复到目标集群前,也需要在目标集群中创建仓库,并映射到与快照备份相同的OSS地址中。

操作步骤

7.6及以上版本

  1. 创建SLM。

    PUT _slm/policy/auto-snapshots
    {
      "schedule": "0 0 0/12 * * ?",
      "name": "<auto-snap-{now/d}>",
      "repository": "my_auto_backup",
      "config": {
        "indices": "*",
        "include_global_state": true
      },
      "retention": {
        "expire_after": "30d",
        "min_count": 5,
        "max_count": 50
      }
    }

    参数

    说明

    schedule

    定时任务,类似Linux下的crontab命令,取值中的数字分别对应:秒、分钟、小时、天、月、星期、年(可选)。例如,"0 0 0/12 * * ?" 表示每12小时创建一次快照。关于crontab表达式的详细信息,可参见Cron

    name

    快照的名称格式。

    repository

    存放快照的仓库名称。获取方式请参见获取仓库信息

    config

    快照的配置信息:

    • indices:设置快照包含的数据和索引。*表示包含所有的数据和索引。

    • include_global_state:设置快照是否包含集群状态以及feature状态。true:包含,false:不包含。

    retention

    配置快照的保留规则。以上配置示例表示将快照保留30天,保留的快照最少为5个,最多为50个。各参数说明如下:

    • expire_after:快照保留时间。

    • min_count:最少保留多少个快照。即使超过保留时间也要满足最小要求。

    • max_count:最多保留多少个快照。即使未达到保留时间也不能超过最大数。

  2. 执行创建的policy。

    POST _slm/policy/auto-snapshots/_execute

    执行完成后,阿里云Elasticsearch会每隔12小时创建一次快照。您也可以立即执行retention保留规则,命令如下:

    POST _slm/_execute_retention

7.6以下版本

  1. 配置客户端。

  2. 配置并执行定时任务。

    本文以配置crontab定时任务为例,在客户端服务器上,执行以下操作:

    1. 创建curl命令脚本文件。

      vi /root/snapshot.sh
    2. 在脚本文件中,添加集群中待备份快照的curl访问命令,并保存。

      curl -u elastic:***** -X PUT http://es-*****.public.elasticsearch.aliyuncs.com:9200/_snapshot/my_auto_backup_crontab/snapshot_$(date +%s)
    3. 为脚本文件添加可执行的权限。

      chmod +x /root/snapshot.sh
    4. 配置crontab信息,设置脚本定时执行时间(示例中设置每天凌晨2点执行)。

      crontab -e
      0 2 * * * /bin/bash /root/snapshot.sh
    5. 重启crontab。

      sudo /usr/sbin/cron restart

快照备份成功后,您还可以进行快照删除、快照恢复、查看快照恢复信息等操作,详细信息请参见手动备份与恢复