ES Operator部署K8s ES集群报MasterNotDiscoveredException如何排查
问题核心触发点
从给出的日志信息可以直接锁定核心异常前提:7.x版本全新部署的ES集群未正确配置cluster.initial_master_nodes引导参数,这是主节点选举失败、抛出MasterNotDiscoveredException的直接原因,和节点间网络连通性无关。
该参数是ES 7.x版本全新集群启动时的必填项,作用是指定初始选举阶段参与投票的候选主节点列表,避免节点在启动阶段无限制等待发现更多节点、无法达成选举多数派。
排查方向
按优先级从高到低排查以下项:
- 核查ES Operator下发的Elasticsearch自定义资源(CR)配置,确认是否遗漏首次引导相关配置,重点检查初始主节点列表、集群名称的配置规则
- 进入每个master节点Pod,读取运行时生效的
config/elasticsearch.yml配置,核对4个核心字段的实际生效值:cluster.name:必须和预期的logging-ek完全一致,不允许存在大小写偏差、多余空格或特殊字符discovery.seed_hosts:必须正确包含3个master节点的集群内可访问域名node.name:每个节点的自身名称必须和初始主节点列表中填写的名称完全匹配,不允许出现节点名带域名后缀、用IP替代节点名的不匹配情况cluster.initial_master_nodes:全新集群场景下该字段不能为空,且列表中必须准确包含3个候选主节点的node.name值
- 核查3个master节点的数据目录:如果之前存在失败启动的残留元数据,节点会误判定自身不属于全新待引导集群,自动跳过初始引导流程,同时因为本地没有可用的已提交集群状态,会卡在选举阶段无明确报错
- 核查节点所在宿主机的系统配置:确认
vm.max_map_count值不低于262144、进程打开文件句柄数不低于65536,系统资源阈值不满足要求时,选举过程中可能出现线程假死,无明确错误日志输出。
解决方法
根据集群是否有存量数据选择对应操作:
全新部署、无存量数据场景
- 修改ES Operator对应的Elasticsearch CR配置,在master节点组的配置段补充
cluster.initial_master_nodes配置,值为["logging-ek-es-master-0", "logging-ek-es-master-1", "logging-ek-es-master-2"] - 清空3个master节点挂载数据目录下的所有残留文件(注意:该操作会清除节点本地所有存量数据,仅可在全新部署场景执行)
- 滚动重启3个master节点,正常情况下10-30秒即可完成主节点选举,集群状态恢复后
/_bulk接口的阻塞会自动解除
存在存量数据、非首次启动场景
- 不要配置
cluster.initial_master_nodes参数——该参数仅在集群第一次全新引导时生效,集群完成首次选举形成稳定状态后,必须移除该配置,否则后续重启、升级时会触发选举异常 - 核对每个节点数据目录下的元数据文件是否完整,若存在元数据损坏,需要从最近的快照恢复集群
- 确认
discovery.seed_hosts配置正确后,优先重启node.id字典序最小的master节点,触发重新选举流程
注意:集群完成首次引导、稳定运行后,必须移除
cluster.initial_master_nodes配置,避免后续运维操作触发选举异常。
内容的提问来源于stack exchange,提问作者Jason Hirata
相关产品推荐
相关产品推荐

