内容简介
当使用Elasticsearch做为“大时间”的数据分析的时候,建议使用时间作为索引,并设置三种不同类型的节点(主、热、温),也就是我们说的「Hot-Warm」架构。
本文介绍了「Hot-Warm」架构的一些基本概念、要注意的一些问题、如何搭建集群。
节点类型
每个节点都有他们自己的作用,下面将会进行介绍每个节点的作用。
# 主节点(Master Nodes)
作用:专用的Master节点负责处理集群的管理和状态,以提供集群的稳定性。
配置:在集群中,设置三个专用的Master节点,以提供最大的弹性。在专用的Master节点中,不会保存参与搜索的数据,也不会进行文档索引。因此也不会有很长时间的GC停顿,而且对CPU、RAM、DISK等资源的要求也低于其他数据节点。
要配置discovery.zen.minimum_master_nodes=2选项以防止集群脑裂。
# 热节点(Hot Nodes)
作用:专用的数据节点,复制执行群集中的所有数据的索引。它们也拥有最新的索引,并且这些索引通常是查询频率最高的。
配置:由于索引是CPU和IO密集型操作,因此这些服务器需要较高的配置,并且需要连接SSD存储。建议至少运行三个热节点,以实现高可用性。根据数据量的要求,可能需要增加数量来实现某些性能目标。
# 温节点(Warm Nodes)
作用:这种类型的节点旨在处理大量不经常查询的只读索引。由于这些索引是只读的,因此节点倾向于使用大容量磁盘,机械盘即可。
配置:与热节点一样,建议至少使用3个温节点以实现高可用性。需要注意的是,和以前一样,如果数据量较大可能需要额外的节点来满足性能要求。另外CPU和内存配置通常需要与热节点的配置相同。具体的配置只能通过模拟在生产环境中吞吐的来确定。
搭建概述
# 节点区分
首先,要有办法区分三种类型的节点,以告诉Elasticsearch在那个节点上分配索引。这可以通过为节点设置属性:
# in elasticsearch.yml node.attr.box_type: hot # in elasticsearch.yml node.attr.box_type: warm
其中的box_type是自定义的属性,完全可以使用自己喜欢的名字。
因此,如果希望某个索引分配到热节点,可以在创建索引时指定标签:
PUT /logs_2016-12-26 { "settings": { "index.routing.allocation.require.box_type": "hot" } }
# 索引配置
如果使用logstash或beats管理索引模板,则应更新索引模板,以包括索引分配过滤。使用index.routing.allocation.require.box_type: hot设置将导致在热节点上创建新索引。在配置文件的模板中,可以设置:
{ "template" : "indexname-*", # "template" : "*", "version" : 50001, "settings" : { "index.routing.allocation.require.box_type": "hot" ...
# 索引迁移
在一段时间后,当索引的使用率下降,需要迁移到温节点是,可以修改标签:
PUT /logs_2016-12-26/_settings { "settings": { "index.routing.allocation.require.box_type": "warm" } }
设置完成后,Elasticsearch会将数据自动迁移到温节点。
# 索引压缩
还可以通过在elasticsearch.yml中设置index.codec:best_compression选项,在所有热数据节点上启用更好的压缩。
当数据移动到暖节点时,我们可以调用_forcemerge来合并段:通过减少段不仅可以节省内存、磁盘空间、文件句柄,而且还会使用新的best_compression编解码器重写索引。
当索引分配在热节点上时,不要进行强制合并索引,因为优化进程将使用这些节点上的I/O,并影响今日日志的索引速度。但是,在温节点上并没有太多的操作,所以强制合并索引是安全的。
# 索引自动迁移
上面的过程都手动进行的,我们总不能一直盯着吧。可以使用「Curator」来自动迁移过期的索引。
!!!也可以使用「Index Lifecycle Management」来管理,但是最少要在「Easticsearch 6.6」版本。虽然它属于X-Pack包,但是该功能已经开放出来了。但鉴于我的环境是「Elasticsearch 6.3」版本,所以我使用「Curator」进行索引管理。
集群部署
相关文章
「Elasticsearch」- 集群搭建(Elasticsearch 6.8.6)
「Elasticsearch」- 集群搭建(Elasticsearch 7.6.2)
「Elasticsearch」- 热温集群部署
参考文献
“Hot-Warm” Architecture in Elasticsearch 5.x
Sizing Hot-Warm Architectures for Logging and Metrics in the Elasticsearch Service on Elastic Cloud
Implementing a Hot-Warm-Cold Architecture with Index Lifecycle Management
What's New in Elastic Stack 6.6.0?
Elasticsearch version 6.6.0