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

配置项作用 #

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 版本兼容时
  • 现有部署: 不想修改现有配置

注意事项 #

  1. 已弃用: 此配置已被标记为弃用,强烈推荐使用 discovery.seed_hosts

  2. 不能同时使用: 不能同时配置旧版和新版的种子主机配置。

  3. 至少配置一个节点: 生产环境至少配置 2-3 个节点以保证高可用。

  4. 使用主机名还是 IP: 生产环境建议使用主机名而不是硬编码 IP。

  5. 端口建议: 显式指定端口而不是省略,避免歧义。

  6. 动态更新: 种子主机列表不支持动态更新,修改后需要重启节点。

  7. 地址解析: 使用主机名时需要确保 DNS 解析正常工作。

  8. 防火墙配置: 确保种子节点之间的防火墙允许通信。