配置项作用 #
discovery.seed_providers 配置项用于指定集群发现过程中使用的**种子主机提供者(Seed Hosts Providers)**列表。
种子提供者负责为集群提供初始节点地址信息,使节点能够发现并加入集群。
配置项属性 #
- 配置路径:
discovery.seed_providers - 数据类型:
list(字符串列表) - 默认值:
[](空列表,自动使用 “settings”) - 是否可选: 是
配置项详解 #
工作机制 #
集群发现流程
节点启动
│
↓
读取 discovery.seed_providers
│
├──────── 未配置(空列表)
│ │
│ ↓
│ 自动使用 "settings" 提供者
│ │
│ ↓
│ 读取 discovery.seed_hosts
│
└──────── 已配置提供者列表
│
↓
按顺序调用每个提供者
│
├── "settings" 提供者
│ ↓
│ 读取 discovery.seed_hosts
│
├── "file" 提供者
│ ↓
│ 读取 unicast_hosts.txt 文件
│
└── 自定义提供者
↓
插件自定义逻辑
内置提供者 #
1. settings 提供者 #
基于配置文件的静态主机列表:
discovery.seed_providers: ["settings"]
discovery.seed_hosts:
- 192.168.1.10:9300
- 192.168.1.11:9300
- 192.168.1.12:9300
特点:
- 最常用的配置方式
- 静态配置,需要手动维护
- 适合节点稳定的集群
2. file 提供者 #
基于文件的主机列表:
discovery.seed_providers: ["file"]
文件内容(unicast_hosts.txt):
# 格式: host:port 或 host
192.168.1.10:9300
192.168.1.11:9300
192.168.1.12:9300
特点:
- 配置与代码分离
- 可以动态更新文件
- 适合容器化部署
配置建议 #
标准生产环境 #
discovery.seed_providers: ["settings"]
discovery.seed_hosts:
- "node1.example.com:9300"
- "node2.example.com:9300"
- "node3.example.com:9300"
建议: 使用默认的 “settings” 提供者,这是最可靠的配置方式。
容器化部署 #
discovery.seed_providers: ["file"]
建议: 在 Kubernetes 或 Docker 环境中,使用文件提供者便于动态配置。
多提供者组合 #
discovery.seed_providers:
- "settings"
- "file"
建议: 可以组合多个提供者,它们的地址会被合并使用。
不配置(自动回退) #
# 不配置 discovery.seed_providers
# 系统自动使用 "settings" 提供者
discovery.seed_hosts:
- "node1.example.com:9300"
建议: 如果只需要标准配置,可以省略此配置项。
代码示例 #
easysearch.yml 配置 #
# 使用 settings 提供者(最常用)
discovery.seed_providers: ["settings"]
discovery.seed_hosts:
- "192.168.1.10:9300"
- "192.168.1.11:9300"
- "192.168.1.12:9300"
文件提供者配置 #
discovery.seed_providers: ["file"]
创建 unicast_hosts.txt:
192.168.1.10:9300
192.168.1.11:9300
192.168.1.12:9300
自定义提供者 #
discovery.seed_providers:
- "custom-provider"
插件实现:
public class MyDiscoveryPlugin extends Plugin implements DiscoveryPlugin {
@Override
public Map<String, Supplier<SeedHostsProvider>> getSeedHostProviders(
TransportService transportService,
NetworkService networkService) {
return Map.of("custom-provider", () -> new MySeedHostsProvider());
}
}
相关配置 #
| 配置项 | 作用 | 默认值 |
|---|---|---|
discovery.seed_providers | 种子提供者列表 | [“settings”](自动) |
discovery.seed_hosts | settings 提供者的主机列表 | - |
discovery.zen.hosts_provider | 旧版配置(已弃用) | - |
discovery.type | 发现类型 | zen |
与旧版配置的兼容 #
旧版配置(已弃用):
discovery.zen.hosts_provider: settings
新版配置:
discovery.seed_providers: ["settings"]
提供者特性对比 #
| 提供者 | 配置方式 | 动态更新 | 适用场景 |
|---|---|---|---|
| settings | easysearch.yml | 需要重启 | 标准生产环境 |
| file | unicast_hosts.txt | 可更新文件 | 容器化部署 |
| 自定义 | 插件实现 | 取决于实现 | 特殊需求 |
使用场景 #
推荐使用 settings 提供者 #
- 传统部署: 虚拟机或物理机部署
- 固定节点: 节点地址相对稳定
- 简单配置: 不需要复杂的发现机制
推荐使用 file 提供者 #
- 容器化: Kubernetes、Docker 部署
- 动态环境: 节点地址经常变化
- 外部配置: 配置与镜像分离
自定义提供者 #
- 云环境: 需要与云服务集成
- 服务发现: 集成外部服务发现机制
- 特殊需求: 特定的发现逻辑
注意事项 #
自动回退: 如果不配置此设置,系统会自动使用 “settings” 提供者。
向后兼容: 旧的
discovery.zen.hosts_provider配置仍然支持,但不推荐使用。不能同时使用: 不能同时设置
discovery.seed_providers和discovery.zen.hosts_provider。提供者验证: 系统会验证所有指定的提供者是否存在,不存在的提供者会导致启动失败。
地址合并: 多个提供者的地址会被合并,作为发现过程的种子地址。
动态调用: 提供者的
getSeedAddresses方法在发现过程中会被重复调用。单节点模式: 设置
discovery.type: single-node时,不需要此配置。





