--- title: "集群发现机制配置" date: 2026-01-24 lastmod: 2026-01-24 description: "控制集群发现机制的配置项说明" tags: ["集群配置", "节点发现", "集群组建"] summary: "配置项作用 # discovery.type 配置项指定节点使用的集群发现机制类型。发现机制决定节点如何找到其他节点并组成集群。 配置项类型 # 该配置项为静态配置,需要在启动时设置,修改后需要重启节点才能生效。 默认值 # zen(Zen 发现机制) 是否必需 # 可选配置项(有默认值) 可选值 # 值 说明 zen Zen 发现机制(默认,适用于多节点集群) single-node 单节点模式(开发/测试使用) 配置格式 # # 默认配置(多节点集群) discovery.type: zen # 单节点模式 discovery.type: single-node 工作原理 # Zen 发现机制: ┌─────────────────────────────────────────────────────────┐ │ 节点启动 │ └─────────────────────────────────────────────────────────┘ │ ▼ 读取 discovery.seed_hosts │ ▼ ┌───────┴────────┐ │ │ 连接种子节点 未配置种子节点 │ │ ▼ ▼ ┌───────┴────────┐ 使用本地默认地址 │ │ 发现其他节点 单节点模式 │ │ ▼ ▼ 加入集群 独立集群 使用示例 # 开发/测试环境(单节点):" --- ## 配置项作用 `discovery.type` 配置项指定节点使用的集群发现机制类型。发现机制决定节点如何找到其他节点并组成集群。 ## 配置项类型 该配置项为**静态配置**,需要在启动时设置,修改后需要重启节点才能生效。 ## 默认值 ``` zen(Zen 发现机制) ``` ## 是否必需 **可选配置项**(有默认值) ## 可选值 | 值 | 说明 | |---|------| | `zen` | Zen 发现机制(默认,适用于多节点集群) | | `single-node` | 单节点模式(开发/测试使用) | ## 配置格式 ```yaml # 默认配置(多节点集群) discovery.type: zen # 单节点模式 discovery.type: single-node ``` ## 工作原理 **Zen 发现机制:** ``` ┌─────────────────────────────────────────────────────────┐ │ 节点启动 │ └─────────────────────────────────────────────────────────┘ │ ▼ 读取 discovery.seed_hosts │ ▼ ┌───────┴────────┐ │ │ 连接种子节点 未配置种子节点 │ │ ▼ ▼ ┌───────┴────────┐ 使用本地默认地址 │ │ 发现其他节点 单节点模式 │ │ ▼ ▼ 加入集群 独立集群 ``` ## 使用示例 **开发/测试环境(单节点):** ```yaml cluster.name: dev-cluster node.name: dev-node discovery.type: single-node network.host: 127.0.0.1 ``` **生产环境(多节点):** ```yaml cluster.name: production node.name: node-1 network.host: 0.0.0.0 discovery.type: zen discovery.seed_hosts: - "192.168.1.10:9300" - "192.168.1.11:9300" - "192.168.1.12:9300" ``` **多节点集群配置示例:** ```yaml # 节点 1 cluster.name: prod-cluster node.name: node-1 network.host: 192.168.1.10 discovery.type: zen discovery.seed_hosts: - "192.168.1.11:9300" - "192.168.1.12:9300" # 节点 2 cluster.name: prod-cluster node.name: node-2 network.host: 192.168.1.11 discovery.type: zen discovery.seed_hosts: - "192.168.1.10:9300" - "192.168.1.12:9300" # 节点 3 cluster.name: prod-cluster node.name: node-3 network.host: 192.168.1.12 discovery.type: zen discovery.seed_hosts: - "192.168.1.10:9300" - "192.168.1.11:9300" ``` ## 推荐设置建议 | 环境 | 推荐配置 | 说明 | |-----|---------|------| | 开发 | `single-node` | 简单配置,快速启动 | | 测试 | `single-node` 或 `zen` | 根据需求选择 | | 生产 | `zen` | 必须使用 zen | ## single-node 模式特点 **适用场景:** - 本地开发 - 功能测试 - 学习和演示 - 单机部署 **特点:** ``` 优点: - 配置简单 - 启动快速 - 资源占用少 限制: - 无法扩展为集群 - 无高可用性 - 单点故障 ``` ## Zen 发现机制特点 **适用场景:** - 生产环境 - 多节点部署 - 需要高可用 - 数据安全要求高 **需要配合的配置:** ```yaml # Zen 发现必需配置 cluster.name: production # 集群名称 network.host: 0.0.0.0 # 网络地址 discovery.seed_hosts: # 种子节点 - "192.168.1.10:9300" - "192.168.1.11:9300" cluster.initial_master_nodes: # 首次启动配置 - "node-1" - "node-2" - "node-3" ``` ## 发现机制对比 | 特性 | single-node | zen | |-----|-------------|-----| | 节点数量 | 1 | 1+ | | 高可用 | 否 | 是 | | 需要配置 | 最少 | 较多 | | 适用场景 | 开发/测试 | 生产 | ## 常见问题 **问题 1:单节点无法扩展为集群** **原因:** 使用了 `discovery.type: single-node` **解决方案:** ```yaml # 修改配置为 zen discovery.type: zen # 添加种子节点配置 discovery.seed_hosts: - "192.168.1.10:9300" ``` **问题 2:多节点启动为独立集群** **可能原因:** 1. `cluster.name` 不一致 2. 未配置 `discovery.seed_hosts` 3. 网络不通 **解决方案:** ```yaml # 确保所有节点配置一致 cluster.name: production # 配置种子节点 discovery.seed_hosts: - "192.168.1.10:9300" - "192.168.1.11:9300" # 配置网络地址 network.host: 0.0.0.0 ``` **问题 3:首次启动集群失败** **解决方案:** ```yaml # 首次启动必须配置 discovery.seed_hosts: - "192.168.1.10:9300" - "192.168.1.11:9300" - "192.168.1.12:9300" cluster.initial_master_nodes: - "node-1" - "node-2" - "node-3" ``` ## 配置文件位置 **配置文件(easysearch.yml):** ```yaml # 开发环境 cluster.name: dev discovery.type: single-node # 生产环境 cluster.name: production discovery.type: zen discovery.seed_hosts: ["host1", "host2"] ``` ## 相关配置项 | 配置项 | 作用 | 默认值 | |-------|------|-------| | `discovery.seed_hosts` | 种子节点列表 | - | | `cluster.name` | 集群名称 | easysearch | | `network.host` | 网络绑定地址 | - | | `cluster.initial_master_nodes` | 初始主节点 | - | ## 注意事项 1. **静态配置**:修改发现机制需要重启节点 2. **首次启动**:新集群首次启动需配置 initial_master_nodes 3. **网络要求**:Zen 发现要求节点间网络互通 4. **集群名称**:所有节点的 cluster.name 必须相同 5. **生产环境**:生产环境必须使用 zen 发现机制