配置项作用 #
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: []
└── 清晰分层
注意事项 #
已废弃: 此配置项已被废弃,推荐使用
node.roles。需要重启: 修改此配置需要重启节点。
主节点数量: 生产环境至少 3 个主资格节点。
奇数原则: 主资格节点数量应为奇数。
专用配置: 生产环境推荐使用专用主节点。
资源隔离: 避免主节点兼任数据节点。
网络稳定性: 主节点间需要稳定的网络连接。
监控建议: 监控主节点健康状态。
备份策略: 定期备份集群元数据。
迁移建议: 新配置使用
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. 确认主节点选举





