--- title: "主节点配置" date: 2026-03-18 lastmod: 2026-03-18 description: "node.master 配置项用于控制节点是否有资格被选为主节点,参与集群管理。" tags: ["Node", "主节点", "集群管理", "节点角色"] summary: "配置项作用 # 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." --- ## 配置项作用 `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" ] ``` ## 配置建议 ## 生产环境(专用主节点) ```yaml node: master: true data: false ingest: false ``` **建议**: 生产环境应配置专用主节点。至少 3 个主资格节点。 ## 数据节点 ```yaml node: master: false # 禁用主节点角色 data: true ``` **建议**: 数据节点不应兼任主节点,避免资源竞争。 ## 小型集群 ```yaml node: master: true # 默认值 data: true ingest: true ``` **建议**: 小型测试/开发环境可以混合角色。 ## 推荐配置(使用新角色) ```yaml # 专用主节点 node.roles: [ "master" ] # 数据节点 node.roles: [ "data" ] ``` **建议**: 使用 `node.roles` 替代废弃的 `node.master`。 ## 代码示例 ## easysearch.yml 基础配置 ```yaml node: master: true ``` ## 专用主节点配置 ```yaml node: name: "master-node-1" master: true data: false ingest: false ``` ## 数据节点配置 ```yaml node: name: "data-node-1" master: false data: true ``` ## 开发环境配置 ```yaml node: name: "dev-node" master: true data: true ingest: true ``` ## 推荐使用角色配置 ```yaml # 专用主节点 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. 确认主节点选举 ```