📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

配置项作用 #

node.roles 配置项指定节点的角色,决定节点在集群中的功能。每个角色对应不同的职责,合理分配角色可以优化集群性能和资源使用。

配置项类型 #

该配置项为静态配置,需要在启动时设置,修改后需要重启节点才能生效。

默认值 #

[master, data, ingest, remote_cluster_client]

是否必需 #

可选配置项(有默认值)

可用角色 #

角色缩写说明能否存储数据
masterm主节点候选,参与集群管理
datad数据节点,存储数据并执行查询
ingesti摄入节点,处理数据预处理
remote_cluster_clientr跨集群客户端节点
searchs搜索节点,执行搜索操作

配置格式 #

# 多角色节点(默认)
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:数据节点负载过高

解决方案:

  1. 增加数据节点数量
  2. 使用专用协调节点
  3. 优化查询和索引策略

问题 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初始主节点列表-

注意事项 #

  1. 静态配置:修改角色需要重启节点
  2. 主节点数量:建议配置 3 或 5 个专用主节点
  3. 资源分离:专用角色可提高性能
  4. 集群规模:小集群可使用多角色节点
  5. 逐步迁移:从旧配置迁移时建议逐步调整