配置项作用 #
discovery.zen.minimum_master_nodes 配置项用于定义主节点选举所需的最小主节点资格节点数量。
这是防止集群脑裂(split-brain)的关键配置,确保只有当有足够数量的主节点资格节点参与时,才能形成有效的主节点选举。
配置项属性 #
- 配置路径:
discovery.zen.minimum_master_nodes - 数据类型:
integer - 默认值:
-1(表示未设置) - 是否可选: 是
- 是否动态: 是(支持动态更新)
- 弃用状态: ⚠️ 已弃用
配置项详解 #
工作机制 #
脑裂场景演示
3 个主节点资格集群
正常状态:
节点A (master) ──┐
节点B (master) ──┼──→ 互相通信
节点C (master) ─┘
↓
minimum_master_nodes = 2
任何选举需要至少 2 个节点同意
网络分区后:
分区1: 节点A
分区2: 节点B + 节点C
节点A 无法获得 2 票
↓
选举失败,不成为主节点 ✅
节点B + 节点C 获得 2 票
↓
选举成功,形成有效集群 ✅
选举机制 #
主节点选举流程
节点发起选举
│
↓
收集投票
│
↓
检查是否有足够的票数
│
├──────── 票数 ≥ minimum_master_nodes
│ ↓
│ 选举成功 ✅
│ 成为主节点
│
└──────── 票数 < minimum_master_nodes
↓
选举失败 ❌
↓
继续作为数据节点
配置建议 #
⚠️ 重要提示 #
虽然此配置已被标记为弃用,但配置正确的 minimum_master_nodes 对于防止数据丢失至关重要。
推荐配置公式 #
# 推荐配置
discovery.zen.minimum_master_nodes: (N / 2) + 1
其中 N 是集群中主节点资格节点的总数
不同规模集群的配置 #
3 节点集群(都是主节点资格) #
discovery.zen.minimum_master_nodes: 2
说明: (3 / 2) + 1 = 2。防止 1 个节点故障后形成两个主节点。
5 节点集群(3 个主节点资格) #
discovery.zen.minimum_master_nodes: 2
说明: (3 / 2) + 1 = 2。即使 1 个节点故障,仍有 2 个节点可以选举。
7 节点集群(3 个主节点资格) #
discovery.zen.minimum_master_nodes: 2
说明: (3 / 2) + 1 = 2。保持 2 可以容忍 1 个主节点故障。
代码示例 #
easysearch.yml 配置(已弃用但仍重要) #
# 3 节点集群配置
discovery:
zen:
minimum_master_nodes: 2
大型集群配置 #
# 7 节点集群(3 个专用主节点)
discovery:
zen:
minimum_master_nodes: 2
跨地域配置 #
# 每个数据中心 2 个主节点资格
discovery:
zen:
minimum_master_nodes: 3 # 3 个数据中心需要 2 个同意
动态更新 #
# 运行时更新配置
PUT _cluster/settings
{
"transient": {
"discovery.zen.minimum_master_nodes": 2
}
}
相关配置 #
| 配置项 | 作用 | 默认值 |
|---|---|---|
discovery.zen.minimum_master_nodes | 选举所需最小主节点数 | -1 |
node.roles | 节点角色配置 | [master, data, ingest, remote_cluster_client] |
节点角色配置 #
# 专用主节点
node.roles: [master]
# 数据节点
node.roles: [data]
# 混合节点
node.roles: [master, data]
配置影响分析 #
配置过低的风险 #
minimum_master_nodes = 1
集群: 节点A, 节点B, 节点C
网络分区:
分区1: 节点A
分区2: 节点B, 节点C
节点A 可以单独选举 (1 ≥ 1) ✅
节点B,C 可以选举 (2 ≥ 1) ✅
结果: 两个主节点 ❌
脑裂! 数据冲突!
配置正确的行为 #
minimum_master_nodes = 2
集群: 节点A, 节点B, 节点C
网络分区:
分区1: 节点A
分区2: 节点B, 节点C
节点A 不能单独选举 (1 < 2) ✅
节点B,C 可以选举 (2 ≥ 2) ✅
结果: 只有一个主节点 ✅
数据一致!
配置建议表 #
| 主节点资格节点数 | 推荐配置 | 容忍故障节点数 |
|---|---|---|
| 1 | 1(不推荐) | 0 |
| 2 | 2 | 0 |
| 3 | 2 | 1 |
| 5 | 3 | 1 |
| 7 | 4 | 2 |
| 9 | 5 | 3 |
公式说明 #
推荐值 = (N / 2) + 1
可以容忍的故障节点数 = (N / 2)
例如:
N = 3: 配置 2,容忍 1 个故障
N = 5: 配置 3,容忍 2 个故障
N = 7: 配置 4,容忍 3 个故障
使用场景 #
必须正确配置的场景 #
- 生产环境: 任何时候都必须正确配置
- 多数据中心: 需要考虑跨地域的网络分区
- 数据重要性高: 防止脑裂导致的数据不一致
版本升级注意事项 #
滚动升级时的配置
升级前: 5 个主节点资格,minimum_master_nodes = 3
升级过程:
1. 停止 1 个节点
→ 剩余 4 个节点,配置仍为 3 ✅
2. 停止第 2 个节点
→ 剩余 3 个节点,配置仍为 3 ✅
3. 添加升级后的节点
→ 恢复到 5 个节点
关键: 始终确保 (运行节点 / 2) + 1 ≥ minimum_master_nodes
警告机制 #
配置过低的警告
如果 minimum_master_nodes 设置过低:
系统会发出警告:
"value for setting 'discovery.zen.minimum_master_nodes' is too low.
This can result in data loss!
Please set it to at least a quorum of master-eligible nodes
(current value: [1], total number of master-eligible nodes used
for publishing in this round: [3])"
注意事项 #
已弃用但仍重要: 虽然标记为弃用,但对于防止脑裂仍然至关重要。
动态更新: 可以在运行时动态修改,但修改后需密切监控。
与主节点数量的关系: 配置值不应超过主节点资格节点总数的一半。
跨地域部署: 多数据中心部署时,需要考虑跨地域的网络分区。
重启节点: 重启节点时,确保有足够的节点参与选举。
监控建议: 监控主节点选举事件和集群健康状态。
测试验证: 在生产环境使用前,在测试环境中验证配置。
数据安全: 此配置是防止数据丢失的关键设置。





