elasticsearch生命周期管理

 

一、参考

 

使用索引生命周期管理实现热温冷架构

官方文档

Elasticsearch 集群从 3 节点扩容到温热架构的搭建攻略

 

 

二、概览

 

 

2.1 目标

 

(1) 当索引达到约定大小、索引文档数量达到约定数量,自动创建新的索引

(2) 安装指定周期(1 天,1 周,1 个月)创建索引,将之前的索引存档

(3) 强制删除过期的索引,以达到保留一定日期范围的数据

 

 

2.2 生命周期策略

 

一个生命周期策略定义了:

(1) 适用于哪些阶段

(2) 每个适用阶段中有哪些行为

(3) 什么时候,由当前阶段进入下一个阶段

 

 

三、生命周期的四个阶段

 

 

3.1 热数据阶段

 

定义: 索引正在频繁写入和查询

行为: Set Priority, Unfollow, Force Merge, Rollover

 

3.2 温数据阶段

 

定义: 索引只能查询,无法写入

行为: Set Priority, Unfollow, Read-Only, Allocate, Shrink, Force Merge

 

3.3 冷数据阶段

 

定义: 索引相对较少查询,无法写入

行为: Set Priority, Unfollow, Allocate, Freeze, Searchable Snapshot

 

3.4 删除阶段

 

定义: 索引可以被彻底删除

行为: Wait For Snapshot, Delete

 

 

3.5 阶段何时转移

 

由阶段 A 进入阶段 B,需要:

(1) 阶段 A 中所有行为完成

(2) 索引的 age 必须大于阶段 B 中定义的最小时间

示例:

 

 

四、生命周期策略

 

 

4.1 创建策略

 

# 创建策略
PUT _ilm/policy/yztest_policy
{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover": {
            "max_size": "50GB",
            "max_age": "10s",
            "max_docs": 3
          }
        }
      },
      "delete": {
        "min_age": "90d",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}

 

# 创建索引模版,应用上面的策略
PUT _template/yztest_template
{
  "index_patterns": [
    "yztest-*"
  ],
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 0,
    "index.lifecycle.name": "yztest_policy",
    "index.lifecycle.rollover_alias": "yztest"
  }
}

 

# 创建索引
PUT yztest-000001
{
  "aliases": {
    "yztest": {
      "is_write_index": true
    }
  }
}


 

4.1 策略的缓存

 

当一个索引进入一个新的阶段,将会首先缓存新的阶段的定义到索引 metadata 中

 

4.2 策略的更新

 

 

五、actions 列表

 

 

5.1 rollover 滚动

 

 

5.2 shrink 分片缩小

 

 

5.3 force merge 分片中分段合并

 

 

5.4 freeze 冻结分片,只读

 

 

5.5 delete 删除分片

 

 

六、ilm api 列表

 

6.1 更新策略检查间隔

 

# 将时间间隔更新为10s,默认是10m
PUT _cluster/settings
{
  "persistent": {
    "indices.lifecycle.poll_interval": "10s"
  }
}

 

 

七、注意和问题

 

 

7.1 如何保证生命周期策略适用于所有索引(包含以后会生成的索引)?

 

一般做法是, 先创建一个生命周期策略、一个索引模版,将生命周期策略应用于索引模版上,所有符合模版的索引都会使用相同的生命周期策略

如果只是对于当前索引(按照时间滚动),指定一个生命周期策略,则滚动后创建的新索引不会使用之前的生命周期策略

 

7.2 集群状态为 yellow 时候,生命周期策略会有影响吗?

 

即使集群状态是 yellow, 具体索引仍然会按照生命周期策略中定义,正常进行阶段转移,

但是,因为集群非 green 状态,会有一些清理任务无法完成,所以可能会产生负作用

 

posted @ 2020-12-21 18:30  一曲广陵散yz  阅读(259)  评论(0编辑  收藏  举报