Elasticsearch 集群中有哪些节点类型(Master, Data, Client/Coordinating 等)?
在 Elasticsearch (ES) 集群中,节点(Node)是集群的最小运行单位。默认情况下,一个节点会承担所有角色,但在生产环境(特别是大规模集群)中,为了性能和稳定性,通常会将节点配置为单一或特定的角色。
以下是 Elasticsearch 中主要的节点类型及其详细职责:
1. Master-eligible Node (候选主节点)
- 配置标识:
node.roles: [ master ] - 职责:
- 集群的大脑。它们有资格被选举为集群的 主节点 (Active Master)。
- 主节点的工作:负责轻量级的集群范围内的操作,例如:创建或删除索引、跟踪哪些节点是集群的一部分、决定将分片(Shards)分配给哪些节点。
- 重要性:主节点非常关键,必须保证其稳定性。如果主节点过载,集群可能会变得不稳定。
- 最佳实践:
- 在大型集群中,通常设置 3 个专用的 Master-eligible 节点(不存数据,不处理请求),以避免“脑裂”并保证高可用。
2. Data Node (数据节点)
- 配置标识:
node.roles: [ data ](或者更细分的data_hot,data_warm等) - 职责:
- 干苦力的。负责存储数据(分片)和执行与数据相关的操作(CRUD、搜索、聚合)。
- 资源消耗:这些操作非常消耗 I/O、内存和 CPU。
- 细分类型 (冷热架构 ILM):
data_content: 存储长期不变的数据。data_hot: 存储最新的、频繁查询和写入的数据(需要高性能 SSD)。data_warm: 存储访问频率较低的数据。data_cold/data_frozen: 存储极少访问的归档数据。
3. Coordinating Node (协调节点)
- 配置标识:
node.roles: [ ](设置为空列表) - 职责:
- 路由与分发。实际上,所有节点默认都是协调节点。
- 当一个节点收到客户端的请求(如搜索请求)时,它就充当该请求的“协调节点”。
- 它负责将请求转发给持有相关数据的 Data 节点(Scatter),然后将结果汇总(Gather),最后返回给客户端。
- Dedicated Coordinating Node (专用协调节点):如果我们把一个节点配置为既不是 Master,也不是 Data,也不是 Ingest,那么它就变成了一个专用的协调节点(类似负载均衡器)。
- 适用场景: 处理复杂的聚合查询(Aggregation),因为汇总大量数据非常消耗内存和 CPU,将其分离可以防止拖垮数据节点。
4. Ingest Node (预处理节点)
- 配置标识:
node.roles: [ ingest ] - 职责:
- 数据加工流水线。在文档建立索引之前,对其进行预处理(Pipeline)。
- 功能类似于 Logstash 的过滤器(Filter),可以执行 grok 解析、重命名字段、转换数据类型等操作。
- 适用场景: 如果你有大量的预处理逻辑(Ingest Pipelines),将其分离到专用节点可以避免影响数据节点的写入性能。
5. Machine Learning Node (机器学习节点)
- 配置标识:
node.roles: [ ml ] - 职责:
- 运行 Elasticsearch 的 X-Pack 机器学习作业(如异常检测)。
- 这些作业通常需要大量的 CPU 和内存进行数学计算。
6. Transform Node (转换节点)
- 配置标识:
node.roles: [ transform ] - 职责:
- 运行 Transform 任务(将现有索引转换为汇总后的新索引)。
7. Voting-only Node (仅投票节点)
- 配置标识:
node.roles: [ master, voting_only ] - 职责:
- 这是 Master-eligible 的一种特殊情况。它参与主节点选举的投票,但永远不会被选为 Master。
- 用于在只有 2 个全功能 Master 节点时凑齐 3 票以防止脑裂,通常用于节省硬件资源。
总结与架构建议
在 elasticsearch.yml 配置文件中,通过 node.roles 来定义。
- 小型集群 (开发/测试):
- 所有节点身兼数职(Master + Data + Ingest)。
- 中型集群:
- 3 个专用 Master 节点。
- 其余为 Data 节点(兼任 Ingest/Coordinating)。
- 大型/高负载集群:
- 3 个专用 Master 节点 (低配 CPU/RAM,小磁盘)。
- 多个专用 Data 节点 (高配 CPU/RAM/IO,大磁盘)。
- 若干专用 Coordinating 节点 (高配 CPU/RAM,无磁盘) -> 用于承接外部高并发查询。
- (可选) 专用 Ingest 节点 -> 如果写入前处理逻辑很重。
右滑查看面试常问