--- title: "Easysearch 索引生命周期管理(ILM):自动处理冷热数据" date: 2026-03-05 lastmod: 2026-03-05 description: "深入讲解 Easysearch 索引生命周期管理(ILM)核心机制,详细介绍冷热分离架构、节点分层配置、ILM 策略定义及 ZSTD 压缩优化,结合可搜索快照等高级特性,实现自动化数据流转与成本极致降低。" tags: ["ILM", "生命周期管理", "冷热分离"] summary: "随着时间推移,日志、监控指标等时序数据的价值密度会逐渐降低。一周前的数据需要毫秒级查询,而一年前的数据可能只需偶尔归档检索。如果在昂贵的 NVMe SSD 上存储所有历史数据,成本将难以承受。 索引生命周期管理(ILM) 是解决这一矛盾的核心机制。结合 INFINI Easysearch 强大的 ZSTD 压缩与分层存储能力,我们可以构建一套自动化的数据流转体系:让热数据“跑”在高性能节点,让冷数据“躺”在低成本存储上。 一、 冷热分离架构概览 # 在 Easysearch 集群中,我们通常将节点划分为不同的层级(Tiers): Hot 节点(热层): 硬件:高性能 CPU,NVMe SSD。 功能:负责当前数据的写入和高频查询。 数据状态:读写频繁,不压缩或轻度压缩。 Warm 节点(温层/冷层): 硬件:大容量 HDD,高密度存储。 功能:存储只读的历史数据。 数据状态:只读,开启 ZSTD 高级压缩,段合并(Force Merge)。 Delete(删除): 自动删除超过保留期限(如 365 天)的数据。 二、 环境准备:节点打标 # 首先,我们需要告诉 Easysearch 哪些节点是“热”的,哪些是“温”的。通过修改 easysearch.yml 配置文件来实现: Hot 节点配置: node.attr.data_type: hot Warm 节点配置: node.attr.data_type: warm 配置生效后,需重启节点。 三、 实战:定义 ILM 策略 # 我们将创建一个策略 logs_policy,它包含三个阶段:" --- 随着时间推移,日志、监控指标等时序数据的价值密度会逐渐降低。一周前的数据需要毫秒级查询,而一年前的数据可能只需偶尔归档检索。如果在昂贵的 NVMe SSD 上存储所有历史数据,成本将难以承受。 **索引生命周期管理(ILM)** 是解决这一矛盾的核心机制。结合 INFINI Easysearch 强大的 **ZSTD 压缩**与**分层存储**能力,我们可以构建一套自动化的数据流转体系:让热数据“跑”在高性能节点,让冷数据“躺”在低成本存储上。 ## 一、 冷热分离架构概览 在 Easysearch 集群中,我们通常将节点划分为不同的层级(Tiers): 1. **Hot 节点(热层)**: - **硬件**:高性能 CPU,NVMe SSD。 - **功能**:负责当前数据的写入和高频查询。 - **数据状态**:读写频繁,不压缩或轻度压缩。 2. **Warm 节点(温层/冷层)**: - **硬件**:大容量 HDD,高密度存储。 - **功能**:存储只读的历史数据。 - **数据状态**:只读,**开启 ZSTD 高级压缩**,段合并(Force Merge)。 3. **Delete(删除)**: - 自动删除超过保留期限(如 365 天)的数据。 --- ## 二、 环境准备:节点打标 首先,我们需要告诉 Easysearch 哪些节点是“热”的,哪些是“温”的。通过修改 `easysearch.yml` 配置文件来实现: **Hot 节点配置:** ```yaml node.attr.data_type: hot ``` **Warm 节点配置:** ```yaml node.attr.data_type: warm ``` _配置生效后,需重启节点。_ --- ## 三、 实战:定义 ILM 策略 我们将创建一个策略 `logs_policy`,它包含三个阶段: 1. **Hot**:当索引主分片达到 50GB 或时间超过 1 天时,自动滚动(Rollover)生成新索引。 2. **Warm**:索引滚动后立即触发,将数据移动到 Warm 节点,并进行 Force Merge 和缩容。 3. **Delete**:数据创建 30 天后自动删除。 ```json PUT /_ilm/policy/logs_policy { "policy": { "phases": { "hot": { "min_age": "0ms", "actions": { "rollover": { "max_size": "50gb", "max_age": "1d" }, "set_priority": { "priority": 100 } } }, "warm": { "min_age": "0ms", "actions": { "set_priority": { "priority": 50 }, "allocate": { "require": { "data_type": "warm" } } } }, "delete": { "min_age": "30d", "actions": { "delete": {} } } } } } ``` --- ## 四、 绑定模板与初始化 策略定义好后,需要将其应用到索引模板中,确保新生成的索引自动继承该策略。 ### 4.1 创建索引模板 这里我们结合了 Easysearch 的核心优势——**ZSTD 压缩**。建议在模板中开启 `ZSTD`,这样数据在整个生命周期中(特别是迁移到温层后)能获得极高的压缩比(通常比 LZ4 节省 40%-50% 空间)。 ```json PUT /_index_template/logs_template { "index_patterns": [ "logs-*" ], "template": { "settings": { "index.lifecycle.name": "logs_policy", "index.lifecycle.rollover_alias": "logs", "index.codec": "ZSTD", "index.routing.allocation.require.data_type": "hot" }, "mappings": { "properties": { "@timestamp": { "type": "date" } } } } } ``` ### 4.2 初始化第一个索引 ILM 的运行依赖于别名。我们需要手动创建第一个索引并配置写别名: ```json PUT /logs-000003 { "aliases": { "logs": { "is_write_index": true } } } ``` --- ## 五、 Easysearch 深度优化建议 在标准的 ILM 流程之上,针对 INFINI Easysearch 的特性,我们有以下优化建议: ### 5.1 极致压缩与冷热分离 Easysearch 的 ZSTD 压缩算法在 Warm 阶段尤为重要。 - **传统方案**:Warm 节点仅仅是磁盘便宜。 - **Easysearch 方案**:Warm 节点不仅磁盘便宜,通过 ZSTD 压缩,**存储同样数据量所需的磁盘空间仅为传统方案的 50% - 60%**。这意味着同样的硬件投入,Easysearch 可以多存储近一倍的历史数据。 ### 5.2 结合“可搜索快照”进入 Frozen 阶段 对于访问频率极低(如审计合规要求保留 3 年)的数据,使用 Warm 节点仍然有些昂贵。 Easysearch 支持**可搜索快照(Searchable Snapshots)**。您可以将 ILM 的 Cold 阶段配置为将数据快照到 S3 或 MinIO 对象存储中,然后删除本地索引。 当需要查询时,Easysearch 可以直接挂载对象存储中的快照进行搜索,实现**近乎无限且极低成本**的存储扩展。 --- ## 六、 运维与监控 如何确认 ILM 是否在正常工作? ```bash GET /_ilm/explain/logs-* ``` ## 总结 通过 INFINI Easysearch 的 ILM 功能,企业可以构建“自动驾驶”般的数据管理体验: 1. **热数据**在 SSD 上飞驰,保障业务实时性。 2. **温数据**自动迁移至 HDD 并通过 ZSTD 极致压缩,大幅降低存储 TCO。 3. **过期数据**自动清理或归档,规避合规风险。 这不仅解放了运维人员的双手,更让硬件资源的利用率达到了极致。