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

更新时间:
复制为 MD 格式

阿里云 Elasticsearch 支持两种自动备份快照的方式:7.6 及以上版本通过快照生命周期管理 SLM(Snapshot Lifecycle Management)实现定时快照和自动过期清理;7.6 以下版本通过客户端 crontab 定时任务触发快照创建。两种方式都将快照保存至 OSS 仓库。

背景信息

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

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

7.6及以上版本(推荐)

开始前,需要完成以下准备:

  • 创建一个标准存储类型的 OSS Bucket(不支持归档存储类型),Bucket 地域与 Elasticsearch 实例保持一致。具体操作参见创建存储空间

  • 创建快照仓库,将 OSS Bucket 关联到 Elasticsearch 实例。具体操作参见创建快照仓库

在目标实例的 Kibana 控制台中,单击Dev Tools,执行以下操作。

  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

    Cron 表达式,格式为:秒 分钟 小时 天 月 星期 年(可选)。"0 0 0/12 * * ?" 表示每 12 小时创建一次快照。详细信息参见Cron

    name

    快照的名称格式。支持日期数学表达式,如 <auto-snap-{now/d}> 按日期命名。

    repository

    快照仓库名称。获取方式参见获取仓库信息

    config.indices

    快照包含的索引。* 表示所有索引。

    config.include_global_state

    是否包含集群状态和 Feature 状态。true 包含,false 不包含。

    retention.expire_after

    快照保留时间。示例中为 30 天。

    retention.min_count

    最少保留快照数。即使超过保留时间,也会保留该数量的快照。

    retention.max_count

    最多保留快照数。即使未达到保留时间,超出该数量的快照也会被删除。

  2. 执行 SLM 策略,立即创建一次快照。

    POST _slm/policy/auto-snapshots/_execute

    执行完成后,Elasticsearch 会按 schedule 参数的设定自动创建快照。如需立即执行 retention 清理规则,运行以下命令:

    POST _slm/_execute_retention

7.6以下版本

7.6 以下版本不支持 SLM,需要通过客户端 crontab 定时任务实现自动快照。

开始前,需要完成以下准备:

  • 创建一个标准存储类型的 OSS Bucket(不支持归档存储类型),Bucket 地域与 Elasticsearch 实例保持一致。具体操作参见创建存储空间

  • 创建快照仓库。具体操作参见创建快照仓库

  • 配置客户端,确保能通过公网或内网访问 Elasticsearch 实例。具体操作参见通过应用程序连接集群

在客户端服务器上执行以下操作:

  1. 创建快照备份脚本。

    vi /root/snapshot.sh
  2. 在脚本文件中添加以下内容并保存。将 elastic:***** 替换为实际的用户名和密码,将 es-***** 替换为实际的实例 ID。

    curl -u elastic:***** -X PUT https://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

    保存后 crontab 会自动加载新配置,无需手动重启 cron 服务。

快照备份成功后,可以进行快照删除、快照恢复、查看恢复信息等操作,详细信息参见手动备份与恢复。如需将快照恢复到其他集群,需要在目标集群中创建仓库并映射到相同的 OSS 地址。