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

配置项作用 #

node.master 配置项用于控制节点是否有资格成为主节点(Master-eligible Node)

主节点是集群的核心,负责集群范围内的管理操作,如创建或删除索引、跟踪哪些节点是集群的一部分、决定分片分配到哪些节点等。

注意:此配置项已被废弃,推荐使用 node.roles 配置来替代。

配置项属性 #

  • 配置路径: node.master
  • 数据类型: Boolean(布尔值)
  • 默认值: true
  • 是否可选: 是
  • 作用域: NodeScope(节点级别)
  • 动态更新: 否(需要重启节点生效)
  • 废弃状态: 已废弃,使用 node.roles 替代

配置项详解 #

工作机制 #

主节点工作机制

启用主节点 (node.master: true):
├── 参与主节点选举
├── 可以被选为活跃主节点
├── 存储集群元数据
├── 执行集群管理操作
│   ├── 创建/删除索引
│   ├── 分配分片
│   ├── 跟踪节点状态
│   └── 管理集群配置
└── 投票选主


禁用主节点 (node.master: false):
├── 不参与主节点选举
├── 不能成为主节点
├── 不存储集群元数据
├── 仅作为数据/协调节点
└── 不参与投票

主节点选举 #

主节点选举流程

集群启动:
┌─────────────────────────────────────┐
│  主资格节点 (master-eligible nodes)  │
│  ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐   │
│  │node1│ │node2│ │node3│ │node4│   │
│  └───┬─┘ └───┬─┘ └───┬─┘ └───┬─┘   │
└──────┼──────┼──────┼──────┼────────┘
       │      │      │      │
       └──────┴──────┴──────┘
              │
         开始选举
              │
         ┌────▼────┐
         │投票阶段  │
         │node1→node2
         │node2→node3
         │node3→node1
         └────┬────┘
              │
         获得多数票
              │
         ┌────▼────┐
         │当选主节点│
         │node2    │
         └─────────┘


选举要求:
├── minimum_master_nodes: (旧版)
│   └── 防止脑裂
├── 主资格节点数量
│   ├── 生产: 3 个
│   ├── 测试: 1-2 个
│   └── 必须是奇数
└── 网络连接
    └── 节点间可通信

集群管理职责 #

主节点的职责

1. 集群状态管理
   ├── 跟踪所有节点
   ├── 维护集群元数据
   ├── 更新集群状态
   └── 广播状态变更


2. 索引管理
   ├── 创建索引
   ├── 删除索引
   ├── 更新映射
   ├── 更新设置
   └── 索引生命周期


3. 分片分配
   ├── 分配主分片
   ├── 分配副本分片
   ├── 重新平衡分片
   ├── 处理节点故障
   └── 恢复未分配分片


4. 节点管理
   ├── 发现新节点
   ├── 检测节点离开
   ├── 处理节点故障
   └── 集群健康检查

角色映射 #

废弃配置与新角色映射

旧配置 (node.master):
node.master: true
    │
    ↓
等效于:
node.roles: [ "master" ]  ✅


完整角色配置示例:
旧方式:
node.master: true
node.data: true
node.ingest: true


新方式 (推荐):
node.roles: [ "master", "data", "ingest" ]


仅主节点:
旧方式:
node.master: true
node.data: false
node.ingest: false


新方式 (推荐):
node.roles: [ "master" ]  ✅


非主节点:
旧方式:
node.master: false
node.data: true


新方式 (推荐):
node.roles: [ "data" ]

配置建议 #

生产环境(专用主节点) #

node:
  master: true
  data: false
  ingest: false

建议: 生产环境应配置专用主节点。至少 3 个主资格节点。

数据节点 #

node:
  master: false  # 禁用主节点角色
  data: true

建议: 数据节点不应兼任主节点,避免资源竞争。

小型集群 #

node:
  master: true  # 默认值
  data: true
  ingest: true

建议: 小型测试/开发环境可以混合角色。

推荐配置(使用新角色) #

# 专用主节点
node.roles: [ "master" ]

# 数据节点
node.roles: [ "data" ]

建议: 使用 node.roles 替代废弃的 node.master

代码示例 #

easysearch.yml 基础配置 #

node:
  master: true

专用主节点配置 #

node:
  name: "master-node-1"
  master: true
  data: false
  ingest: false

数据节点配置 #

node:
  name: "data-node-1"
  master: false
  data: true

开发环境配置 #

node:
  name: "dev-node"
  master: true
  data: true
  ingest: true

推荐使用角色配置 #

# 专用主节点
node.roles: [ "master" ]
node.name: "master-node-1"

# 数据节点
node.roles: [ "data" ]
node.name: "data-node-1"

# 全功能节点
node.roles: [ "master", "data", "ingest" ]

相关配置 #

配置项作用默认值
node.master主节点角色true
node.data数据节点角色true
node.ingest摄取节点角色true
discovery.zen.minimum_master_nodes最少主节点数(旧版)-
node.roles节点角色列表(推荐)-

集群规划 #

主节点数量建议 #

主资格节点数量规划

开发/测试:
├── 1 个主资格节点
├── 简单配置
└── 无冗余


小型生产:
├── 3 个主资格节点 ✅
├── 容错 1 个节点
└── 推荐


