📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

配置项作用 #

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_hostssettings 提供者的主机列表-
discovery.zen.hosts_provider旧版配置(已弃用)-
discovery.type发现类型zen

与旧版配置的兼容 #

旧版配置(已弃用):
discovery.zen.hosts_provider: settings

新版配置:
discovery.seed_providers: ["settings"]

提供者特性对比 #

提供者配置方式动态更新适用场景
settingseasysearch.yml需要重启标准生产环境
fileunicast_hosts.txt可更新文件容器化部署
自定义插件实现取决于实现特殊需求

使用场景 #

推荐使用 settings 提供者 #

  • 传统部署: 虚拟机或物理机部署
  • 固定节点: 节点地址相对稳定
  • 简单配置: 不需要复杂的发现机制

推荐使用 file 提供者 #

  • 容器化: Kubernetes、Docker 部署
  • 动态环境: 节点地址经常变化
  • 外部配置: 配置与镜像分离

自定义提供者 #

  • 云环境: 需要与云服务集成
  • 服务发现: 集成外部服务发现机制
  • 特殊需求: 特定的发现逻辑

注意事项 #

  1. 自动回退: 如果不配置此设置,系统会自动使用 “settings” 提供者。

  2. 向后兼容: 旧的 discovery.zen.hosts_provider 配置仍然支持,但不推荐使用。

  3. 不能同时使用: 不能同时设置 discovery.seed_providersdiscovery.zen.hosts_provider

  4. 提供者验证: 系统会验证所有指定的提供者是否存在,不存在的提供者会导致启动失败。

  5. 地址合并: 多个提供者的地址会被合并,作为发现过程的种子地址。

  6. 动态调用: 提供者的 getSeedAddresses 方法在发现过程中会被重复调用。

  7. 单节点模式: 设置 discovery.type: single-node 时,不需要此配置。