文章目录

  • 快照的生命周期 SLM
  • 创建或更新生命周期策略
  • 查询参数
  • 请求正文
  • 示例
  • 获取快照生命周期策略
  • 路径参数
  • 示例
  • 删除快照生命周期策略
  • 示例
  • 执行快照生命周期策略
  • 强制执行删除过期快照(执行快照保留策略)
  • 获取生命周期策略状态
  • 生命周期快照统计
  • 启动生命周期管理
  • 关闭生命周期管理


快照的生命周期 SLM

前一章我们讲解了快照的创建与恢复。但是都需要我们手动去操作。在我们实际工作中,常常是需要定期快照,定期保存的,避免数据丢失。快照的生命周期管理 SLM 就为我们提供了相应的功能。

创建或更新生命周期策略

PUT /_slm/policy/<snapshot-lifecycle-policy-id>

如果策略已经存在,则此请求会增加策略的版本。只存储策略的最新版本。

查询参数

  • master_timeout
    (可选,时间单位)等待连接到主节点的时间。如果在超时到期之前没有收到响应,则请求将失败并返回错误。默认为30s .
  • timeout
    (可选,时间单位)等待响应的时间。如果在超时之前没有收到响应,则请求将失败并返回错误。默认为30s .

请求正文

  • config(必须,对象)此策略对应的快照配置(对象的内容即为创建快照的请求正文对象,此处不再做解释,可参考我们前面的文章)
  • name
    (必需,字符串)自动分配给策略创建的每个快照的名称。为了防止快照名称冲突,UUID会自动附加到每个快照名称。
  • repository
    (必需,字符串)用于存储此策略创建的快照的存储库。此存储库必须在创建策略之前存在。
  • retention
    (可选,对象)用于保留和删除策略创建的快照的保留规则。
  • expire_after(可选,时间单位) 快照创建后多长时间视为过期。SLM根据 slm.retention_schedule 设置来定期删除,默认1h.
  • max_count(可选,整数)要保留的最大快照数,即使快照尚未过期。如果存储库中的快照数超过此限制,策略将保留最新的快照并删除旧的快照。 .
  • min_count(可选,整数)要保留的最小快照数,即使快照已过期。
  • schedule(必需,Cron 表达式语法)策略创建快照的定期或绝对计划。(列如:0 30 1 * * ? 表示每天凌晨1点半执行)

示例

PUT /_slm/policy/my_snapshot_lifecycle_test_1
{
  "schedule": "0 0 */1 * * ?", 
  "name": "<my-peson-snap-{now{yyyy-MM-dd_HH|+08:00}}>", 
  "repository": "my_fs_repo", 
  "config": { 
    "indices": ["person*"]
  },
  "retention": { 
    "expire_after": "3d", 
    "min_count": 5, 
    "max_count": 50 
  }
}

快照名称是动态的,按时间格式生成的。+08:00 表示显示为东八区。具体的配置格式可参考官网 日期格式

“indices”: [“person*”] 使用了通配符 * ,表示以 person 开头的索引都进行快照

retention 中的配置表示,快照有效期3天,最大个数为50个(大于50即便没过期最旧的也会被删除),最小个数为5个(即便过期了,也不会被删除)

结果

{
    "acknowledged": true
}

获取快照生命周期策略

GET _slm/policy/<policy-id>

GET _slm/policy

路径参数

  • policy-id:(可选,字符串)快照生命周期策略ID,可以是多个中间用逗号隔开

示例

GET /_slm/policy/my_snapshot_lifecycle_test_1?human

human 表示以人类可以看懂的方式回显(虽然直接看也费劲),比如我们的结果中时间就会显示为年月日的方式,而不是直接的毫秒数。

结果

{
    "my_snapshot_lifecycle_test_1": {// 生命周期策略名称
        "version": 3, // 当前的版本(3说明修改过了)
        "modified_date": "2023-08-03T03:42:33.899Z",// 修改时间(这个时间是UTC时间,比北京时间少8小时)
        "modified_date_millis": 1691034153899,
        "policy": { // 具体策略信息
            "name": "<my-peson-snap-{now{yyyy-MM-dd_HH|+08:00}}>",
            "schedule": "0 0 */1 * * ?",
            "repository": "my_fs_repo",
            "config": {
                "indices": [
                    "person*"
                ]
            },
            "retention": {
                "expire_after": "3d",
                "min_count": 5,
                "max_count": 50
            }
        },
        "last_success": {
            "snapshot_name": "my-peson-snap-2023-08-03_13-ghdxuo4kqdsf8kzdjfpokg",
            "start_time_string": "2023-08-03T04:59:59.849Z",
            "start_time": 1691038799849,
            "time_string": "2023-08-03T05:00:01.279Z",
            "time": 1691038801279
        },
        "next_execution": "2023-08-03T06:00:00.000Z", // 策略下次执行的时间(也是UTC时间)
        "next_execution_millis": 1691042400000,
        "stats": {
            "policy": "my_snapshot_lifecycle_test_1",
            "snapshots_taken": 20,
            "snapshots_failed": 0,
            "snapshots_deleted": 0,
            "snapshot_deletion_failures": 0
        }
    }
}

结果中的时间都是UTC时间,es 中好像不支持配置时区,所以这些时间查询出来需要做时区处理。

删除快照生命周期策略

DELETE /_slm/policy/<snapshot-lifecycle-policy-id>

示例

DELETE /_slm/policy/my_snapshot_lifecycle_test_1

执行快照生命周期策略

PUT /_slm/policy/<snapshot-lifecycle-policy-id>/_execute

调用后策略会立即执行快照,一般在执行升级或其他维护之前手动执行策略。

强制执行删除过期快照(执行快照保留策略)

POST /_slm/_execute_retention

执行后会强制删除过期的快照。

获取生命周期策略状态

GET /_slm/status

结果

{
    "operation_mode": "RUNNING"
}

返回SLM插件的状态operation_mode响应中的字段显示三种状态之一:RUNNING ,STOPPING,或STOP。

生命周期快照统计

GET /_slm/stats

结果

{
    "retention_runs": 1,
    "retention_failed": 0,
    "retention_timed_out": 0,
    "retention_deletion_time": "0s",
    "retention_deletion_time_millis": 0,
    "total_snapshots_taken": 22,
    "total_snapshots_failed": 0,
    "total_snapshots_deleted": 0,
    "total_snapshot_deletion_failures": 0,
    "policy_stats": [
        {
            "policy": "my_snapshot_lifecycle_test_1",
            "snapshots_taken": 22,
            "snapshots_failed": 0,
            "snapshots_deleted": 0,
            "snapshot_deletion_failures": 0
        }
    ]
}

启动生命周期管理

POST /_slm/start

关闭生命周期管理

POST /_slm/stop