--- title: "单播发现主机名解析超时配置" date: 2026-02-20 lastmod: 2026-02-20 description: "discovery.zen.ping.unicast.hosts.resolve_timeout 配置项用于控制主机名解析的超时时间(已弃用)。" tags: ["集群发现", "主机解析", "超时", "已弃用"] summary: "配置项作用 # discovery.zen.ping.unicast.hosts.resolve_timeout 配置项用于控制在单播发现模式中解析主机名到网络地址时的超时时间。 当使用主机名(而不是 IP 地址)作为种子节点时,系统需要将主机名解析为 IP 地址,此配置决定了这个解析操作的最长等待时间。 配置项属性 # 配置路径: discovery.zen.ping.unicast.hosts.resolve_timeout 数据类型: TimeValue(时间值) 默认值: 5s(5秒) 最小值: > 0(正数) 是否可选: 是 弃用状态: ⚠️ 已弃用(推荐使用 discovery.seed_resolver.timeout) 配置项详解 # 工作机制 # 主机名解析流程 种子主机列表: - node1.example.com:9300 - node2.example.com:9300 - node3.example.com:9300 开始并行解析 │ ├──────── node1.example.com ──→ DNS ──→ 192.168.1.10 ├──────── node2.example.com ──→ DNS ──→ 192.168.1.11 └──────── node3.example.com ──→ DNS ──→ 超时 ❌ │ ↓ 等待 resolve_timeout (5s) │ ↓ 返回解析结果: - 192." --- ## 配置项作用 `discovery.zen.ping.unicast.hosts.resolve_timeout` 配置项用于控制在**单播发现模式中解析主机名到网络地址时的超时时间**。 当使用主机名(而不是 IP 地址)作为种子节点时,系统需要将主机名解析为 IP 地址,此配置决定了这个解析操作的最长等待时间。 ## 配置项属性 - **配置路径**: `discovery.zen.ping.unicast.hosts.resolve_timeout` - **数据类型**: `TimeValue`(时间值) - **默认值**: `5s`(5秒) - **最小值**: `> 0`(正数) - **是否可选**: 是 - **弃用状态**: ⚠️ **已弃用**(推荐使用 `discovery.seed_resolver.timeout`) ## 配置项详解 ## 工作机制 ``` 主机名解析流程 种子主机列表: - node1.example.com:9300 - node2.example.com:9300 - node3.example.com:9300 开始并行解析 │ ├──────── node1.example.com ──→ DNS ──→ 192.168.1.10 ├──────── node2.example.com ──→ DNS ──→ 192.168.1.11 └──────── node3.example.com ──→ DNS ──→ 超时 ❌ │ ↓ 等待 resolve_timeout (5s) │ ↓ 返回解析结果: - 192.168.1.10:9300 - 192.168.1.11:9300 - (node3 被忽略) ``` ## 并行解析 ``` 并发解析特点 启动多个并发解析任务 │ ├──────── 任务 1 ──→ 解析 node1.example.com ├──────── 任务 2 ──→ 解析 node2.example.com └──────── 任务 3 ──→ 解析 node3.example.com │ ↓ 所有任务并行执行 │ ↓ 等待最慢的完成或超时 │ ↓ 收集成功解析的结果 ``` ## 配置建议 ## ⚠️ 重要提示 此配置项**已被标记为弃用**,强烈推荐使用新的 `discovery.seed_resolver.timeout` 配置。 ## 生产环境(默认) ```yaml discovery.zen.ping.unicast.hosts.resolve_timeout: 5s ``` **建议**: 保持默认值 `5s`。适用于大多数生产环境的 DNS 解析。 ## 高延迟网络 ```yaml discovery.zen.ping.unicast.hosts.resolve_timeout: 10s ``` **建议**: 增加到 `10s-30s`。当 DNS 服务器响应慢或网络延迟高时使用。 ## 快速启动要求 ```yaml discovery.zen.ping.unicast.hosts.resolve_timeout: 2s ``` **建议**: 减少到 `2s-3s`。当网络环境极佳且需要快速启动时使用。 ## 代码示例 ## easysearch.yml 配置(已弃用) ```yaml discovery: zen: ping: unicast: hosts: - "node1.example.com:9300" - "node2.example.com:9300" resolve_timeout: 5s # 默认值 ``` ## 配合种子主机使用 ```yaml discovery: zen: ping: unicast: hosts: ["master1.example.com", "master2.example.com"] resolve_timeout: 10s # 增加超时 ``` ## 推荐的替代配置 ```yaml discovery: seed_resolver: timeout: 5s # 新配置(推荐) seed_hosts: - "node1.example.com:9300" - "node2.example.com:9300" ``` ## 相关配置 | 配置项 | 状态 | 作用 | 默认值 | |--------|------|------|--------| | `discovery.zen.ping.unicast.hosts.resolve_timeout` | ⚠️ 已弃用 | 旧版解析超时 | 5s | | `discovery.seed_resolver.timeout` | ✅ 推荐 | 新版解析超时 | 5s | | `discovery.zen.ping.unicast.concurrent_connects` | ⚠️ 已弃用 | 并发连接数 | 10 | ## 配置冲突检查 ```java // 不能同时配置新旧配置 if (LEGACY_RESOLVE_TIMEOUT.exists(settings)) { if (DISCOVERY_SEED_RESOLVER_TIMEOUT_SETTING.exists(settings)) { throw new IllegalArgumentException( "it is forbidden to set both [" + "discovery.seed_resolver.timeout] and [" + "discovery.zen.ping.unicast.hosts.resolve_timeout]" ); } } ``` ## 解析时间分析 ``` 假设 5 个主机需要解析,单个解析平均耗时 100ms resolve_timeout = 5s: 并发解析,最慢的耗时 100ms 总耗时 ≈ 100ms(所有请求并行) resolve_timeout = 1s: 并发解析,最慢的耗时 100ms 总耗时 ≈ 100ms(所有请求并行) 假设 10 个主机需要解析,单个解析平均耗时 500ms resolve_timeout = 5s: 并发解析,最慢的耗时 500ms 总耗时 ≈ 500ms(所有请求并行) resolve_timeout = 1s (不够): 并发解析,最慢的耗时 500ms 但某些解析可能需要 800ms... 总耗时 ≈ 800ms(部分超时) ``` ## 使用场景 ## 推荐保持默认的场景 - **标准 DNS**: 使用可靠的 DNS 服务器 - **稳定网络**: 网络延迟低且稳定 - **常见主机名**: 使用常见的域名格式 ## 推荐增加的场景 - **复杂 DNS**: 使用多层 DNS 解析 - **高延迟网络**: 跨地域或跨云部署 - **大量主机名**: 需要解析很多种子节点 ## 推荐减少的场景 - **IP 地址**: 直接使用 IP 而不是主机名 - **快速 DNS**: 使用高性能 DNS 服务 - **本地集群**: 在局域网环境中 ## DNS 解析注意事项 ``` 使用 IP 地址(无需解析) discovery: seed_hosts: - "192.168.1.10:9300" - "192.168.1.11:9300" - "192.168.1.12:9300" 优点: - 无需 DNS 解析,启动更快 - 避免 DNS 单点故障 - 减少启动依赖 缺点: - IP 地址变更需要更新配置 - 不便于管理 ``` ## 注意事项 1. **已弃用**: 此配置已被标记为弃用,建议迁移到 `discovery.seed_resolver.timeout`。 2. **不能同时使用**: 不能同时配置旧版和新版配置,系统会报错。 3. **并行解析**: 主机名解析是并行执行的,总时间取决于最慢的解析。 4. **超时后处理**: 超时的主机会被忽略,不影响其他成功解析的主机。 5. **DNS 可用性**: 确保 DNS 服务器的高可用,避免解析失败。 6. **调试日志**: 解析失败时会记录警告日志。 7. **动态更新**: 此配置支持动态更新,修改后重新执行解析。 8. **与 concurrent_connects 配合**: 解析超时应与并发连接数相匹配。 9. **解析缓存**: 操作系统可能会缓存 DNS 结果,重启后缓存失效。