📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

随着时间推移,日志、监控指标等时序数据的价值密度会逐渐降低。一周前的数据需要毫秒级查询,而一年前的数据可能只需偶尔归档检索。如果在昂贵的 NVMe SSD 上存储所有历史数据,成本将难以承受。

索引生命周期管理(ILM) 是解决这一矛盾的核心机制。结合 INFINI Easysearch 强大的 ZSTD 压缩分层存储能力,我们可以构建一套自动化的数据流转体系:让热数据“跑”在高性能节点,让冷数据“躺”在低成本存储上。

一、 冷热分离架构概览 #

在 Easysearch 集群中,我们通常将节点划分为不同的层级(Tiers):

  1. Hot 节点(热层)
  • 硬件:高性能 CPU,NVMe SSD。
  • 功能:负责当前数据的写入和高频查询。
  • 数据状态:读写频繁,不压缩或轻度压缩。
  1. Warm 节点(温层/冷层)
  • 硬件:大容量 HDD,高密度存储。
  • 功能:存储只读的历史数据。
  • 数据状态:只读,开启 ZSTD 高级压缩,段合并(Force Merge)。
  1. Delete(删除)
  • 自动删除超过保留期限(如 365 天)的数据。

二、 环境准备:节点打标 #

首先,我们需要告诉 Easysearch 哪些节点是“热”的,哪些是“温”的。通过修改 easysearch.yml 配置文件来实现:

Hot 节点配置:

node.attr.data_type: hot

Warm 节点配置:

node.attr.data_type: warm

配置生效后,需重启节点。


三、 实战:定义 ILM 策略 #

我们将创建一个策略 logs_policy,它包含三个阶段:

  1. Hot:当索引主分片达到 50GB 或时间超过 1 天时,自动滚动(Rollover)生成新索引。
  2. Warm:索引滚动后立即触发,将数据移动到 Warm 节点,并进行 Force Merge 和缩容。
  3. Delete:数据创建 30 天后自动删除。
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% 空间)。

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 的运行依赖于别名。我们需要手动创建第一个索引并配置写别名:

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 是否在正常工作?

GET /_ilm/explain/logs-*

总结 #

通过 INFINI Easysearch 的 ILM 功能,企业可以构建“自动驾驶”般的数据管理体验:

  1. 热数据在 SSD 上飞驰,保障业务实时性。
  2. 温数据自动迁移至 HDD 并通过 ZSTD 极致压缩,大幅降低存储 TCO。
  3. 过期数据自动清理或归档,规避合规风险。

这不仅解放了运维人员的双手,更让硬件资源的利用率达到了极致。