文章目录
在分布式搜索与数据分析场景中,合理的节点角色划分是 ElasticSearch 8.x 集群高效运行的核心架构设计。本文深度解析 ElasticSearch 8.x 全新的节点角色体系,通过node.roles参数的精细化配置,帮助开发者理解如何通过功能分离提升集群稳定性与资源利用率。
以Elasticsearch 8.X版本集群为例,如果我们不手动设置节点角色,则默认节点角色为cdfhilmrstw:
当集群规模比较大之后(比如集群节点数大于6个),就需要手动设定、配置节点角色。
ElasticSearch的角色划分参考下图:
对于不同的节点角色类型,对部署机器的配置的要求也是不同的:
一、主节点
- Elasticsearch 主节点的核心职责是全局管理:
- 索引与节点管理:负责创建 / 删除索引、监控集群节点成员、决策分片分配策略;
- 元数据存储:其path.data目录存储集群级元数据(如索引结构、节点状态等关键信息)。
这些管理职能是集群稳定运行的核心保障,确保分片分配、节点协作等关键机制有序执行。
因此,为了确保集群的稳定运行和有效管理,需要特别注意主节点的配置和维护。
与早期版本不同,节点角色划分后,主节点又被细分为专用候选主节点和仅投票主节点。
1. 专用候选主节点
如果集群规模大、节点多,为了整个系统的稳定性,那么就有必要设置独立的专用候选主节点,其配置如下:
node.roles: [master]
2. 仅投票主节点
这类节点仅用于投票,它们不会被选为主节点。其硬件配置可以比专用候选主节点更低一些。仅投票主节点的配置如下,其中master必不可少:
node.roles: [master,voting_only]
高可用性集群需要至少3个符合主节点资格的节点,其中至少两个不是仅投票节点。这样即使其中一个节点发生故障,该集群也能够选举出一个主节点。
二、数据节点
数据节点会在Elasticsearch集群中执行关键任务,包括保存数据到硬盘或其他永久性存储设备上(通常称为“落地存储”),以及执行各种数据处理操作(如数据添加、删除、修改、查询、搜索和聚合等)。由于数据节点的功能包括对大量数据进行处理和保存,它们对硬件配置的需求相对较高,特别是对CPU、内存和磁盘的需求。
为了确保数据节点有效地处理这些任务并响应查询请求,我们需要在硬件配置上提供足够的资源。而选择性能强大的CPU以及提供充足的内存和磁盘空间,是确保数据处理效率和稳定性的关键。使用专用数据节点的好处在于可以让主节点和数据节点分离、各司其职。
数据节点存储的内容如下:
- 分片数据。
- 每个分片对应的元数据。
- 集群层面的元数据,如setting和索引模板。
数据节点的配置如下:
node.roles: [data]
在Elasticsearch多层冷热集群架构体系下,数据节点又可以细分如下:
Elasticsearch 的热节点、温节点、冷节点是基于数据访问频率和存储成本设计的分层架构节点,通过索引生命周期管理(ILM)实现数据自动化迁移:热节点使用高性能硬件(如 SSD)承载高频访问的实时 / 近实时数据,支持快速读写和复杂操作;随着数据时效性降低(如从几天到数月),通过 ILM 策略自动迁移至配置中等的温节点(如 SATA 硬盘),存储中期低频访问的只读数据;最终,针对长期归档的冷数据(如一年以上),经冻结处理后迁移至低成本的冷节点(如 HDD 或云存储),仅支持低频检索。这一架构使数据按 “热→温→冷” 的流向逐级降频存储,在保障高频数据性能的同时,通过硬件成本差异化配置实现整体资源优化。
1)在配置节点角色时,data_hot、data_warm、data_cold要和data_content一起配置,而不要和原有的仅data节点角色一起配置了。
2)如果仅设置data_hot而不设置data_content节点角色,则会导致集群数据写入后无法落地。
3)data_hot、data_warm与data_cold节点角色是标识性的角色,而数据实际落地存储还得靠data_content角色。
1. 内容数据节点
内容数据节点是一个节点角色,用于指定具体的负责存储和搜索数据的节点。这个角色的主要功能是处理和查询数据,包括文本、数字和地理位置等类型的数据。
其具体职责如下:
- 存储数据:将数据分片存储在节点上。
- 搜索数据:处理来自客户端的搜索请求,并在本地分片中搜索数据。
- 索引数据:对新数据进行索引操作,以便进行搜索和查询。
节点的配置如下:
node.roles: [data_content]
2. 热数据节点
热数据节点的用途主要是保存最近、最常访问的热数据,即经常被访问和更新的数据。
在数据生命周期的早期,数据通常处于活跃状态,会频繁读写。
热数据节点通常配置在高性能硬件上,例如高速SSD存储和高性能CPU。
节点的配置如下:
node.roles:[data_hot]
3. 温数据节点
温数据节点的用途主要是保存访问频次低且很少更新的时序数据。
节点的配置如下:
node.roles:[data_warm]
4. 冷数据节点
冷数据节点的用途主要是保存不经常访问且通常不更新的时序数据,可用于存储可搜索快照。
节点的配置如下:
node.roles:[data_cold]
5. 冷冻数据节点
冷冻数据节点的用途主要是保存很少访问且从不更新的时序数据。
节点的配置如下:
node.roles:[data_frozen]
三、ingest节点
Elasticsearch的ingest节点,简单说就是数据写入前的“预处理小助手”。你可以把它想象成一个“数据加工厂”,专门在数据存进数据库(索引)之前,帮你把数据清洗、整理、加工成你想要的样子。
比如,你收到一堆“乱七八糟”的原始数据(像日志里的一大串文字、格式混乱的表格),直接存进去很难查询分析。这时候ingest节点就会按你定的规则(比如一个“加工流程”),自动做这些事:
- 拆分成小块:把一长串日志拆成“时间”“IP地址”“操作类型”等单独的字段,方便后续搜索;
- 统一格式:把不同写法的时间(比如“2023-10-01”和“10/01/2023”)统一成同一种标准;
- 补全或删除:给缺少信息的字段补个默认值,或者直接扔掉没用的数据;
- 关联外部信息:比如根据用户ID,从另一个数据库里自动查到用户的地区和年龄,加到数据里。
这个“小助手”可以独立工作(单独部署节点),因为处理数据需要计算资源(比如CPU),单独分开后,不会影响存储数据的节点(数据节点)和负责查询的节点,让整个系统更快更稳定。
节点的配置如下:
node.roles:[ingest]
四、仅协调节点
这类节点的作用类似于智能负载均衡器,负责路由分发请求、聚拢(或叫作收集,可理解为分发的反过程)搜索或聚合结果。可以简单理解为集群里的 “快递中转站” 或者 “任务调度员”—— 它不存储任何数据,只负责 “跑腿” 和 “协调”,专门处理客户端的请求怎么分发、结果怎么汇总,让整个集群的工作更高效。
节点的配置如下:
node.roles:[]
五、远程节点
lasticsearch 的 “远程节点”,可以简单理解为两个集群之间的 “联络员”—— 当你有多个 Elasticsearch 集群(比如分公司一个集群、总公司一个集群),想让它们 “互通有无”,但又不想把数据全部复制到同一个集群里,就可以让某个节点当 “远程节点”,专门负责跨集群 “传话”。
节点的配置如下:
node.roles:[remote_cluster_client]
六、机器学习节点
机器学习节点是一类特殊类型的节点,它专门用于运行机器学习功能。它们负责运行数据分析任务,如异常检测、预测和回归等。这类节点的功能是收费的,Elasticsearch开源版本并不提供。
节点的配置如下:
node.roles:[ml,remote_cluster_client]
七、转换节点
转换节点是一个特殊类型的节点,负责执行数据转换任务。数据转换是指将数据从一种格式或结构转换为另一种格式或结构的过程。在Elasticsearch中,这通常涉及对原始数据创建新的索引,并对新索引中的数据进行汇总、分组或其他转换操作,以便更有效地进行分析和查询。
节点的配置如下:
node.roles:[transform,remote_cluster_client]