ElasticSearch 节点角色
ElasticSearch 节点是“分布式搜索数据库”中的独立运行单元,节点角色决定它在集群中承担的职责。
合理使用节点角色 = 高性能 + 高稳定性 + 高扩展性。
ES 7.x -> 8.x 对角色进行了大量增强,以下内容为最新完整版本。
| 角色 | 配置值 | 作用 |
|---|---|---|
| Master 节点 | master | 负责集群管理、选主、分片调度 |
| Data 节点(经典) | data | 所有索引数据都可放置 |
| Hot 数据节点 | data_hot | 写入、实时搜索(高性能层) |
| Warm 数据节点 | data_warm | 温数据存储、低频查询 |
| Cold 数据节点 | data_cold | 冷数据/HDD 存储 |
| Frozen 数据节点 | data_frozen | 搜索 S3/MinIO 中的快照数据 |
| Ingest 节点 | ingest | Pipeline 预处理、解析、grok |
| Machine Learning 节点 | ml | 运行 ML job、异常检测 |
| Transform 节点 | transform | 运行数据透视、指标聚合 |
| Coordinating-only 节点 | (无配置,只是剥离所有角色) | 负载均衡 + 路由 + 查询协调 |
| Remote Cluster Client | remote_cluster_client | 跨集群搜索(CCS)、跨集群复制 |
| Voting-only 节点 | voting_only | 参与选主但不做 master |
| Search 节点(8.x 新) | data_content | 存放用户内容数据 |
| Tiers(层级管理) | data_hot/data_warm/… | 灵活管理数据生命周期 |
配置
node.roles: ["master"]
职责
- 选主 / 保持集群健康
- 管理集群状态(Cluster State)
- 管理分片调度(shard allocation)
- 创建/删除索引
- 管理节点加入和退出
特点
- 不存储数据
- CPU/内存压力低,但 不能挂
- 建议 3 个(奇数)
最佳实践
- master 单独部署:强烈推荐
- 内存 4–8GB 足够
- 磁盘不重要,但不能满
旧时代
node.roles: ["data"]
代表承担所有数据职责:写入 + 搜索 + 热/冷数据。
但从 ES 7.10 开始,官方建议改用 Hot/Warm/Cold/Frozen 数据分层。
配置
node.roles: ["data_hot"]
用途
- 高并发写入(Logstash、Beats)
- Realtime 查询
- refresh/merge 高开销任务
最佳实践
- NVMe SSD
- 强 CPU(8+ 核)
- 大内存(16–64GB)
- shard 尽量小(≤ 30GB)
配置
node.roles: ["data_warm"]
用途
- 索引写入完成后存放 Warm 层
- 低频查询
- 批量 merge 后保持长期可查
最佳实践
- 普通 SSD 即可
- 大容量磁盘
- 配合 ILM:
"allocate": { "include": {"data": "warm"} }
配置
node.roles: ["data_cold"]
用途
- 历史数据(180 天+)
- 查询非常低
- 基本只保留可查性
特点
- HDD 机械盘即可
- 对 CPU 要求低
- 查询速度比 warm 慢
配置
node.roles: ["data_frozen"]
用途
- 从对象存储(S3、OSS、MinIO)按需加载查询数据
- 成本最低
- 使用 searchable snapshot
特点:
- 不存储数据
- 查询时从对象存储加载
- 延迟极高(秒级)
配置
node.roles: ["ingest"]
用途
- grok 解析
- geoip
- log enrich
- pipeline 处理
最佳实践:
- 若 Logstash 负载大,可让 ES Ingest 处理部分数据
- 可扩容多个 Ingest 节点
配置
node.roles: ["ml"]
用途
- Anomaly detection(异常检测)
- Data frame analytics
- 机器学习模型训练与推理
只有在使用 Elastic ML 功能时才需要。
配置
node.roles: ["transform"]
用途
- 数据枢纽(类似数据透视表)
- 生成 summary index / rollup index
适合 BI/分析场景。
配置
node.roles: ["remote_cluster_client"]
对跨集群搜索(CCS/CCR)有用。
配置
node.roles: ["voting_only"]
用途:
- 参与选主
- 不承担任何其它 master 职责
- 用于小集群提高选主可靠性
典型例子:
两主一 vote-only -> 可避免 split-brain。
配置方式:
node.roles: []
(把所有角色去掉即可)
用途:
- client node
- 聚合
- 路由请求
- 执行 query 阶段的 reduce
最佳实践:
- 大集群中统一使用 协调节点 来处理 heavy query
- 有效降低 Data Node 的压力
| 节点类型 | 数量 | 说明 |
|---|---|---|
| 3 × master | 3 | 仅 master |
| 3 × hot | 3 | NVMe |
| 3 × warm | 3 | 普通 SSD |
| 3 × cold | 3 | HDD |
| 1–2 × ingest | 可选 | Log 预处理 |
| 1–2 × coordinating-only | 可选 | 搜索分发/聚合 |
| 节点类型 | 用途 |
|---|---|
| master | 选主、状态 |
| data_content | 业务数据 |
| coordinating-only | 查询协调 |
| ml | 异常检测 |
| transform | 统计分析 |