--- title: "网络断开时重连配置" date: 2026-01-13 lastmod: 2026-01-13 description: "discovery.zen.fd.connect_on_network_disconnect 配置项用于控制网络断开时是否尝试重新连接(已弃用)。" tags: ["集群发现", "故障检测", "重连", "已弃用"] summary: "配置项作用 # 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." --- ## 配置项作用 `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) 用于检测其他节点的存活状态: ```java 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) 用于检测主节点的存活状态: ```java 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`。 ## 生产环境(默认) ```yaml discovery.zen.fd.connect_on_network_disconnect: false ``` **建议**: 保持默认值 `false`。网络断开通常是真实故障,应快速触发故障转移。 ## 网络不稳定环境 ```yaml discovery.zen.fd.connect_on_network_disconnect: true ``` **建议**: 可以设置为 `true`。当网络经常出现短暂波动,但会自动恢复时使用。 ## 代码示例 ## easysearch.yml 配置(已弃用) ```yaml discovery: zen: fd: connect_on_network_disconnect: false # 默认值 ``` ## 启用重连 ```yaml discovery: zen: fd: connect_on_network_disconnect: true # 尝试重连 ``` ## 配合其他故障检测配置 ```yaml 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_interval` | ping 间隔 | 1s | | `discovery.zen.fd.ping_timeout` | ping 超时 | 30s | | `discovery.zen.fd.ping_retries` | ping 重试次数 | 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. **监控建议**: 监控网络质量和节点故障检测事件,根据实际情况调整。