配置项作用 #
discovery.zen.hosts_provider 配置项用于指定集群发现过程中使用的种子主机提供者列表。
此配置定义了节点如何获取集群中其他节点的地址信息,以便发现并加入集群。
配置项属性 #
- 配置路径:
discovery.zen.hosts_provider - 数据类型:
list(字符串列表) - 默认值:
[](空列表) - 是否可选: 是
- 弃用状态: ⚠️ 已弃用
配置项详解 #
工作机制 #
集群发现流程
节点启动
│
↓
读取 discovery.zen.hosts_provider
│
├──────── 已配置(如 ["file"])
│ │
│ ↓
│ 使用指定的提供者
│ │
│ ├── "file" → 读取 unicast_hosts.txt
│ └── "settings" → 读取 discovery.seed_hosts
│
└──────── 未配置(空列表)
│
↓
回退到默认行为
│
↓
使用 TransportService 默认地址
与新配置的冲突检查 #
// 系统会检查是否同时配置了旧的和新的配置
if (LEGACY_DISCOVERY_HOSTS_PROVIDER_SETTING.exists(settings)) {
if (DISCOVERY_SEED_PROVIDERS_SETTING.exists(settings)) {
throw new IllegalArgumentException(
"it is forbidden to set both [" +
DISCOVERY_SEED_PROVIDERS_SETTING.getKey() + "] and [" +
LEGACY_DISCOVERY_HOSTS_PROVIDER_SETTING.getKey() + "]"
);
}
return LEGACY_DISCOVERY_HOSTS_PROVIDER_SETTING.get(settings);
}
return DISCOVERY_SEED_PROVIDERS_SETTING.get(settings);
内置提供者 #
1. settings 提供者 #
基于配置文件的主机列表:
discovery.zen.hosts_provider: ["settings"]
discovery.seed_hosts:
- "192.168.1.10:9300"
- "192.168.1.11:9300"
- "192.168.1.12:9300"
2. file 提供者 #
基于文件的主机列表:
discovery.zen.hosts_provider: ["file"]
文件内容(unicast_hosts.txt):
# 种子节点列表
192.168.1.10:9300
192.168.1.11:9300
192.168.1.12:9300
配置建议 #
⚠️ 重要提示 #
此配置项已被标记为弃用,建议使用新的 discovery.seed_providers 配置。
使用新配置(推荐) #
discovery.seed_providers: ["settings"]
discovery.seed_hosts:
- "node1.example.com:9300"
- "node2.example.com:9300"
使用文件提供者 #
discovery.seed_providers: ["file"]
创建 unicast_hosts.txt:
node1.example.com:9300
node2.example.com:9300
node3.example.com:9300
代码示例 #
easysearch.yml 配置(已弃用) #
discovery:
zen:
hosts_provider: ["file"] # 旧配置(已弃用)
推荐的替代配置 #
discovery:
seed_providers: ["file"] # 新配置(推荐)
混合提供者配置 #
discovery:
seed_providers:
- "settings"
- "file"
版本兼容配置 #
# 6.x 版本
discovery:
zen:
hosts_provider: ["settings"]
# 7.x+ 版本
discovery:
seed_providers: ["settings"]
相关配置 #
| 配置项 | 状态 | 作用 |
|---|---|---|
discovery.zen.hosts_provider | ⚠️ 已弃用 | 旧版主机提供者配置 |
discovery.seed_providers | ✅ 推荐 | 新版种子提供者配置 |
discovery.seed_hosts | ✅ 有效 | 种子主机列表 |
discovery.zen.ping.unicast.hosts | ⚠️ 已弃用 | 旧版单播主机配置 |
配置迁移 #
旧配置(6.x):
discovery.zen.hosts_provider: ["settings"]
discovery.zen.ping.unicast.hosts: ["node1:9300", "node2:9300"]
新配置(7.x+):
discovery.seed_providers: ["settings"]
discovery.seed_hosts: ["node1:9300", "node2:9300"]
版本兼容性 #
6.x 版本 #
discovery:
zen:
hosts_provider: ["settings"]
ping:
unicast:
hosts: ["node1:9300", "node2:9300"]
7.x+ 版本 #
discovery:
seed_providers: ["settings"]
seed_hosts: ["node1:9300", "node2:9300"]
测试框架中的版本处理 #
if (node.getVersion().onOrAfter("7.0.0")) {
// 移除旧的 zen 配置
node.defaultConfig.keySet().stream()
.filter(name -> name.startsWith("discovery.zen."))
.forEach(node.defaultConfig::remove);
// 使用新的配置
node.defaultConfig.put("discovery.seed_providers", "file");
}
使用场景 #
推荐迁移到新配置 #
- 新部署: 直接使用
discovery.seed_providers - 升级部署: 逐步迁移到新配置
- 兼容性: 避免使用已弃用的配置
文件提供者适用场景 #
- 容器化部署: Kubernetes、Docker
- 动态配置: 配置与镜像分离
- 外部管理: 通过配置管理工具维护
注意事项 #
已弃用: 此配置已被标记为弃用,建议迁移到
discovery.seed_providers。不能同时使用: 不能同时配置
hosts_provider和seed_providers,系统会报错。文件位置: 使用 file 提供者时,
unicast_hosts.txt文件应在配置目录中。文件格式: 每行一个主机,可包含端口,支持
#开头的注释。动态更新: 文件提供者支持动态更新,修改文件后重启节点生效。
测试框架: 测试框架会根据版本自动选择合适的配置方式。
回退行为: 未配置时使用 TransportService 的默认种子地址。





