一. 需求:
面对elasticsearch每天存储大量数据且存储时间很长的情况下,比较突出的一个问题是:非常大量的读IO及聚合计算时,很可能会导致后端Load升高,从而阻塞新数据的写入,影响效率。庆幸的是:es提供了一套冷热数据分离的机制。即:将冷数据与热数据通过node隔离;这样,写操作集中在 N 台热数据节点上,大范围的读操作集中在 M 台冷数据节点上。提升检索(消耗cpu及磁盘io)效率的同时,避免了堵塞影响。
二. 冷热分离的核心概念:
1. 热数据: 近期产生、频繁查询 / 写入的数据(如最近 7 天的日志、实时交易记录),对读写延迟敏感,需高性能存储(SSD)和计算资源。
2. 冷数据: 历史数据(如 30 天前的日志、归档订单),访问频率低,对性能要求低,可存储在低成本介质(HDD),甚至压缩存储。
可提升查询性能,也可降低存储成本。
3. 原理 :elasticsearch 通过节点属性标记和索引生命周期管理(ILM) 实现冷热分离,核心逻辑是:
a). 节点按 “热 / 冷” 角色划分(通过自定义属性标记) 。
b). 新索引自动分配到热节点,承担写入和高频查询。
c). 当索引满足条件(如时间),通过 ILM 自动迁移到冷节点,并调整存储策略(如压缩、减少副本)。
三. 实现方式:
1. 首先,我们需要定制各节点属性(tag),如这里的环境3(分离环境用3个是不合理的,后续解释)个节点, 其中1个节点用来做热数据存储,2个节点用来做冷数据存储,配置方法有两种:
1). 通过elasticsearch.yml配置文件:
node.attr.size: "smail,medium" #一个属性可以配置多个值(标签)
big #冷数据的标签
#也可以通过启动参数指定:
bin/elasticsearch -Enode.attr.rack=rack1 -Enode.attr.size=big
2. 配置默认index的标签template:
# curl -XPUT 'http://10.0.4.183:9201/_template/default_shards?pretty' -d
‘{
"index_patterns": ["logs-*", "transactions-*"],
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1,
"index.routing.allocation.require.box_type": "smail",
"index.lifecycle.name": "hot-cold-ilm-policy", # 关联ILM策略(后续定义)
}
}’
3. 创建索引的冷热数据生命周期管理策略: 自动迁移冷数据
{
"policy": {
"phases": {
"smail": {
"min_age": "0ms",
"actions": {
"rollover": {
"max_age": "1d",
"max_docs": 10000000
},
"set_priority": {
"priority": 100
}
}
},
"big": { #
"min_age": "7d",
"actions": {
"allocate": {
"require": {
"box_type": "cold"
}
},
"shrink": {
"number_of_shards": 1
},
"forcemerge": {
"max_num_segments": 1
},
"set_priority": {
"priority": 50
}
}
},
"delete": {
"min_age": "30d",
"actions": {
"delete": {}
}
}
}
}
}
#curl -X PUT "http://10.0.4.183:9200/_ilm/policy/hot-cold-ilm-policy" -H "Content-Type: application/json" -d @hot-cold-ilm-policy.json
新索引会自动应用模板中的 index.lifecycle.name
,关联 ILM 策略。可通过以下 API 检查:
curl "http://10.0.4.183:9200/logs-2025-08-14/_ilm/explain?pretty"
注意: 需要考虑相关节点数的问题, 比如,我只有三个节点,如果分片需要配置replicas时,会有什么结果? 比如,在这个基础上, 我们的cluster有节点脱离(down)掉,会出现什么情况? 后续做了相关验证后,记录结论。
-----------------------------------------------------------------------------------------------
深耕运维行业多年,擅长运维体系建设,方案落地。欢迎交流!
V: ywjw996
《 运维经纬 》