配置项作用 #
discovery.zen.master_election.ignore_non_master_pings 配置项用于控制主节点选举过程中是否忽略非主节点的 ping 响应。
当设置为 true 时,只有配置为 node.master: true 的节点才会参与主节点选举;设置为 false 时,所有节点的 ping 响应都会被考虑。
配置项属性 #
- 配置路径:
discovery.zen.master_election.ignore_non_master_pings - 数据类型:
boolean - 默认值:
false - 是否可选: 是
- 弃用状态: ⚠️ 已弃用
配置项详解 #
工作机制 #
禁用过滤(ignore_non_master_pings = false,默认) #
主节点选举过程
节点A (data node) ──┐
节点B (master node) ─┼──→ 发起选举
节点C (master node) ─┘
│
↓
收集所有节点的 Ping 响应
│
↓
┌──────────────────────────┐
│ 考虑所有节点的响应 │
│ - 节点A (data node) │
│ - 节点B (master node) │
│ - 节点C (master node) │
└──────────────────────────┘
│
↓
从所有节点中选择主节点
启用过滤(ignore_non_master_pings = true) #
主节点选举过程
节点A (data node) ──┐
节点B (master node) ─┼──→ 发起选举
节点C (master node) ─┘
│
↓
收集所有节点的 Ping 响应
│
↓
┌──────────────────────────┐
│ 只考虑 master 节点的响应 │
│ - 节点B (master node) ✓ │
│ - 节点C (master node) ✓ │
│ - 节点A 被忽略 ✗ │
└──────────────────────────┘
│
↓
仅从 master 节点中选择主节点
过滤逻辑实现 #
// 简化的代码逻辑
List<PingResponse> filterPingResponses(List<PingResponse> fullPingResponses,
boolean masterElectionIgnoreNonMasters) {
List<PingResponse> pingResponses;
if (masterElectionIgnoreNonMasters) {
// 只保留 isMasterNode() 为 true 的节点
pingResponses = fullPingResponses.stream()
.filter(ping -> ping.node().isMasterNode())
.collect(Collectors.toList());
} else {
// 保留所有节点
pingResponses = fullPingResponses;
}
return pingResponses;
}
配置建议 #
⚠️ 重要提示 #
此配置项已被标记为弃用,建议保持默认值 false。
生产环境(默认) #
discovery.zen.master_election.ignore_non_master_pings: false
建议: 保持默认值 false。这样可以获取所有节点的 ping 响应,确保主节点选举的准确性。
纯主节点集群 #
discovery.zen.master_election.ignore_non_master_pings: true
建议: 可以设置为 true。当集群中只有专用主节点时,可以只考虑这些节点。
混合角色集群 #
discovery.zen.master_election.ignore_non_master_pings: false
建议: 保持默认值 false。数据节点可能在选举中提供有用信息。
代码示例 #
easysearch.yml 配置(已弃用) #
discovery:
zen:
master_election:
ignore_non_master_pings: false # 默认值
配合节点角色配置 #
# 节点角色
node.master: true
node.data: false
# 选举配置
discovery:
zen:
master_election:
ignore_non_master_pings: true # 只考虑 master 节点
混合角色集群配置 #
# 某些节点是纯数据节点
node.master: false
node.data: true
# 选举配置
discovery:
zen:
master_election:
ignore_non_master_pings: false # 考虑所有节点
相关配置 #
| 配置项 | 作用 | 默认值 |
|---|---|---|
discovery.zen.master_election.ignore_non_master_pings | 是否忽略非主节点 ping | false |
node.master | 节点是否可以作为主节点 | true |
discovery.zen.minimum_master_nodes | 选举所需的主节点数量 | - |
discovery.zen.ping_timeout | ping 超时 | 3s |
节点角色配置 #
# 专用主节点
node.master: true
node.data: false
node.ingest: false
# 数据节点
node.master: false
node.data: true
# 协调节点
node.master: false
node.data: false
node.ingest: true
行为对比 #
| 设置 | 选举参与者 | 选举准确性 | 适用场景 |
|---|---|---|---|
| false | 所有节点 | 高 | 混合角色集群 |
| true | 仅主节点 | 中 | 专用主节点集群 |
选举结果差异 #
ignore_non_master_pings = false:
候选主节点集合:
- 节点A (data node)
- 节点B (master node)
- 节点C (master node)
选举结果: 可能是 B 或 C
ignore_non_master_pings = true:
候选主节点集合:
- 节点B (master node)
- 节点C (master node)
选举结果: B 或 C(更集中)
使用场景 #
推荐保持 false 的场景 #
- 混合角色集群: 节点同时承担多种角色
- 小型集群: 所有节点都可能是主节点
- 高可用需求: 需要最大化的选举准确性
推荐启用 true 的场景 #
- 专用主节点: 只有特定节点作为主节点
- 大型集群: 有明确的主节点和数据节点分离
- 简化管理: 减少选举过程中的干扰
典型架构推荐 #
小型集群 (< 10 节点):
所有节点: master + data
配置: ignore_non_master_pings = false
原因: 所有节点都可以参与选举
中型集群 (10-50 节点):
主节点: 3-5 个专用 master
数据节点: 其余节点
配置: ignore_non_master_pings = true
原因: 只让专用主节点参与选举
大型集群 (> 50 节点):
主节点: 3-5 个专用 master
数据节点: 大量 data 节点
配置: ignore_non_master_pings = true
原因: 明确分离职责,简化选举
注意事项 #
已弃用: 此配置已被标记为弃用,建议关注新的发现机制。
isMasterNode() 判断: 节点的
isMasterNode()属性由node.master配置决定。选举准确性: 设置为
true可能会减少参与选举的节点数量,影响准确性。集群稳定性: 在大多数情况下,建议保留默认值以确保高可用性。
动态更新: 此配置支持动态更新,但修改后可能影响正在进行的选举。
测试验证: 修改此配置后应在测试环境中验证选举行为。
版本兼容: Zen 发现机制已被弃用,新版本可能使用不同的选举机制。
与 minimum_master_nodes 配合: 确保
minimum_master_nodes的值与可参与选举的节点数量相匹配。





