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

配置项作用 #

discovery.zen.ping_timeout 配置项用于控制节点在发现集群主节点时的 ping 超时时间

这是 Easysearch Zen 发现机制中的核心配置,决定了节点等待其他节点响应 ping 请求的最长时间。

配置项属性 #

  • 配置路径: discovery.zen.ping_timeout
  • 数据类型: TimeValue(时间值)
  • 默认值: 3s(3秒)
  • 最小值: > 0(正数)
  • 是否可选: 是
  • 作用域: NodeScope(节点级别)

配置项详解 #

工作机制 #

节点发现流程

新节点启动
    │
    ↓
读取配置的种子节点
    │
    ↓
向所有种子节点发送 Ping
    │
    ├──────── node1 ──→ Ping ──→ (等待最多 ping_timeout)
    ├──────── node2 ──→ Ping ──→ (等待最多 ping_timeout)
    └──────── node3 ──→ Ping ──→ (等待最多 ping_timeout)
    │
    ↓
    收集响应
    │
    ├──── < ping_timeout ──→ 收到响应
    │                          ↓
    │                    根据响应确定主节点
    │
    └──── ≥ ping_timeout ──→ 超时
                              ↓
                         重新尝试或失败

相关超时关系 #

ping_timeout 的级联关系

discovery.zen.ping_timeout = 3s (基础)
    ↓
discovery.zen.join_timeout = ping_timeout × 20 = 60s
    ↓
discovery.zen.fd.ping_timeout = 30s (故障检测,不同用途)

配置建议 #

生产环境(标准) #

discovery.zen.ping_timeout: 3s

建议: 保持默认值 3s。适用于大多数生产环境的网络条件。

高延迟网络 #

discovery.zen.ping_timeout: 5s

建议: 增加到 5s-10s。当网络延迟较高或跨地域部署时使用。

跨地域部署 #

discovery.zen.ping_timeout: 10s

建议: 增加到 10s-30s。跨地域或跨云部署时使用。

快速发现要求 #

discovery.zen.ping_timeout: 1s

建议: 减少到 1s-2s。当网络条件极佳且需要快速发现时使用。

代码示例 #

easysearch.yml 配置 #

discovery:
  zen:
    ping_timeout: 3s  # 默认值

配合种子节点配置 #

discovery:
  zen:
    ping_timeout: 5s
    ping_unicast:
      hosts: ["master1:9300", "master2:9300"]

跨地域配置 #

discovery:
  zen:
    ping_timeout: 10s
    ping_unicast:
      hosts:
        - "us-east.example.com:9300"
        - "eu-west.example.com:9300"

高延迟网络配置 #

discovery:
  zen:
    ping_timeout: 15s
    fd:
      ping_timeout: 30s

相关配置 #

配置项作用默认值
discovery.zen.ping_timeout发现 ping 超时3s
discovery.zen.join_timeout加入超时ping_timeout × 20
discovery.zen.fd.ping_timeout故障检测 ping 超时30s
discovery.zen.fd.ping_interval故障检测 ping 间隔1s

与 fd.ping_timeout 的区别 #

discovery.zen.ping_timeout (3s):
    用途: 节点发现阶段
    场景: 节点启动时发现主节点
    频率: 一次性操作

discovery.zen.fd.ping_timeout (30s):
    用途: 运行时故障检测
    场景: 定期检查节点是否存活
    频率: 每秒执行

发现过程时间分析 #

理想情况(快速发现):

3 个种子节点,网络延迟 50ms

Ping node1: 50ms ✓
Ping node2: 50ms ✓
Ping node3: 50ms ✓

总耗时 ≈ 50ms(并行执行)

高延迟场景:

3 个种子节点,网络延迟 2s

Ping node1: 2s ✓
Ping node2: 2s ✓
Ping node3: 2s ✓

总耗时 ≈ 2s(并行执行)

部分超时:

3 个种子节点,网络延迟 4s

Ping node1: 4s ❌
Ping node2: 4s ❌
Ping node3: 4s ❌

总耗时 = 3s (超时)
无法发现任何节点 ❌

使用场景 #

推荐保持默认的场景 #

  • 标准数据中心: 网络稳定、延迟低
  • **同城部署: 节点在同一个地区
  • **虚拟私有云: 稳定的云环境

推荐增加的场景 #

  • 跨地域部署: 不同地区之间的部署
  • 公网连接: 节点间通过公网通信
  • 混合云环境: 跨多个云服务商
  • 不稳定网络: 网络质量不稳定的场景

推荐减少的场景 #

  • 本地网络: 局域网或数据中心内部
  • 容器网络: 同一主机或 Kubernetes 集群
  • 高带宽低延迟: 网络条件极佳

网络延迟参考 #

网络环境典型延迟推荐 ping_timeout
同机房1-2ms3s(默认)
同城云5-10ms3-5s
跨地域50-200ms5-10s
跨公网100-500ms10-30s

注意事项 #

  1. 基础超时: 此配置是其他超时配置的基础值。

  2. 级联关系: 修改此值会影响 join_timeout 等相关配置。

  3. 与 fd.ping_timeout 区分: 两个超时用于不同的目的,不要混淆。

  4. 动态更新: 此配置支持动态更新,修改后立即生效。

  5. 网络测试: 在生产环境部署前,建议进行网络延迟测试。

  6. 监控建议: 监控节点发现过程的耗时和失败率。

  7. 批量节点: 当有多个种子节点时,最慢的一个决定总时间。

  8. DNS 解析: 如果使用主机名而不是 IP,还需要考虑 DNS 解析时间。