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

配置项作用 #

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) ✅

结果: 只有一个主节点 ✅
      数据一致!

配置建议表 #

主节点资格节点数推荐配置容忍故障节点数
11(不推荐)0
220
321
531
742
953

公式说明 #

推荐值 = (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])"

注意事项 #

  1. 已弃用但仍重要: 虽然标记为弃用,但对于防止脑裂仍然至关重要。

  2. 动态更新: 可以在运行时动态修改,但修改后需密切监控。

  3. 与主节点数量的关系: 配置值不应超过主节点资格节点总数的一半。

  4. 跨地域部署: 多数据中心部署时,需要考虑跨地域的网络分区。

  5. 重启节点: 重启节点时,确保有足够的节点参与选举。

  6. 监控建议: 监控主节点选举事件和集群健康状态。

  7. 测试验证: 在生产环境使用前,在测试环境中验证配置。

  8. 数据安全: 此配置是防止数据丢失的关键设置。