「Elasticsearch」- "Hot-Warm" Architecture @20210411

内容简介

当使用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」- 集群搭建(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


上一篇:冰冻三尺,非一日之寒。数据解析——xpath(4)


下一篇:python之独热编码的实现