Elasticsearch 中的节点角色
Elasticsearch 7.9 版本开始引入 节点角色 的概念。
在 Elasticsearch 8.X 版本中,节点类型 升级为 节点角色。节点角色分得很细,包括 数据节点 角色、主节点 角色、ingest 节点 角色、热节点 角色等。
在 Elasticsearch 集群中,每个启动的 Elasticsearch 进程都可以叫作一个节点。以 Elasticsearch 8.X 版本集群为例,如果我们不手动设置节点角色,则默认节点角色为 cdfhilmrstw
。
节点角色缩写 | 英文释义 | 中文释义 |
---|---|---|
c |
cold data node |
冷数据节点 |
d |
data node |
数据节点 |
f |
frozen data node |
冷冻数据节点 |
h |
hot data node |
热数据节点 |
i |
ingest node |
数据预处理节点 |
l |
machine learning node |
机器学习节点 |
m |
master-eligible node |
候选主节点 |
r |
remote cluster client node |
远程节点 |
s |
content data node |
内容数据节点 |
t |
transform node |
转换节点 |
w |
warm data node |
温数据节点 |
/ |
coordinating only node |
仅协调节点 |
当集群规模比较大之后(比如集群节点数大于 6 个),就需要手动设定、配置节点角色。
1.主节点(master)
主节点 在 Elasticsearch 集群中的关键作用主要体现在全局级别的管理上。例如,主节点负责管理 索引的创建或删除操作,监控哪些节点是集群的成员,以及 确定将哪些分片分配给哪些节点。这种决策和管理的能力使主节点在维持整个集群稳定运行中扮演了重要角色。
此外,主节点还负责 存储重要的元数据,包括集群中每个索引的元数据和集群级别的元数据。特别地,主节点的 path.data
目录用于存放这些集群元数据信息,这是主节点不可或缺的功能。
因此,为了确保集群的稳定运行和有效管理,需要特别注意主节点的配置和维护。
拥有稳定的主节点对于集群健康非常重要。与早期版本不同,节点角色划分后,主节点又被细分为专用 候选主节点 和 仅投票主节点。
1.1 专用候选主节点(dedicated master-eligible node)
如果集群规模大、节点多,那么就有必要设置独立的 专用候选主节点,其配置如下。
node.roles: [ master ]
1.2 仅投票主节点(voting-only master-eligible node)
这类节点仅用于投票,它们不会被选为主节点。其硬件配置可以比专用候选主节点更低一些。仅投票主节点 的配置如下,其中 master
必不可少。
node.roles: [ master, voting only ]
🚀 关于集群主节点配置,要强调一点:高可用性集群 需要至少 3 个符合主节点资格的节点,其中至少两个不是仅投票节点。这样即使其中一个节点发生故障,该集群也能够选举出一个主节点。
2.数据节点(data)
数据节点 会在 Elasticsearch 集群中执行关键任务,包括 保存数据到硬盘或其他永久性存储设备上(通常称为 落地存储),以及执行各种数据处理操作(如数据添加、删除、修改、查询、搜索和聚合等)。
由于数据节点的功能包括对大量数据进行处理和保存,它们对硬件配置的需求相对较高,特别是对 CPU、内存和磁盘的需求。为了确保数据节点有效地处理这些任务并响应查询请求,我们需要在硬件配置上提供足够的资源。而选择性能强大的 CPU 以及提供充足的内存和磁盘空间,是确保数据处理效率和稳定性的关键。
使用专用数据节点的好处在于可以 让主节点和数据节点分离、各司其职。
数据节点存储的内容如下:
- 分片数据。
- 每个分片对应的元数据。
- 集群层面的元数据,如
setting
和索引模板。
数据节点的配置如下:
node.roles: [ data ]
在 Elasticsearch 多层冷热集群架构体系下,数据节点又可以细分如下。
- 内容数据节点
- 热数据节点
- 温数据节点
- 冷数据节点
- 冷冻数据节点
2.1 内容数据节点(data_content)
内容数据节点 是一个节点角色,用于 指定具体的负责存储和搜索数据的节点。这个角色的主要功能是 处理和查询数据,包括文本、数字和地理位置等类型的数据。其具体职责如下:
- 存储数据:将数据分片存储在节点上。
- 搜索数据:处理来自客户端的搜索请求,并在本地分片中搜索数据。
- 索引数据:对新数据进行索引操作,以便进行搜索和查询。
node.roles: [data_content]
2.2 热数据节点(data_hot)
热数据节点 的用途主要是保存 最近、最常访问 的热数据,即经常被访问和更新的数据。在数据生命周期的早期,数据通常处于活跃状态,会频繁读写。热数据节点通常配置在高性能硬件上,例如高速 SSD 存储和高性能 CPU。
node.roles: [data_hot]
2.3 温数据节点(data_warm)
温数据节点 的用途主要是保存 访问频次低 且 很少更新 的时序数据。
node.roles: [data_warm]
2.4 冷数据节点(data_cold)
冷数据节点 的用途主要是保存 不经常访问 且 通常不更新 的时序数据,可用于存储可搜索快照。
node.roles: [data_cold]
2.5 冷冻数据节点(data_frozen)
冷冻数据节点 的用途主要是保存 很少访问 且 从不更新 的时序数据。
node.roles: [data_frozen]
注意 ⚠
- 🚀 在配置节点角色时,
data_hot
、data_warm
、data_cold
要和data_content
一起配置而不要和原有的仅 data 节点角色一起配置了。- 🚀 如果仅设置
data_hot
而不设置data_content
节点角色,则会导致集群数据写入后无法落地。- 🚀
data_hot
、data_warm
与data_cold
节点角色是标识性的角色,而数据实际落地存储还得靠data_content
角色。
3.ingest 节点
这类节点通常 执行由预处理管道组成的预处理任务,后面会专门详细解读 ingest 数据预处理过程。
node.roles: [ ingest ]
4.仅协调节点
这类节点的作用类似于智能负载均衡器,负责路由分发请求、聚拢(或叫作收集,可理解为分发的反过程)搜索或聚合结果。
配置为空则代表仅协调节点,如下所示。
node.roles: [ ]
5.远程节点(remote_cluster_client)
这类节点用于 跨集群检索 或 跨集群复制。
node.roles: [ remote_cluster_client ]
6.机器学习节点(ml)
机器学习节点 是一类特殊类型的节点,它专门用于运行机器学习功能。它们负责运行数据分析任务,如异常检测、预测和回归等。这类节点的功能是收费的,Elasticsearch 开源版本并不提供。
node.roles: [ ml, remote_cluster_client ]
7.转换节点(transform)
转换节点 是一个特殊类型的节点,负责执行数据转换任务。数据转换是指将数据从种格式或结构转换为另一种格式或结构的过程。在 Elasticsearch 中,这通常涉及对原始数据创建新的索引,并对新索引中的数据进行汇总、分组或其他转换操作,以便更有效地行分析和查询。
node.roles: [ transform, remote_cluster_client ]
8.节点角色和硬件配置的关系
角色 | 描述 | 存储 | 内存 | 计算 | 网络 |
---|---|---|---|---|---|
数据节点 | 存储和检索数据 | 极高 | 高 | 高 | 中 |
主节点 | 管理集群状态 | 低 | 低 | 低 | 低 |
ingest 节点 | 转换输入数据 | 低 | 中 | 高 | 中 |
机器学习节点 | 机器学习 | 低 | 极高 | 极高 | 中 |
协调节点 | 请求转发和合并检索结果 | 低 | 中 | 中 | 中 |