当前位置: 首页 > news >正文

elasticsearch冷热数据读写分离!

一.  需求:

        面对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

                                                    《 运维经纬 》

http://www.dtcms.com/a/330634.html

相关文章:

  • Qt TCP 客户端对象生命周期与连接断开问题解析
  • ESXI 6.7服务器时间错乱问题
  • 面试题之项目中git如何进行管理
  • 计算机如何进行“卷积”操作:从图像到矩阵的奥秘
  • 星空开源MES(万界星空科技)——专业、通用、开源、免费的MES系统
  • AM32电调学习-使用Keil编译uboot
  • 医疗AI问答系统实战:知识图谱+大模型的融合应用开发
  • 带环链表详解:环形链表检测与入环节点查找
  • 推荐三个国内开源数据治理工具
  • Python3 详解:从基础到进阶的完整指南
  • 第四天~什么是ARXML?
  • CV 医学影像分类、分割、目标检测,之【肺结节目标检测】项目拆解
  • pytorch学习笔记-加载现有的网络模型(VGG16)、增加/修改其中的网络层(修改为10分类)
  • AI测试自动化:智能软件质量守护者
  • 观察者模式(C++)
  • CV 医学影像分类、分割、目标检测,之【3D肝脏分割】项目拆解
  • Flutter 顶部导航标签组件Tab + TabBar + TabController
  • 汽车生产线白皮书:稳联技术Profinet转Ethernet IP网关通信高效性
  • 中介者模式和观察者模式的区别是什么
  • 三同步舆情处置原则对政务管理有什么影响作用
  • 从实验室到落地:飞算JavaAI水位监测系统的工程化实践
  • 4.2 Vue3中reactive与ref详解及区别
  • 【企业架构】TOGAF概念之四(终结)
  • Day20 Linux 文件 I/O、目录操作及文件链接与 EDID
  • 小杰python(six day)——网络编程
  • 前端Vite介绍(现代化前端构建工具,由尤雨溪开发,旨在显著提升开发体验和构建效率)ES模块(ESM)、与传统Webpack对比、Rollup打包
  • 20250814 最小生成树总结
  • Vue 3 + TypeScript:package.json 示例 / 详细注释说明
  • Linux 上手 UDP Socket 程序编写(含完整具体demo)
  • 如何通过WiFi将文件从安卓设备传输到电脑