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

配置项作用 #

discovery.zen.master_election.wait_for_joins_timeout 配置项用于控制主节点选举过程中等待其他主节点加入的超时时间

当一个节点被选举为候选主节点时,它会等待其他具有主节点资格的节点加入集群,此配置决定了等待的最长时间。

配置项属性 #

  • 配置路径: discovery.zen.master_election.wait_for_joins_timeout
  • 数据类型: TimeValue(时间值)
  • 默认值: join_timeout / 2(默认 30 秒)
  • 最小值: 0ms
  • 是否可选: 是
  • 弃用状态: ⚠️ 已弃用

配置项详解 #

工作机制 #

主节点选举流程

节点A 被选为候选主节点
    │
    ↓
计算需要等待的节点数量
requiredJoins = max(0, minimum_master_nodes - 1)
    │
    ↓
等待其他主节点加入
    │
    ├──────── < wait_for_joins_timeout
    │              ↓
    │         足够节点加入
    │              ↓
    │         选举成功 ✅
    │
    └──────── ≥ wait_for_joins_timeout
                   ↓
              超时,选举失败
                   ↓
              重新发起选举

动态默认值 #

// 默认值是 join_timeout 的一半
wait_for_joins_timeout = join_timeout / 2

如果 join_timeout = 60s默认:
wait_for_joins_timeout = 60s / 2 = 30s

如果 join_timeout = 100s:
wait_for_joins_timeout = 100s / 2 = 50s

与 minimum_master_nodes 的关系 #

等待节点数量计算

假设 minimum_master_nodes = 3:
requiredJoins = 3 - 1 = 2
需要等待 2 个其他主节点加入

假设 minimum_master_nodes = 2:
requiredJoins = 2 - 1 = 1
需要等待 1 个其他主节点加入

配置建议 #

⚠️ 重要提示 #

此配置项已被标记为弃用,建议保持默认值或使用新的发现机制。

生产环境(默认) #

discovery.zen.master_election.wait_for_joins_timeout: 30s

建议: 保持默认值 30s(join_timeout/2)。适用于大多数生产环境。

快速选举要求 #

discovery.zen.master_election.wait_for_joins_timeout: 10s

建议: 减少到 10s-20s。当需要快速完成选举时使用。

高延迟网络 #

discovery.zen.master_election.wait_for_joins_timeout: 60s

建议: 增加到 45s-90s。网络延迟高时需要更长的等待时间。

代码示例 #

easysearch.yml 配置(已弃用) #

discovery:
  zen:
    join_timeout: 60s
    # wait_for_joins_timeout 会自动计算为 30s

显式配置超时 #

discovery:
  zen:
    master_election:
      wait_for_joins_timeout: 45s  # 覆盖自动计算的值

配合 minimum_master_nodes #

discovery:
  zen:
    minimum_master_nodes: 3
    master_election:
      wait_for_joins_timeout: 30s

相关配置 #

配置项作用默认值
discovery.zen.master_election.wait_for_joins_timeout选举等待加入超时join_timeout/2
discovery.zen.join_timeout加入超时60s
discovery.zen.minimum_master_nodes选举所需主节点数-1
discovery.zen.ping_timeoutping 超时3s

配置关系 #

wait_for_joins_timeout 与 join_timeout 的关系

join_timeout = 60s
wait_for_joins_timeout = 60s / 2 = 30s

选举总时间包含:
1. 等待节点加入 (最多 30s)
2. 实际的选举过程

超时设置指南 #

集群规模minimum_master_nodes推荐 wait_for_joins_timeout说明
小型 (3 节点)215-30s网络快,短时间足够
中型 (5-7 节点)3-430-45s标准配置
大型 (9+ 节点)5+45-90s节点多,需要更长等待
跨地域3+60-120s网络延迟高

选举时间分析 #

最佳情况(立即加入):
选举时间 < 1s

典型情况(大部分节点快速加入):
选举时间 ≈ 5-10s

最坏情况(超时):
选举时间 ≈ wait_for_joins_timeout + 选举处理时间

使用场景 #

推荐保持默认的场景 #

  • 标准数据中心: 网络稳定、延迟低
  • 中小型集群: 节点数量适中
  • 正常负载: 集群启动正常

推荐增加的场景 #

  • 跨地域部署: 网络延迟高
  • 大型集群: 节点多、加入慢
  • 复杂网络: 网络不稳定

推荐减少的场景 #

  • 快速恢复: 需要快速完成选举
  • 稳定环境: 网络和节点都很稳定
  • 小型集群: 节点少、加入快

注意事项 #

  1. 已弃用: 此配置已被标记为弃用,建议关注新的发现机制。

  2. 动态计算: 默认值基于 join_timeout 动态计算。

  3. 与 minimum_master_nodes 配合: 等待的节点数量 = minimum_master_nodes - 1。

  4. 覆盖机制: 显式配置会覆盖自动计算的值。

  5. 测试环境: 测试中通常设置为 5s 以确保选举稳定。

  6. 调试日志: 启用调试日志可以看到选举过程的详细信息。

  7. 动态更新: 此配置支持动态更新,但需谨慎修改。

  8. 与集群启动的关系: 集群启动时,此配置影响主节点选举的速度。