中型生产:
├── 3-5 个主资格节点 ✅
├── 容错 1-2 个节点
└── 推荐


大型生产:
├── 5-7 个主资格节点 ✅
├── 容错 2-3 个节点
└── 避免过多


规则:
├── 最少: 3 个
├── 推荐奇数: 3、5、7
├── 避免: 偶数(容易平票)
└── 避免过多: 降低选举效率

专用主节点配置 #

专用主节点架构

集群架构:
┌──────────────────────────────────┐
│        主节点层 (3 节点)          │
│  ┌─────────┐ ┌─────────┐         │
│  │ master1 │ │ master2 │ ...     │
│  └────┬────┘ └────┬────┘         │
└───────┼───────────┼──────────────┘
        │           │
        └───────────┼─────────────┐
                    │             │
        ┌───────────▼─────┐ ┌────▼────────┐
        │   数据节点层    │ │  协调节点   │
        │  data1, data2   │ │  coord1...  │
        └─────────────────┘ └─────────────┘


优势:
├── 主节点稳定: 不受数据操作影响
├── 集群管理: 专注集群状态
├── 资源隔离: 避免资源竞争
└── 故障隔离: 数据节点故障不影响主节点


配置建议:
├── CPU: 中等 (集群管理消耗)
├── 内存: 中等 (存储集群状态)
├── 磁盘: 小容量 (仅元数据)
└── 网络: 低延迟 (节点间通信)

性能影响分析 #

node.master 设置优点缺点
true可参与集群管理增加主节点负载
false减轻管理负担不能成为主节点

资源消耗对比 #

资源消耗分析

主节点职责消耗:
├── CPU 使用
│   ├── 集群状态更新
│   ├── 分片分配计算
│   ├── 选举投票
│   └── 元数据处理
├── 内存使用
│   ├── 集群状态缓存
│   ├── 节点信息
│   ├── 分片信息
│   └── 元数据索引
├── 网络使用
│   ├── 状态广播
│   ├── 节点通信
│   └── 投票消息
└── 磁盘 I/O
    ├── 元数据持久化
    └── 集群状态写入


非主节点:
├── CPU 使用: 减少 ✅
├── 内存使用: 减少 ✅
├── 网络使用: 减少 ✅
└── 专注数据处理 ✅

使用场景 #

推荐启用 node.master 的场景 #

  • 专用主节点: 仅负责集群管理
  • 小型集群: 节点数量少,混合角色
  • 高可用: 至少 3 个主资格节点
  • 测试环境: 简化配置

推荐禁用 node.master 的场景 #

  • 数据节点: 专注数据存储和查询
  • 协调节点: 仅处理请求分发
  • 资源受限: CPU/内存资源不足
  • 大型集群: 使用专用主节点

集群规划建议 #

集群主节点规划

小型集群 (3 节点):
├── 所有节点: master + data + ingest
├── node.master: true
├── node.data: true
├── node.ingest: true
└── 简化部署


中型集群 (10+ 节点):
├── 3 个专用主节点
├── node.roles: [ "master" ]
├── 数据节点
├── node.roles: [ "data" ]
└── 协调节点可选


大型集群 (50+ 节点):
├── 5 个专用主节点
├── node.roles: [ "master" ]
├── 多个数据节点层
├── node.roles: [ "data" ]
├── 协调节点层
├── node.roles: []
└── 清晰分层

注意事项 #

  1. 已废弃: 此配置项已被废弃,推荐使用 node.roles

  2. 需要重启: 修改此配置需要重启节点。

  3. 主节点数量: 生产环境至少 3 个主资格节点。

  4. 奇数原则: 主资格节点数量应为奇数。

  5. 专用配置: 生产环境推荐使用专用主节点。

  6. 资源隔离: 避免主节点兼任数据节点。

  7. 网络稳定性: 主节点间需要稳定的网络连接。

  8. 监控建议: 监控主节点健康状态。

  9. 备份策略: 定期备份集群元数据。

  10. 迁移建议: 新配置使用 node.roles

故障处理 #

主节点故障处理

主节点故障:
├── 其他主资格节点检测
├── 发起选举
├── 选出新主节点
└── 集群继续运行


多数主节点故障:
├── 无法达成多数
├── 集群停止接受写入
├── 读取可能继续
└── 需要人工介入


脑裂预防:
├── minimum_master_nodes (旧版)
├── 使用多数投票机制
├── 网络分区检测
└── 建议使用专用主节点


恢复步骤:
1. 检查网络连接
2. 恢复故障节点
3. 观察选举结果
4. 验证集群状态
5. 检查分片分配

废弃说明 #

配置迁移指南

从废弃配置迁移到新配置

专用主节点:
旧配置:
node.master: true
node.data: false
node.ingest: false


新配置 (推荐):
node.roles: [ "master" ]


数据节点:
旧配置:
node.master: false
node.data: true


新配置 (推荐):
node.roles: [ "data" ]


全功能节点:
旧配置:
node.master: true
node.data: true
node.ingest: true


新配置 (推荐):
node.roles: [ "master", "data", "ingest" ]


迁移步骤:
1. 备份当前配置
2. 规划角色分配
3. 更新配置文件
4. 滚动重启节点
5. 验证集群状态
6. 确认主节点选举