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

配置项作用 #

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: 3

建议: 保持默认值 3。这提供了合理的容错能力,避免短暂网络问题导致误判。

网络不稳定环境 #

discovery.zen.fd.ping_retries: 5

建议: 增加到 5-10。当网络经常出现短暂波动时使用。

快速故障检测 #

discovery.zen.fd.ping_retries: 2

建议: 减少到 1-2。当需要快速发现节点故障且网络稳定时使用。

代码示例 #

easysearch.yml 配置(已弃用) #

discovery:
  zen:
    fd:
      ping_retries: 3  # 默认值

完整的故障检测配置 #

discovery:
  zen:
    fd:
      ping_interval: 1s      # ping 间隔
      ping_timeout: 30s      # ping 超时
      ping_retries: 3        # ping 重试次数

网络不稳定环境配置 #

discovery:
  zen:
    fd:
      ping_interval: 2s
      ping_timeout: 45s
      ping_retries: 8        # 增加重试次数

快速故障检测配置 #

discovery:
  zen:
    fd:
      ping_interval: 500ms
      ping_timeout: 10s
      ping_retries: 2        # 减少重试次数

相关配置 #

配置项作用默认值
discovery.zen.fd.ping_intervalping 发送间隔1s
discovery.zen.fd.ping_timeout单次 ping 超时30s
discovery.zen.fd.ping_retriesping 重试次数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_intervalping_timeout 配合使用。

  3. 故障检测时间: 增加重试次数会延长故障检测时间。

  4. 网络质量: 根据实际网络质量调整重试次数。

  5. 调试日志: 超过重试次数后会记录详细日志:

    failed to ping, tried [3] times
    
  6. 动态更新: 此配置支持动态更新,无需重启节点。

  7. 监控建议: 监控节点故障检测事件,避免频繁误判或漏判。