3.5.7.索引生命周期管理
创作人:赵凯
审稿人:朱永生
Elasticsearch 在 6.7 版本正式加入索引生命周期管理,旨在管理 Elasticsearch 中的索引。
通常我们使用 Elasticsearch 的时候,index 命名都是 xxx-YYYY.MM.dd 类似这样的格式,每天创建一个index,这需要我们自己创建 index,或者通过自动创建。
l 每天创建一个 index,但是每天的数据量又非常少,这对集群来说是不利的。
l 如果是自动创建的话,集群 index 和 shard 数过多,那么在每天的 00:00 时,大量的
l index同时创建,这时我们就会发现集群的写入速度会变慢,可能会发生 index 写入拒绝的情况。
l 集群需要对冷热数据进行分离,性能好的机器放最近频繁查询的数据,随着时间推移,数据查询不在频繁,需要将数据迁移到性能较差的机器上。
以上这些我们可以使用 Elasticsearch 提供的索引生命周期管理功能能很好的解决,接下来我们了解一下 索引生命周期管理。
索引生命周期的四个阶段
l Hot:
l index 正在查询和更新,一般性能好的机器会设置为 Hot 节点来进行数据的读写。
l Warm:
l index不再更新,但是仍然需要查询,节点性能一般可以设置为 Warm 节点。
l Cold:
l index不再被更新,且很少被查询,数据仍然可以搜索,但是能接受较慢的查询,节点性能较差,但有大量的磁盘空间。
l Delete:
l 数据不需要了,可以删除。
节点的类型可以通过一下两种方式设置,推荐第二种,第一种后续可能会弃用。
第一种:
# elasticsearch.yml # node.attr.xxx: xxx node.attr.data: warm
第二种(推荐):
# elasticsearch.yml # data_content, data_hot, data_warm, data_cold # 配置该节点既属于内容层又属于热层 node.roles: ["data_hot", "data_content"]
这四个阶段按照 Hot,Warm,Cold,Delete 顺序执行,上一个阶段没有执行完成是不会执行下一个阶段的,对于不存在的阶段,会跳过该阶段进入到下一个阶段。
生命周期默认每 10 分钟检测一次,可以通过集群的配置动态修改,如下:
PUT _cluster/settings { "transient": { "indices.lifecycle.poll_interval": "10m" } }
生命周期管理 API
每个阶段支持的行为会在下一章节进行介绍,此章节仅仅为了介绍 API。
1、创建生命周期管理策略
min_age 参数指定从 index 创建后多长时间进入到该阶段。
以下示例是指从当 index 创建时间超过 10 天后,进入到 warm 阶段,将 segment 数量
merge 为 1,warm 阶段完成后,进入 delete 阶段,index 创建时间超过 30 天后,将index删除。
PUT _ilm/policy/my_policy { "policy": { "phases": { "warm": { "min_age": "10d", "actions": { "forcemerge": { "max_num_segments": 1 } } }, "delete": { "min_age": "30d", "actions": { "delete": {} } } } } }
2、查看生命周期管理策略
# 查看所有的生命周期管理策略 GET _ilm/policy # 查看特定的生命周期管理策略 # GET _ilm/policy/<policy_id>
3、删除生命周期管理策略
DELETE _ilm/policy/<policy_id>
4、触发生命周期策略中特定步骤的执行
l current_step
l phase 当前阶段的名称
l action 当前行为的名称
l name 当前步骤的名称
l next_step
l phase 想要执行阶段的名称
l action 想要执行行为的名称
l name 想要执行步骤的名称
POST _ilm/move/my-index-000001 { "current_step": { "phase": "new", "action": "complete", "name": "complete" }, "next_step": { "phase": "warm", "action": "forcemerge", "name": "forcemerge" } }
5、移除生命周期管理策略
# POST <target>/_ilm/remove POST my-index-000001/_ilm/remove
6、生命周期重试
# POST <index>/_ilm/retry POST my-index-000001/_ilm/retry
7、查看当前索引生命周期管理状态
GET /_ilm/status
8、查看一个或多个索引的当前生命周期状态
# GET <target>/_ilm/explain GET my-index-000001/_ilm/explain
9、启动索引生命周期管理插件
POST _ilm/start
10、停止索引生命周期管理插件
POST /_ilm/stop
《Elastic Stack 实战手册》——三、产品能力——3.5 进阶篇——3.5.7.索引生命周期管理(2) https://developer.aliyun.com/article/1228515