ES 热温冷分层存储策略

最近更新时间: 2026-03-13 09:03:00

简要介绍

TBDS-ES 支持冷热温分层存储策略,核心通过 节点属性标记 + 索引生命周期管理(ILM) 实现数据按访问频率自动分配到不同性能的节点,平衡性能与成本。
热温冷架构常用于日志或指标类的时序数据。例如,假设正在使用 ES 聚合来自多个系统的日志文件,今天的日志正在频繁地被索引,且本周的日志搜索量最大(热)。上周的日志可能会被频繁搜索,但频率没有本周日志那么高(温)。上月日志的搜索频率可能较高,也可能较低,但最好保留一段时间以防万一(冷)。
ES 热温冷数据生命周期示例
ES 热温冷数据生命周期示例
如上图集群有 19 个节点:10 个热节点、6 个温节点和 3 个冷节点(实际使用 ILM 实现热温冷架构至少需要有 2 个节点),其中冷节点是可选的,它只是多提供一个建模级别来表示数据的存放位置。ES 允许用户定义哪些节点是热节点、温节点或冷节点,ILM 允许用户定义何时在两个阶段之间移动,以及在进入哪个阶段时如何处理索引。比如在日志、监控、时序数据等场景中,数据的访问频率随时间递减(“热数据”→“温数据”→“冷数据”):

  • 热数据:最近 7 天内的数据,需高并发写入、低延迟查询(如实时监控告警),需高性能硬件。
  • 温数据:7~30 天的数据,查询频率降低(如周级报表),可接受稍高延迟,用中性能硬件。
  • 冷数据:30 天以上的数据,极少查询(如合规归档),可牺牲查询速度换存储成本,用低成本硬件。

分层架构通过将不同数据分配到对应节点,避免 “用 SSD 存储冷数据” 的资源浪费,同时避免 “用 HDD 存储热数据” 的性能瓶颈。

对于热温冷架构,ES 集群中的节点规格配置并不是一个标准的设置,通常而言遵循:
热节点需要较多的 CPU/内存资源和较快的 IO 带宽资源
对于温节点和冷节点来说,通常每个节点会需要更多的磁盘空间,分配较小规格的 CPU/内存 资源和 IO 带宽资源。

参考实践

注意:

下文为示例参考,实际项目请联系交付工程师结合业务情况综合评估后实施。

实施前提:完成服务器资源规划准备,按节点类型分配硬件,用于 ES 集群部署安装/扩容阶段使用。例如:

节点类型 CPU 内存 存储介质 核心用途
热节点(Hot) 高核心数(如 16 核) 大内存(如 64GB,缓存数据) SSD(IOPS ≥ 1000) 写入 + 高频查询
温节点(Warm) 中核心数(如 8 核) 中内存(如 32GB) HDD(7200 转,大容量) 低频查询
冷节点(Cold) 低核心数(如 4 核) 小内存(如 16GB) 超大规模 HDD 归档查询

(1)创建 TBDS-ES 集群,指定节点属性

  1. 创建集群,选择《ES》集群,按需选择部署的组件,及是否开启Kerberos认证。

  2. 点击《下一步:节点部署方案》,根据部署场景选择是否《混合部署》,以及填写主机信息后点击下一步。

  3. 点击《下一步:部署配置》,支持打开“自定义部署”,可以调整各个节点的角色,数据节点也支持设置冷热温节点角色。

    这里底层会对相应节点做打标处理,如:

    节点类型标签(核心,用于分片分配)node.attr.temp: hot

  4. 点击《下一步:基础配置》,填写集群名称

  5. 点击《下一步:确认配置信息》,检查集群配置。

  6. 点击《部署集群》,等待进度100%之后即可完成部署。

(2)配置索引生命周期管理(ILM)

说明:

TBDS-ES 的 ILM 插件可以参考:https://opendistro.github.io/for-elasticsearch-docs/docs/im/ism/policies/

  1. 验证节点属性是否生效(通过 API 或 Kibana):
  # API查询节点属性curl -X GET "http://<es-master-ip>:9200/_cat/nodeattrs?v&h=node,attr,value"

正常返回示例:

2. 创建 ILM 策略(定义数据流转规则)
通过 Kibana 或 API 创建策略,以下是典型的日志数据策略

说明:

以下示例策略实现了热(Hot)、温(Warm)、删(Delete)工作流,您可以将此策略用作模板,根据索引的活跃程度为其分配优先资源。

在此场景中,索引初始处于热状态(Hot State)。1 天后,索引转为温状态(Warm State),此时副本数量会增加至 5 个,以提升读取性能。

30 天后,该策略会将索引移入删除状态(Delete State),随后永久删除该索引。

PUT _opendistro/_ism/policies/log-lifecycle-policy
{
    "policy": {
        "description": "hot warm delete workflow",
        "default_state": "hot",
        "schema_version": 1,
        "ism_template": {
            "index_patterns": ["log-*"]
        },
        "states": [{
                "name": "hot",
                "actions": [{
                    "rollover": {
                        "min_index_age": "1d"
                    }
                }],
                "transitions": [{
                    "state_name": "warm"
                }]
            },
            {
                "name": "warm",
                "actions": [{
                    "replica_count": {
                        "number_of_replicas": 5
                    }
                }],
                "transitions": [{
                    "state_name": "delete",
                    "conditions": {
                        "min_index_age": "30d"
                    }
                }]
            },
            {
                "name": "delete",
                "actions": [
                    {
                        "delete": {}
                    }
                ]
            }
        ]
    }
}

登录 Kibana 页面,查看 index policies:

3. 创建索引模板(关联 ILM 策略)
索引模板用于让新创建的索引自动应用 ILM 策略,并指定初始分片配置(热节点)。

PUT _index_template/log-template {
    "index_patterns": ["log-*"],
    "template": {
        "settings": {
            "number_of_shards": 3,
            "number_of_replicas": 1,
            "index.lifecycle.name": "log-lifecycle-policy",
            "index.lifecycle.rollover_alias": "log-alias"
        },
        "mappings": {
            "properties": {
                "timestamp": {
                    "type": "date"
                },
                "log_level": {
                    "type": "keyword"
                },
                "message": {
                    "type": "text"
                }
            }
        }
    }
}
  1. 创建初始滚动索引
    通过 “别名 + 初始索引” 触发 ILM 的 rollover 机制
PUT log - 000001 {
    "aliases": {
        "log-alias": {
            "is_write_index": true
        }
    }
}

登录 Kibana 页面,查看该索引被相应 Policy 应用

之后,当索引达到rollover条件(7 天或 50GB),ILM 会自动创建log-000002作为新写入索引,旧索引则按策略进入 “温→冷→删除” 阶段。