图 2-1 冷数据节点开启
建议如果索引表是按天/小时,这种周期存储的数据,且数据查询具有冷热性,建议开启冷节点;开启冷节点后你可能会获得如下的收益:
- 开启冷节点后可以降低你的存储成本,因为存放冷节点的索引我们可以选择减少副本数、冷节点的存储介质更便宜
- 集群可以存放更多的数据
- 冷数据forcemerge,提升冷数据的查询性能
- 冷数据从热节点迁移走之后,减少热节点的资源占用,从而使热查询更快
node.attr.box_type: hotes的warm节点增加如下配置
node.attr.box_type: warm热数据索引setting增加如下配置 , 即可限制shard分配在hot节点
"index.routing.allocation.require.box_type": "hot"当数据查询减弱,我们通过如下配置,即可使数据由hot节点迁移到warm节点
"index.routing.allocation.require.box_type": "warm"2-2 可搜索快照可搜索快照是在冷热架构的基础上更进一步的分级存储,在之前我们将数据快照之后是无法对快照的数据进行搜索,如果要对快照的数据进行搜索,则需将快照数据先restore(restore的过程可能会比较长)之后才能被搜索 。
在引入可搜索快照之后,我们可以直接搜索快照中的数据 , 大大降低了没必要的资源使用.
3 其他3-1 数据压缩除了从资源的角度进行降低存储成本之外,基于数据自身的特性 , 使用优秀的压缩算法也是一种必不可少的搜索;针对时序数据facebook开源了一个非常优秀的压缩算法zstd,目前已经在业界被大量使用 , 国内的两大云友商已经在es进行了实现,腾讯云针对zstd的测试结果如表3-1所示;阿里云在TimeStream功能中使用了zstd 。
表 3-1 三种压缩算法的对比测试结果
目前在lucene的代码库中也有开源爱好者提交了custom codec providing Zstandard compression/decompression (zstd pr)
3-2 off heapes单个节点存储数据量受到jvm堆内存的限制 , 为了使单个节点能够存储更多的数据,因此我们需要减少堆内存中的数据 。
ES 堆中常驻内存中占据比重最大是 FST , 即 tip(terms index) 文件占据的空间,1TB 索引大约占用2GB 或者更多的内存 , 因此为了节点稳定运行,业界通常认为一个节点 open 的索引不超过5TB 。现在,从 ES 7.3版本开始,将 tip 文件修改为通过mmap的方式加载,这使 FST占据的内存从堆内转移到了堆外(即off Heap技术 )由操作系统的 pagecache 管理[6] 。
使用esrally官方数据集geonames写入索引1TB,使用 _cat/segments API 查看 segments.memory内存占用量,对比 offheap 后的内存占用效果,如表3-2所示;JVM 内存占用量降低了78%左右
表 3-2 segments.memory内存占用量
4 参考[1] Indexing Service[2] ES-Fastloader[3] 大规模测试新的 Elasticsearch 冷层可搜索快照[4] Introducing Elasticsearch searchable snapshots[5] 7.7 版本中的新改进:显著降低 Elasticsearch 堆内存使用量[6] Elasticsearch 7.3 的 offheap 原理
作者:杨松柏
推荐阅读
- 云原生之旅 - 6)不能错过的一款 Kubernetes 应用编排管理神器 Kustomize
- Windows下自动云备份思源笔记到Gitee
- 云原生之旅 - 5)Kubernetes时代的包管理工具 Helm
- 云顶之弈碧波法师阵容怎么玩
- 云上当空接龙规则(接龙规则口诀)
- 云上空当接龙怎么玩(空当接龙怎么玩教学说明)
- mqtt_simple例程 nrf9160做主控连接阿里云——
- 云顶之弈S7.5怒玉豹女阵容怎么玩
- 云顶之弈玉龙怎么换形锤阵容
- 云原生之旅 - 4)基础设施即代码 使用 Terraform 创建 Kubernetes