--- title: "Zen发现主机提供者配置" date: 2026-03-01 lastmod: 2026-03-01 description: "discovery.zen.hosts_provider 配置项用于指定集群发现时的主机提供者(已弃用)。" tags: ["集群发现", "种子节点", "已弃用"] summary: "配置项作用 # 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." --- ## 配置项作用 `discovery.zen.hosts_provider` 配置项用于指定集群发现过程中使用的**种子主机提供者**列表。 此配置定义了节点如何获取集群中其他节点的地址信息,以便发现并加入集群。 ## 配置项属性 - **配置路径**: `discovery.zen.hosts_provider` - **数据类型**: `list`(字符串列表) - **默认值**: `[]`(空列表) - **是否可选**: 是 - **弃用状态**: ⚠️ **已弃用** ## 配置项详解 ## 工作机制 ``` 集群发现流程 节点启动 │ ↓ 读取 discovery.zen.hosts_provider │ ├──────── 已配置(如 ["file"]) │ │ │ ↓ │ 使用指定的提供者 │ │ │ ├── "file" → 读取 unicast_hosts.txt │ └── "settings" → 读取 discovery.seed_hosts │ └──────── 未配置(空列表) │ ↓ 回退到默认行为 │ ↓ 使用 TransportService 默认地址 ``` ## 与新配置的冲突检查 ```java // 系统会检查是否同时配置了旧的和新的配置 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 提供者 基于配置文件的主机列表: ```yaml 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 提供者 基于文件的主机列表: ```yaml 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` 配置。 ## 使用新配置(推荐) ```yaml discovery.seed_providers: ["settings"] discovery.seed_hosts: - "node1.example.com:9300" - "node2.example.com:9300" ``` ## 使用文件提供者 ```yaml discovery.seed_providers: ["file"] ``` 创建 `unicast_hosts.txt`: ``` node1.example.com:9300 node2.example.com:9300 node3.example.com:9300 ``` ## 代码示例 ## easysearch.yml 配置(已弃用) ```yaml discovery: zen: hosts_provider: ["file"] # 旧配置(已弃用) ``` ## 推荐的替代配置 ```yaml discovery: seed_providers: ["file"] # 新配置(推荐) ``` ## 混合提供者配置 ```yaml discovery: seed_providers: - "settings" - "file" ``` ## 版本兼容配置 ```yaml # 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 版本 ```yaml discovery: zen: hosts_provider: ["settings"] ping: unicast: hosts: ["node1:9300", "node2:9300"] ``` ## 7.x+ 版本 ```yaml discovery: seed_providers: ["settings"] seed_hosts: ["node1:9300", "node2:9300"] ``` ## 测试框架中的版本处理 ```java 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 - **动态配置**: 配置与镜像分离 - **外部管理**: 通过配置管理工具维护 ## 注意事项 1. **已弃用**: 此配置已被标记为弃用,建议迁移到 `discovery.seed_providers`。 2. **不能同时使用**: 不能同时配置 `hosts_provider` 和 `seed_providers`,系统会报错。 3. **文件位置**: 使用 file 提供者时,`unicast_hosts.txt` 文件应在配置目录中。 4. **文件格式**: 每行一个主机,可包含端口,支持 `#` 开头的注释。 5. **动态更新**: 文件提供者支持动态更新,修改文件后重启节点生效。 6. **测试框架**: 测试框架会根据版本自动选择合适的配置方式。 7. **回退行为**: 未配置时使用 TransportService 的默认种子地址。