配置项作用 #
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 配置。
生产环境(推荐使用新配置) #
discovery:
seed_hosts:
- "node1.example.com:9300"
- "node2.example.com:9300"
- "node3.example.com:9300"
开发/测试环境 #
discovery:
seed_hosts:
- "127.0.0.1:9300"
跨地域部署 #
discovery:
seed_hosts:
- "dc1-node1.example.com:9300"
- "dc2-node1.example.com:9300"
- "dc3-node1.example.com:9300"
代码示例 #
easysearch.yml 配置(已弃用) #
discovery:
zen:
ping:
unicast:
hosts: ["node1:9300", "node2:9300", "node3:9300"] # 旧配置
推荐的替代配置 #
discovery:
seed_hosts: ["node1:9300", "node2:9300", "node3:9300"] # 新配置(推荐)
多数据中心配置 #
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"
不指定端口配置 #
discovery:
seed_hosts:
- "node1.example.com" # 使用 transport.port 的第一个端口
- "node2.example.com"
相关配置 #
| 配置项 | 状态 | 作用 | 默认值 |
|---|---|---|---|
discovery.zen.ping.unicast.hosts | ⚠️ 已弃用 | 旧版种子主机配置 | - |
discovery.seed_hosts | ✅ 推荐 | 新版种子主机配置 | - |
discovery.seed_providers | ✅ 有效 | 种子提供者列表 | [“settings”] |
配置冲突检查 #
// 不能同时配置新旧两个配置
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 版本兼容时
- 现有部署: 不想修改现有配置
注意事项 #
已弃用: 此配置已被标记为弃用,强烈推荐使用
discovery.seed_hosts。不能同时使用: 不能同时配置旧版和新版的种子主机配置。
至少配置一个节点: 生产环境至少配置 2-3 个节点以保证高可用。
使用主机名还是 IP: 生产环境建议使用主机名而不是硬编码 IP。
端口建议: 显式指定端口而不是省略,避免歧义。
动态更新: 种子主机列表不支持动态更新,修改后需要重启节点。
地址解析: 使用主机名时需要确保 DNS 解析正常工作。
防火墙配置: 确保种子节点之间的防火墙允许通信。





