EKS托管K8s中部署Elasticsearch集群报master not discovered错误如何解决?
Elasticsearch集群master选举失败问题排查
问题根因
从日志和配置对比,共有3处核心配置错误导致集群无法完成master选举:
- 错误1:误用废弃的旧版本选举参数
ES 7.x及以上版本已经完全废弃了discovery.zen.minimum_master_nodes参数,该参数是ES 6.x及更早版本的选举配置,残留该参数会干扰7.x版本的默认选举逻辑。 - 错误2:初始master节点配置值不匹配
cluster.initial_master_nodes配置的是节点名称(node.name),而不是节点的FQDN地址。你的配置中填的是es-0.es-entrypoint.default.svc.cluster.local,但从日志可以看到所有节点的node.name是es-0、es-1、es-2,完全匹配失败,导致集群找不到符合条件的初始master节点完成引导。 - 错误3:无头服务未开放节点通信端口
你定义的无头服务es-entrypoint只开放了9200HTTP端口,但ES节点之间内部通信、选举交互依赖9300传输端口,端口未开放导致节点之间虽然能互相发现IP,但无法完成选举交互。
修复方案
1. 修正ConfigMap中的ES配置
修改es-config的elasticsearch.yml内容如下:
cluster.name: elk-cluster network.host: "0.0.0.0" bootstrap.memory_lock: false node.max_local_storage_nodes: 9 # 注意这里填的是节点名,不是FQDN,3个master资格节点都要列全 cluster.initial_master_nodes: - es-0 - es-1 - es-2 discovery.seed_hosts: - es-entrypoint.default.svc.cluster.local
注:
discovery.seed_hosts直接填无头服务的域名即可,ES会自动解析该域名下所有Pod的IP作为发现列表,无需逐个写Pod的FQDN;集群首次启动成功后,下次更新配置可以删掉cluster.initial_master_nodes配置,避免重复引导问题。
2. 修正无头服务配置
给es-entrypoint服务添加9300端口的暴露配置:
apiVersion: v1 kind: Service metadata: name: es-entrypoint spec: selector: name: es ports: - port: 9200 targetPort: 9200 name: http protocol: TCP # 新增节点通信端口暴露 - port: 9300 targetPort: 9300 name: inter-node protocol: TCP clusterIP: None
3. 清理旧数据重新部署
因为之前启动失败的节点可能残留了异常的集群状态数据,建议删除旧的PVC,重新apply修复后的配置,集群即可正常完成选举启动。
内容的提问来源于stack exchange,提问作者Joey Yi Zhao
相关产品推荐
相关产品推荐

