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

配置项作用 #

discovery.zen.fd.connect_on_network_disconnect 配置项用于控制当检测到网络连接断开时,是否在判定节点故障前先尝试重新连接。

配置项属性 #

  • 配置路径: discovery.zen.fd.connect_on_network_disconnect
  • 数据类型: boolean
  • 默认值: false
  • 是否可选: 是
  • 弃用状态: ⚠️ 已弃用

配置项详解 #

工作机制 #

禁用重连(connect_on_network_disconnect = false,默认) #

网络断开检测

节点A ────✗───── 节点B
    断开连接
    │
    ↓
检测到传输层断开
    │
    ↓
立即判定节点B故障
    │
    ↓
触发故障转移

启用重连(connect_on_network_disconnect = true) #

网络断开检测

节点A ────✗───── 节点B
    断开连接
    │
    ↓
检测到传输层断开
    │
    ↓
尝试重新连接
    │
    ├──────── 成功 ──→ 继续故障检测
    │
    └──────── 失败 ──→ 判定节点B故障
                          ↓
                     触发故障转移

两种故障检测 #

1. 节点故障检测(NodesFaultDetection) #

用于检测其他节点的存活状态:

if (connectOnNetworkDisconnect) {
    try {
        transportService.connectToNode(node);
        // 重连成功,继续监控
        nodesFD.put(node, fd);
    } catch (Exception e) {
        // 重连失败,通知节点故障
        notifyNodeFailure(node, "transport disconnected (with verified connect)");
    }
} else {
    // 直接通知节点故障
    notifyNodeFailure(node, "transport disconnected");
}

2. 主节点故障检测(MasterFaultDetection) #

用于检测主节点的存活状态:

if (connectOnNetworkDisconnect) {
    try {
        transportService.connectToNode(masterNode);
        // 重连成功,继续监控
        this.masterPinger = new MasterPinger();
    } catch (Exception e) {
        // 重连失败,通知主节点故障
        notifyMasterFailure(masterNode, null, "transport disconnected (with verified connect)");
    }
} else {
    // 直接通知主节点故障
    notifyMasterFailure(masterNode, null, "transport disconnected");
}

配置建议 #

⚠️ 重要提示 #

此配置项已被标记为弃用,建议保持默认值 false

生产环境(默认) #

discovery.zen.fd.connect_on_network_disconnect: false

建议: 保持默认值 false。网络断开通常是真实故障,应快速触发故障转移。

网络不稳定环境 #

discovery.zen.fd.connect_on_network_disconnect: true

建议: 可以设置为 true。当网络经常出现短暂波动,但会自动恢复时使用。

代码示例 #

easysearch.yml 配置(已弃用) #

discovery:
  zen:
    fd:
      connect_on_network_disconnect: false  # 默认值

启用重连 #

discovery:
  zen:
    fd:
      connect_on_network_disconnect: true  # 尝试重连

配合其他故障检测配置 #

discovery:
  zen:
    fd:
      connect_on_network_disconnect: false
      ping_interval: 1s
      ping_timeout: 30s
      ping_retries: 3

相关配置 #

配置项作用默认值
discovery.zen.fd.connect_on_network_disconnect网络断开时是否重连false
discovery.zen.fd.ping_intervalping 间隔1s
discovery.zen.fd.ping_timeoutping 超时30s
discovery.zen.fd.ping_retriesping 重试次数3

行为对比 #

设置网络断开行为故障检测速度适用场景
false立即判定故障稳定网络
true尝试重连后判定较慢不稳定网络

故障检测时间对比 #

connect_on_network_disconnect = false:

网络断开 → 立即判定故障 → 故障转移
总时间: 几乎立即

connect_on_network_disconnect = true:

网络断开 → 尝试重连(可能需要几秒) → 重连失败 → 判定故障 → 故障转移
总时间: ping_timeout + 重连时间

使用场景 #

推荐保持 false 的场景 #

  • 稳定网络: 数据中心内部网络
  • 快速故障检测: 需要快速发现并处理节点故障
  • 高可用优先: 集群可用性比避免误判更重要

可以启用 true 的场景 #

  • 不稳定网络: 跨地域、跨公网连接
  • 频繁网络波动: 网络经常短暂中断但会自动恢复
  • 避免频繁故障转移: 减少因网络抖动导致的集群重新配置

注意事项 #

  1. 已弃用: 此配置已被标记为弃用,建议使用默认行为。

  2. 故障检测延迟: 启用重连会增加故障检测的时间,影响故障转移速度。

  3. 误判风险: 禁用重连可能导致短暂的网络波动被误判为节点故障。

  4. 与 ping_retries 的关系: 即使启用重连,仍然会执行 ping 重试机制。

  5. 主节点检测: 此配置同时影响节点故障检测和主节点故障检测。

  6. 集群稳定性: 频繁的故障转移会影响集群稳定性,需要权衡。

  7. 监控建议: 监控网络质量和节点故障检测事件,根据实际情况调整。