--- title: "单播发现种子主机配置" date: 2026-01-13 lastmod: 2026-01-13 description: "discovery.zen.ping.unicast.hosts 配置项用于指定集群发现时的种子主机列表(已弃用)。" tags: ["集群发现", "单播", "种子节点", "已弃用"] summary: "配置项作用 # discovery.zen.ping.unicast.hosts 配置项用于指定集群发现过程中使用的种子主机列表。 新节点通过此配置指定的地址列表发现集群中的现有节点,从而加入集群。 配置项属性 # 配置路径: discovery.zen.ping.unicast.hosts 数据类型: list(字符串列表) 默认值: [](空列表) 是否可选: 是 弃用状态: ⚠️ 已弃用(推荐使用 discovery.seed_hosts) 配置项详解 # 工作机制 # 节点发现流程 新节点启动 │ ↓ 读取 discovery.zen.ping.unicast.hosts │ ├──────── 已配置主机列表 │ ↓ │ 向配置的主机发送 ping │ │ │ ├── node1.example.com:9300 ──→ 响应 ✅ │ ├── node2.example.com:9300 ──→ 响应 ✅ │ └── node3.example.com:9300 ──→ 超时 │ │ │ ↓ │ 收集集群信息 │ │ │ ↓ │ 加入集群 ✅ │ └──────── 未配置(空列表) ↓ 使用本地默认地址 ↓ 127." --- ## 配置项作用 `discovery.zen.ping.unicast.hosts` 配置项用于指定**集群发现过程中使用的种子主机列表**。 新节点通过此配置指定的地址列表发现集群中的现有节点,从而加入集群。 ## 配置项属性 - **配置路径**: `discovery.zen.ping.unicast.hosts` - **数据类型**: `list`(字符串列表) - **默认值**: `[]`(空列表) - **是否可选**: 是 - **弃用状态**: ⚠️ **已弃用**(推荐使用 `discovery.seed_hosts`) ## 配置项详解 ## 工作机制 ``` 节点发现流程 新节点启动 │ ↓ 读取 discovery.zen.ping.unicast.hosts │ ├──────── 已配置主机列表 │ ↓ │ 向配置的主机发送 ping │ │ │ ├── node1.example.com:9300 ──→ 响应 ✅ │ ├── node2.example.com:9300 ──→ 响应 ✅ │ └── node3.example.com:9300 ──→ 超时 │ │ │ ↓ │ 收集集群信息 │ │ │ ↓ │ 加入集群 ✅ │ └──────── 未配置(空列表) ↓ 使用本地默认地址 ↓ 127.0.0.1 和 ::1 ``` ## 主机地址格式 ``` 格式 1: 主机 + 端口 ["192.168.1.100:9300", "192.168.1.101:9300"] 格式 2: 仅主机名(端口自动推导) ["node1.example.com", "node2.example.com"] 格式 3: IP 地址 ["10.0.0.1:9300", "10.0.0.2:9300"] ``` ## 配置建议 ## ⚠️ 重要提示 此配置项**已被标记为弃用**,强烈推荐使用新的 `discovery.seed_hosts` 配置。 ## 生产环境(推荐使用新配置) ```yaml discovery: seed_hosts: - "node1.example.com:9300" - "node2.example.com:9300" - "node3.example.com:9300" ``` ## 开发/测试环境 ```yaml discovery: seed_hosts: - "127.0.0.1:9300" ``` ## 跨地域部署 ```yaml discovery: seed_hosts: - "dc1-node1.example.com:9300" - "dc2-node1.example.com:9300" - "dc3-node1.example.com:9300" ``` ## 代码示例 ## easysearch.yml 配置(已弃用) ```yaml discovery: zen: ping: unicast: hosts: ["node1:9300", "node2:9300", "node3:9300"] # 旧配置 ``` ## 推荐的替代配置 ```yaml discovery: seed_hosts: ["node1:9300", "node2:9300", "node3:9300"] # 新配置(推荐) ``` ## 多数据中心配置 ```yaml discovery: seed_hosts: # 数据中心 1 - "dc1-node1.example.com:9300" - "dc1-node2.example.com:9300" # 数据中心 2 - "dc2-node1.example.com:9300" - "dc2-node2.example.com:9300" ``` ## 不指定端口配置 ```yaml discovery: seed_hosts: - "node1.example.com" # 使用 transport.port 的第一个端口 - "node2.example.com" ``` ## 相关配置 | 配置项 | 状态 | 作用 | 默认值 | |--------|------|------|--------| | `discovery.zen.ping.unicast.hosts` | ⚠️ 已弃用 | 旧版种子主机配置 | - | | `discovery.seed_hosts` | ✅ 推荐 | 新版种子主机配置 | - | | `discovery.seed_providers` | ✅ 有效 | 种子提供者列表 | ["settings"] | ## 配置冲突检查 ```java // 不能同时配置新旧两个配置 if (LEGACY_HOSTS_SETTING.exists(settings)) { if (DISCOVERY_SEED_HOSTS_SETTING.exists(settings)) { throw new IllegalArgumentException( "it is forbidden to set both [" + "discovery.seed_hosts] and [" + "discovery.zen.ping.unicast.hosts]" ); } } ``` ## 默认行为 ## 未配置任何种子主机 ``` 使用本地默认地址 默认地址列表: - 127.0.0.1(IPv4) - ::1(IPv6,如果支持) 默认端口范围: - transport.port 配置的第一个端口 - 通常是 9300-9400 ``` ## 只配置一个节点 ``` 单节点集群 discovery.seed_hosts: - "localhost:9300" 功能: - 开发/测试环境 - 单节点演示 ``` ## 配置多个节点 ``` 多节点集群 discovery.seed_hosts: - "master1:9300" - "master2:9300" - "data1:9300" 功能: - 高可用性 - 负载均衡 - 容错能力 ``` ## 端口处理 ``` 端口省略时的处理 配置: ["node1", "node2"] transport.port: 9300-9400 解析结果: - node1:9300 ← 使用第一个端口 - node2:9300 ← 使用第一个端口 注意事项: - 如果省略端口,使用 transport.port 配置的第一个端口 - 建议显式指定端口以避免歧义 ``` ## 使用场景 ## 推荐使用新配置的所有场景 - **新部署**: 直接使用 `discovery.seed_hosts` - **配置迁移**: 从旧配置迁移到新配置 - **版本升级**: 新版本使用新配置 ## 旧版配置(不推荐) - **旧版本兼容**: 需要与 6.x 版本兼容时 - **现有部署**: 不想修改现有配置 ## 注意事项 1. **已弃用**: 此配置已被标记为弃用,强烈推荐使用 `discovery.seed_hosts`。 2. **不能同时使用**: 不能同时配置旧版和新版的种子主机配置。 3. **至少配置一个节点**: 生产环境至少配置 2-3 个节点以保证高可用。 4. **使用主机名还是 IP**: 生产环境建议使用主机名而不是硬编码 IP。 5. **端口建议**: 显式指定端口而不是省略,避免歧义。 6. **动态更新**: 种子主机列表不支持动态更新,修改后需要重启节点。 7. **地址解析**: 使用主机名时需要确保 DNS 解析正常工作。 8. **防火墙配置**: 确保种子节点之间的防火墙允许通信。