You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

搭建3节点ES集群设置内置账号密码时遇master_not_discovered_exception错误

Elasticsearch集群密码设置失败与连接问题排查

1. 集群发现核心配置缺失

仅配置cluster.name和network.host不足以让节点形成集群,必须添加节点发现与主节点初始化参数到elasticsearch.yml:

# 集群种子节点(填写Swarm集群中ES服务的名称,假设服务名为es11、es12、es13)
discovery.seed_hosts: ["es11", "es12", "es13"]
# 初始候选主节点列表(首次启动集群时需要,后续集群稳定后可移除)
cluster.initial_master_nodes: ["es11", "es12", "es13"]

Docker Swarm环境下,容器通过服务名跨节点通信,缺失这些配置会导致节点无法找到彼此,进而无法选举主节点,触发master_not_discovered_exception。

2. SSL与端口配置错误

(1)HTTP端口访问问题

  • 若未启用HTTP层SSL,执行密码设置时应使用http://localhost:9200而非https,否则会出现连接拒绝;若已启用SSL,需确保elasticsearch.yml中配置了完整的HTTP SSL参数:
    xpack.security.http.ssl.enabled: true
    xpack.security.http.ssl.keystore.path: /usr/share/elasticsearch/config/node.p12
    xpack.security.http.ssl.truststore.path: /usr/share/elasticsearch/config/ca.p12
    
  • 检查docker-compose.yml中9200端口映射是否正确,确保宿主机端口未被占用:
    ports:
      - "9200:9200"
    

(2)证书权限与路径问题

传输的.p12证书需确保:

  • 路径与elasticsearch.yml中配置的路径完全一致;
  • 文件权限授予elasticsearch用户:
    chown elasticsearch:elasticsearch /usr/share/elasticsearch/config/*.p12
    

权限错误会导致ES启动失败,容器内部curl localhost:9200自然会连接拒绝。

3. Docker Swarm网络配置问题

ES集群必须使用overlay网络实现跨节点容器通信,在docker-compose.yml中定义并绑定服务:

networks:
  es-overlay:
    driver: overlay
    attachable: true

services:
  es11:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.x.x
    networks:
      - es-overlay
    # 其他配置...
  es12:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.x.x
    networks:
      - es-overlay
    # 其他配置...
  es13:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.x.x
    networks:
      - es-overlay
    # 其他配置...

默认bridge网络无法支持Swarm跨节点通信,会导致节点间无法发现彼此。

4. 密码设置时机与集群健康检查

执行elasticsearch-setup-passwords前,必须确保集群已正常启动并选举出主节点:

  1. 进入容器后,先检查集群状态(根据是否启用HTTP SSL选择命令):
    # 未启用HTTP SSL
    curl http://localhost:9200/_cluster/health?pretty
    # 已启用HTTP SSL(需指定CA证书)
    curl --cacert /usr/share/elasticsearch/config/ca.crt https://localhost:9200/_cluster/health?pretty
    
  2. 等待返回的status字段为green或yellow后,再执行密码设置命令。

5. 资源限制配置

ES默认需要较大内存,若docker-compose.yml未配置内存限制,会导致ES启动失败:

environment:
  - ES_JAVA_OPTS="-Xms1g -Xmx1g"
deploy:
  resources:
    limits:
      memory: 2G

内存不足会导致ES进程无法正常启动,进而出现连接拒绝问题。

内容的提问来源于stack exchange,提问作者Boodle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 09:15:49