往期推荐

哎呀看到配图,我突然有想出去走一走的冲动,好久没有出去旅游了,2020年初本来一家人订好机票出国溜达一下的,可惜疫情来的太突然,所有行程都取消了.....
本期主题是关于Elasticsearch(后面简称ES)的冷热数据分离的探索,相信稍微大一点的公司都有接触过ES这种组件,他的优势这里就不一一列举了。
一、ES的各种节点及分工
客户端节点(client)
当主节点和数据节点配置都设置为false的时候,该节点只能处理路由请求,处理搜索,分发索引操作等,从本质上来说该客户节点表现为智能负载平衡器。独立的客户端节点在一个比较大的集群中是非常有用的,他协调主节点和数据节点,客户端节点加入集群可以得到集群的状态,根据集群的状态可以直接路由请求。配置如下:
node.master:falsenode.data:false数据节点(data)
数据节点主要是存储索引数据的节点,主要对文档进行增删改查操作,聚合操作等。数据节点对cpu,内存,io要求较高, 在优化的时候需要监控数据节点的状态,当资源不够的时候,需要在集群中添加新的节点
配置如下:
node.master:falsenode.data:true主节点(master)
主资格节点的主要职责是和集群操作相关的内容,如创建或删除索引,跟踪哪些节点是群集的一部分,并决定哪些分片分配给相关的节点。稳定的主节点对集群的健康是非常重要的,默认情况下任何一个集群中的节点都有可能被选为主节点,索引数据和搜索查询等操作会占用大量的cpu,内存,io资源,为了确保一个集群的稳定,分离主节点和数据节点是一个比较好的选择
配置如下:
node.master:truenode.data:false (当然也可以同时指定为数据节点)有了服务器节点的角色分工,那么在实际部署的时候就可以根据服务器资源情况合理配置节点角色。
配置建议:
作为主节点->普通服务器即可(CPU 内存 消耗一般)
作为客户端节点->普通服务器即可(如果要进行分组聚合操作的话,建议这个节点内存也分配多一点)
作为数据节点->较高配置服务器, 主要消耗磁盘,内存
二、ES特殊身份指定
除了第一节介绍的ES可以分多种角色,从而实现各司其职,这里我们还可以根据数据的特性来进一步指定节点的特殊【身份】,可根据数据的使用情况来分为热数据,冷数据两种,顾名思义:热数据就是指业务上经常用到的,访问频繁的数据,冷数据基本上访问非常少,甚至可能不用的数据。有了这种业务特性,我们就可以集中优势资源来处理热数据,从而大大提升其查询性能。
像我们物联网行业的系统,每月数据达几十亿,如此庞大的数据如果全部放在同等服务器上,那么服务器的资源很难扛住,大家都知道想要提升es查询性能无非就是加内存,加内存,加内存。。。可针对小公司而言成本太高,吃不消。经过和产品经理的讨论分析,发现我们的客户虽然有对数据存储年限的要求,但实际真正使用的数据也就近3个月,由此我们就可以特性把近3月的数据放到热数据节点,超过3月的数据转移到冷数据节点。我们可以把热数据节点的配置使用最优的,什么32GB内存用上,SSD硬盘用上。性能可想而知提升一个数量级。
热数据节点具体配置如下:
打开配置文件 elasticsearch.ymlnode.attr.box_type: hot
反之冷数据节点配置如下:
打开配置文件 elasticsearch.ymlnode.attr.box_type: cold
仅仅配置这个还不行我们还需要对索引进行相关配置
{"template": "hodo-stats-*","settings": {"index": {"refresh_interval": "5s","number_of_shards": "2","routing.allocation.require.box_type":"hot"}}....}
重点:"routing.allocation.require.box_type": "hot"
当创建索引的时候会根据索引模板配置生成热数据索引,新插入的doc则会自动保存到热数据节点上。
这时肯定有人会问题,数据何时会存到冷数据节点呢?自动的?
不不不,这个还是需要我们调用API来修改索引的配置才能实现,热数据迁移到冷数据节点上,当然有了这个API接口,做成自动的不是分分种的事情吗?能难到我们程序员?(写个定时任务,把超过3个的索引修改成冷节点属性)
修改索引:http://10.10.43.13:9200/hodo-history-2021-01/_settings{"index.routing.allocation.require.box_type" : "cold"}
配置修改后,ES服务端会根据配置变化,自动把数据迁移到指定服务器,这个不需要我们干预。
画的一个比较简陋的架构图,仅供参考

三、测试结果
拿数据说话
环境 | 索引名称 | 数据量 | 查询速度 |
某系统联通云环境 | fire-history-2019-09 | 540,666,628(33.0G) | 用时:6.139秒 |
fire-history-2019-11 | 682,814,475(42.0G) | 用时:8.41秒 | |
本地热数据节点(SSD) | hodo-history-2021-01 | 324,884,953(31.2G) | 用时:0.143秒 |
hodo-history-2021-01 | 612,670,000(58.2G) | 用时:0.326秒 | |
本地冷数据节点(HDD) | hodo-history-2021-01 | 612,670,000(58.2G) | 用时:3.885秒 |

公众号:架构工匠(ID: gh_e3ddf5fb9980)
CSDN博客:架构工匠
长按二维码关注
愿一个热爱技术的灵魂,给你带来更多共鸣与激情碰撞。

感谢您的阅读!常来哦




