--- title: "故障检测Ping重试次数配置" date: 2026-03-16 lastmod: 2026-03-16 description: "discovery.zen.fd.ping_retries 配置项用于控制故障检测中ping失败后的重试次数(已弃用)。" tags: ["集群发现", "故障检测", "重试", "容错"] summary: "配置项作用 # discovery.zen.fd.ping_retries 配置项用于控制故障检测机制中 ping 失败后的重试次数。 只有当连续 ping 失败次数达到此配置值时,节点才会被判定为故障。 配置项属性 # 配置路径: discovery.zen.fd.ping_retries 数据类型: integer 默认值: 3 是否可选: 是 弃用状态: ⚠️ 已弃用 配置项详解 # 工作机制 # 故障检测重试流程 节点A ─────────────────────→ 节点B │ │ Ping 1 ──────────────────→ (超时/失败) │ retryCount = 1 │ │ Ping 2 ──────────────────→ (超时/失败) │ retryCount = 2 │ │ Ping 3 ──────────────────→ (超时/失败) │ retryCount = 3 │ │ retryCount >= ping_retries (3) │ ↓ 判定节点B故障 ↓ 触发故障转移 重试逻辑 # int retryCount = 0; while (retryCount < pingRetryCount) { // 尝试 ping 节点 try { sendPing(node); if (成功) { 重置 retryCount = 0; break; } } catch (Exception e) { retryCount++; // 继续下一次重试 } } if (retryCount >= pingRetryCount) { // 超过最大重试次数,确认节点故障 notifyNodeFailure(node, "failed to ping, tried [" + pingRetryCount + "] times"); } 容错设计 # 网络抖动场景 Ping 1 ──→ 失败 (网络抖动) Ping 2 ──→ 成功 (网络恢复) ↓ retryCount 重置为 0 ↓ 节点正常,不触发故障转移 配置建议 # ⚠️ 重要提示 # 此配置项已被标记为弃用,建议保持默认值。" --- ## 配置项作用 `discovery.zen.fd.ping_retries` 配置项用于控制故障检测机制中 **ping 失败后的重试次数**。 只有当连续 ping 失败次数达到此配置值时,节点才会被判定为故障。 ## 配置项属性 - **配置路径**: `discovery.zen.fd.ping_retries` - **数据类型**: `integer` - **默认值**: `3` - **是否可选**: 是 - **弃用状态**: ⚠️ **已弃用** ## 配置项详解 ## 工作机制 ``` 故障检测重试流程 节点A ─────────────────────→ 节点B │ │ Ping 1 ──────────────────→ (超时/失败) │ retryCount = 1 │ │ Ping 2 ──────────────────→ (超时/失败) │ retryCount = 2 │ │ Ping 3 ──────────────────→ (超时/失败) │ retryCount = 3 │ │ retryCount >= ping_retries (3) │ ↓ 判定节点B故障 ↓ 触发故障转移 ``` ## 重试逻辑 ```java int retryCount = 0; while (retryCount < pingRetryCount) { // 尝试 ping 节点 try { sendPing(node); if (成功) { 重置 retryCount = 0; break; } } catch (Exception e) { retryCount++; // 继续下一次重试 } } if (retryCount >= pingRetryCount) { // 超过最大重试次数,确认节点故障 notifyNodeFailure(node, "failed to ping, tried [" + pingRetryCount + "] times"); } ``` ## 容错设计 ``` 网络抖动场景 Ping 1 ──→ 失败 (网络抖动) Ping 2 ──→ 成功 (网络恢复) ↓ retryCount 重置为 0 ↓ 节点正常,不触发故障转移 ``` ## 配置建议 ## ⚠️ 重要提示 此配置项**已被标记为弃用**,建议保持默认值。 ## 生产环境(默认) ```yaml discovery.zen.fd.ping_retries: 3 ``` **建议**: 保持默认值 `3`。这提供了合理的容错能力,避免短暂网络问题导致误判。 ## 网络不稳定环境 ```yaml discovery.zen.fd.ping_retries: 5 ``` **建议**: 增加到 `5-10`。当网络经常出现短暂波动时使用。 ## 快速故障检测 ```yaml discovery.zen.fd.ping_retries: 2 ``` **建议**: 减少到 `1-2`。当需要快速发现节点故障且网络稳定时使用。 ## 代码示例 ## easysearch.yml 配置(已弃用) ```yaml discovery: zen: fd: ping_retries: 3 # 默认值 ``` ## 完整的故障检测配置 ```yaml discovery: zen: fd: ping_interval: 1s # ping 间隔 ping_timeout: 30s # ping 超时 ping_retries: 3 # ping 重试次数 ``` ## 网络不稳定环境配置 ```yaml discovery: zen: fd: ping_interval: 2s ping_timeout: 45s ping_retries: 8 # 增加重试次数 ``` ## 快速故障检测配置 ```yaml discovery: zen: fd: ping_interval: 500ms ping_timeout: 10s ping_retries: 2 # 减少重试次数 ``` ## 相关配置 | 配置项 | 作用 | 默认值 | |--------|------|--------| | `discovery.zen.fd.ping_interval` | ping 发送间隔 | 1s | | `discovery.zen.fd.ping_timeout` | 单次 ping 超时 | 30s | | `discovery.zen.fd.ping_retries` | ping 重试次数 | 3 | ## 故障检测时间计算 ``` 故障检测总时间计算公式: 方式 1: ping_timeout × ping_retries 方式 2: (ping_timeout + ping_interval) × ping_retries 默认配置: 方式 1: 30s × 3 = 90 秒 方式 2: (30s + 1s) × 3 = 93 秒 网络不稳定配置 (ping_retries = 8): 方式 1: 30s × 8 = 240 秒 (4分钟) 方式 2: (30s + 2s) × 8 = 256 秒 快速检测配置 (ping_retries = 2): 方式 1: 10s × 2 = 20 秒 方式 2: (10s + 0.5s) × 2 = 21 秒 ``` ## 容错能力分析 | ping_retries 设置 | 容错能力 | 故障检测时间 | 适用场景 | |-------------------|----------|-------------|----------| | 较小(1-2) | 低,易误判 | 快 | 稳定网络、快速检测 | | 中等(3-5) | 中等 | 中等 | 标准生产环境 | | 较大(8-10) | 高,容忍波动 | 慢 | 不稳定网络 | ## 误判风险 ``` ping_retries = 1 (过于敏感): 网络抖动 ↓ Ping 1 失败 ↓ 立即判定故障 ❌ ↓ 可能误判 ping_retries = 3 (标准): 网络抖动 ↓ Ping 1 失败 → Ping 2 成功 ↓ 恢复正常 ✅ ↓ 正确处理 ``` ## 使用场景 ## 推荐保持默认的场景 - **标准数据中心**: 网络稳定 - **平衡容错和检测速度**: 需要折中方案 - **生产环境**: 经过验证的默认值 ## 推荐增加的场景 - **跨地域部署**: 网络延迟高且不稳定 - **公网连接**: 网络质量不可控 - **频繁波动**: 网络经常短暂中断 ## 推荐减少的场景 - **本地网络**: 极其稳定的局域网 - **快速故障恢复**: 需要快速发现并处理故障 - **高可用优先**: 可用性比避免误判更重要 ## 注意事项 1. **已弃用**: 此配置已被标记为弃用,建议关注新的发现机制。 2. **与其他配置配合**: 需要与 `ping_interval` 和 `ping_timeout` 配合使用。 3. **故障检测时间**: 增加重试次数会延长故障检测时间。 4. **网络质量**: 根据实际网络质量调整重试次数。 5. **调试日志**: 超过重试次数后会记录详细日志: ``` failed to ping, tried [3] times ``` 6. **动态更新**: 此配置支持动态更新,无需重启节点。 7. **监控建议**: 监控节点故障检测事件,避免频繁误判或漏判。