咨询特定Hot-warm型ILM索引生命周期策略的实现可行性
如何配置满足需求的Hot-Warm ILM策略
你的需求完全可以通过Elasticsearch ILM实现,核心是要先理清ILM中min_age的计算逻辑——它是从索引的创建日期开始计时,而非rollover触发的时间,这正是你要的效果。
先澄清你对原策略的误解
你担心warm.min_age: 30d是从rollover完成后开始算,但实际上并非如此。ILM的阶段过渡条件min_age始终以索引的创建日期为时间锚点,所以即使索引在创建15天后触发了rollover,它也会在Hot节点继续停留,直到创建满30天,才会进入Warm阶段——这正好匹配你的需求。
不过为了让策略逻辑更直观,我们可以做一些小调整,明确各阶段的时间边界,避免歧义:
优化后的ILM策略
PUT _ilm/policy/hot-warm-delete-6months-policy { "policy": { "phases": { "hot": { "min_age": "0d", "max_age": "30d", // 明确hot阶段最多停留30天(从创建日期算起) "actions": { "rollover": { "max_size":"20gb", "max_age":"30d" // 满足任一条件就触发rollover生成新索引 }, "set_priority": { "priority": 50 } } }, "warm": { "min_age": "30d", // 索引创建满30天自动进入warm阶段 "actions": { "forcemerge": { "max_num_segments": 1 }, "shrink": { "number_of_shards": 1 }, "allocate": { "require": { "data": "warm" } }, "set_priority": { "priority": 25 } }, "max_age": "180d" // warm阶段总共停留5个月(从创建满30天到满180天) }, "delete": { "min_age": "180d", // 索引创建满6个月时触发删除 "actions": { "delete": {} } } } } }
关键逻辑拆解
- Hot阶段:
- 索引创建后立即进入hot阶段,设置最高优先级50
- 当索引达到20GB或创建满30天时,触发rollover生成新索引
- 无论rollover何时触发,当前索引都会留在hot节点直到创建满30天(由
hot.max_age和warm.min_age共同约束)
- Warm阶段:
- 索引创建满30天自动迁移至warm节点,执行合并段、收缩分片等优化操作,降低优先级至25
- 在warm节点存储5个月,直到创建满180天
- Delete阶段:
- 索引创建满6个月时,自动被清理删除
场景验证(对应你的示例)
- 索引创建15天后达到20GB,触发rollover生成新索引
- 原索引仍留在hot节点,直到创建满30天,才进入warm节点
- 原索引在warm节点存储至创建满180天,最终被删除
你可以通过执行GET <目标索引名>/_ilm/explain查看索引的ILM状态,验证阶段流转是否符合预期。
内容的提问来源于stack exchange,提问作者abdelhalim
相关产品推荐
相关产品推荐

