配置项作用 #
node.roles 配置项指定节点的角色,决定节点在集群中的功能。每个角色对应不同的职责,合理分配角色可以优化集群性能和资源使用。
配置项类型 #
该配置项为静态配置,需要在启动时设置,修改后需要重启节点才能生效。
默认值 #
[master, data, ingest, remote_cluster_client]
是否必需 #
可选配置项(有默认值)
可用角色 #
| 角色 | 缩写 | 说明 | 能否存储数据 |
|---|---|---|---|
master | m | 主节点候选,参与集群管理 | 否 |
data | d | 数据节点,存储数据并执行查询 | 是 |
ingest | i | 摄入节点,处理数据预处理 | 否 |
remote_cluster_client | r | 跨集群客户端节点 | 否 |
search | s | 搜索节点,执行搜索操作 | 是 |
配置格式 #
# 多角色节点(默认)
node.roles: [master, data, ingest, remote_cluster_client]
# 包含搜索角色的多角色节点
node.roles: [master, data, ingest, remote_cluster_client, search]
# 专用数据节点
node.roles: [data]
# 专用主节点
node.roles: [master]
# 专用搜索节点
node.roles: [search]
# 协调节点(无角色)
node.roles: []
角色详解 #
1. master(主节点)
负责集群管理操作:
- 创建/删除索引
- 追踪集群中的节点
- 决定分片分配到哪个节点
- 维护集群状态
# 专用主节点配置(推荐)
node.roles: [master]
2. data(数据节点)
存储数据并执行相关操作:
- CRUD 操作
- 聚合查询
- 分片恢复
# 数据节点配置(推荐)
node.roles: [data]
3. ingest(摄入节点)
在索引前预处理数据:
- 数据转换
- 富文档处理
- Pipeline 执行
# 摄入节点配置(推荐)
node.roles: [ingest]
4. remote_cluster_client(跨集群客户端)
连接到远程集群:
- 跨集群搜索
- 跨集群复制
# 跨集群客户端配置
node.roles: [remote_cluster_client]
5. search(搜索节点)
执行搜索操作:
- 搜索请求
- 聚合查询
# 搜索节点配置
node.roles: [search]
集群架构规划 #
小型集群(3 节点):
┌─────────────────────────────────────┐
│ 节点1 │
│ [master, data, ingest] │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│ 节点2 │
│ [master, data, ingest] │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│ 节点3 │
│ [master, data, ingest] │
└─────────────────────────────────────┘
# 所有节点配置相同
node.roles: [master, data, ingest]
中型集群(推荐架构):
┌─────────────────────────────────────┐
│ 主节点 (3个) │
│ [master] │
│ 管理集群,不存储数据 │
└─────────────────────────────────────┘
│
┌─────────────────────────────────────┐
│ 数据节点 (N个) │
│ [data] │
│ 存储数据,执行查询 │
└─────────────────────────────────────┘
# 主节点
node.roles: [master]
# 数据节点
node.roles: [data]
大型集群(专用角色):
┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ 主节点层 │ │ 数据节点层 │ │ 协调节点层 │
│ [master] │ │ [data] │ │ [] │
│ │ │ │ │ │
│ - 集群管理 │ │ - 数据存储 │ │ - 请求处理 │
│ - 状态维护 │ │ - 查询执行 │ │ - 结果聚合 │
└──────────────────┘ └──────────────────┘ └──────────────────┘
│
┌──────────────────┐
│ 摄入节点层 │
│ [ingest] │
│ │
│ - 数据预处理 │
│ - Pipeline执行 │
└──────────────────┘
推荐配置建议 #
生产环境建议:根据集群规模和功能需求设置
| 集群规模 | 主节点 | 数据节点 | 摄入节点 | 协调节点 |
|---|---|---|---|---|
| < 10 节点 | 每个节点 | 每个节点 | 每个节点 | 不需要 |
| 10-50 节点 | 3 台专用 | N 台专用 | 可选 | 可选 |
| > 50 节点 | 3-5 台专用 | N 台专用 | 专用 | 专用 |
主节点规划 #
主节点数量建议:
最小主节点数 = (总主节点数 / 2) + 1
示例:
- 3 个主节点:允许 1 个故障
- 5 个主节点:允许 2 个故障
- 7 个主节点:允许 3 个故障
主节点配置:
# 专用主节点
node.roles: [master]
node.name: master-node-1
# 硬件建议
# - CPU: 中等
# - 内存: 中等(4-8GB)
# - 磁盘: 小(仅存储集群状态)
# - 网络: 低延迟
数据节点规划 #
# 数据节点
node.roles: [data]
# 硬件建议
# - CPU: 高性能
# - 内存: 大(建议 50% 堆给文件系统缓存)
# - 磁盘: 大容量 SSD
# - 网络: 高带宽
# JVM 堆内存建议
# - < 64GB RAM: 50% 给堆
# - >= 64GB RAM: 最大 30GB 给堆
协调节点规划 #
# 协调节点(无角色)
node.roles: []
# 功能
# - 处理搜索请求
# - 聚合结果
# - 分发请求到数据节点
# 硬件建议
# - CPU: 高性能
# - 内存: 中等
# - 磁盘: 小(不存储数据)
# - 网络: 高带宽低延迟
摄入节点规划 #
# 摄入节点
node.roles: [ingest]
# 功能
# - 执行 Pipeline
# - 数据预处理
# 硬件建议
# - CPU: 取决于处理复杂度
# - 内存: 中等
# - 磁盘: 小(不存储原始数据)
查看节点角色 #
# 查看所有节点及其角色
GET /_cat/node_attrs?v
# 查看节点信息
GET /_cat/nodes?v
# 查看特定节点
GET /_nodes/node-1
输出示例:
name node.roles master
node-1 master,data,ingest *
node-2 data -
node-3 ingest -
常见问题 #
问题 1:没有配置主节点导致集群无法形成
解决方案:
# 确保至少有 3 个主节点候选
# 节点 1
node.roles: [master]
# 节点 2
node.roles: [master]
# 节点 3
node.roles: [master]
# 设置初始主节点
cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]
问题 2:数据节点负载过高
解决方案:
- 增加数据节点数量
- 使用专用协调节点
- 优化查询和索引策略
问题 3:主节点负载过高
解决方案:
# 确保主节点不承担其他角色
node.roles: [master]
# 减少集群状态变更
# - 避免频繁创建/删除索引
# - 使用索引模板
# - 合理设置分片数
迁移指南 #
从旧配置迁移到新配置:
# 旧配置(已弃用)
node.master: true
node.data: true
node.ingest: true
# 新配置(推荐)
node.roles: [master, data, ingest]
迁移示例:
# 原有节点
# node.roles: [master, data, ingest]
# 新增专用主节点
node.roles: [master]
# 数据节点移除 master 角色
node.roles: [data]
相关配置项 #
| 配置项 | 作用 | 默认值 |
|---|---|---|
node.master | 主节点角色(已弃用) | true |
node.data | 数据节点角色(已弃用) | true |
node.ingest | 摄入节点角色(已弃用) | true |
node.remote_cluster_client | 跨集群客户端(已弃用) | true |
cluster.initial_master_nodes | 初始主节点列表 | - |
注意事项 #
- 静态配置:修改角色需要重启节点
- 主节点数量:建议配置 3 或 5 个专用主节点
- 资源分离:专用角色可提高性能
- 集群规模:小集群可使用多角色节点
- 逐步迁移:从旧配置迁移时建议逐步调整





