Elasticsearch 7.2.0:尚未发现或选举主节点,选举至少需要 X 个节点

Kam*_*san 8 elasticsearch kubernetes kubernetes-operator

我正在尝试自动化 kubernetes 集群中弹性搜索节点的水平扩展和缩减过程。

最初,我在 Kubernetes 集群上部署了一个 elasticsearch 集群(3 个主节点、3 个数据和 3 个摄取节点)。哪里,cluster.initial_master_nodes是:

cluster.initial_master_nodes:
  - master-a
  - master-b
  - master-c
Run Code Online (Sandbox Code Playgroud)

然后,我进行了缩减操作,将主节点 3 的数量减少到 1 个(意外,但出于测试目的)。虽然这样做,我删除master-cmaster-b节点和重新启动master-a的节点具有以下设置:

cluster.initial_master_nodes:
  - master-a
Run Code Online (Sandbox Code Playgroud)

由于elasticsearch节点(即pods)使用persistant volume,重启节点后,会master-a出现如下日志:

"message": "master not discovered or elected yet, an election requires at least 2 nodes with ids from [TxdOAdryQ8GAeirXQHQL-g, VmtilfRIT6KDVv1R6MHGlw, KAJclUD2SM6rt9PxCGACSA], have discovered [] which is not a quorum; discovery will continue using [] from hosts providers and [{master-a}{VmtilfRIT6KDVv1R6MHGlw}{g29haPBLRha89dZJmclkrg}{10.244.0.95}{10.244.0.95:9300}{ml.machine_memory=12447109120, xpack.installed=true, ml.max_open_jobs=20}] from last-known cluster state; node term 5, last-accepted version 40 in term 5"  }
Run Code Online (Sandbox Code Playgroud)

似乎它正在尝试查找master-bmaster-c

问题:

  • 如何覆盖集群设置以便master-a不会搜索这些已删除的节点?

Dav*_*ner 12

cluster.initial_master_nodes设置仅在集群第一次启动时有效,但为了避免一些非常罕见的极端情况,一旦设置它就不应更改其值,通常应尽快将其从配置文件中删除。从参考手册关于cluster.initial_master_nodes

在重新启动集群或向现有集群添加新节点时,不应使用此设置。

除此之外,Elasticsearch 使用基于仲裁的选举协议并说明以下内容:

为了确保集群保持可用,您不能同时停止投票配置中的一半或更多节点

您同时停止了三个符合主节点条件的节点中的两个(超过一半),因此预计集群将不再工作。

参考手册还包含有关删除您未遵循的主合格节点的说明

只要集群中至少有3个master-eligible节点,一般来说最好一次删除一个节点,让集群有足够的时间自动调整投票配置和适应故障对新节点集的容忍度。

如果只剩下两个符合主节点条件的节点,那么这两个节点都不能安全地移除,因为两者都需要可靠地取得进展。要删除这些节点之一,您必须首先通知 Elasticsearch 它不应成为投票配置的一部分,而应将投票权赋予另一个节点。

它继续描述了POST /_cluster/voting_config_exclusions/node_name在缩小到单个节点时如何从投票配置中安全地删除不需要的节点。


Ami*_*wal 6

集群状态还将主配置存储存储在 Elasticsearch 节点的数据文件夹中,在您的情况下,它似乎正在读取旧集群状态(这是 3 个主节点及其 ID)。

您能否删除 的数据文件夹master-a,以便它可以从干净的集群状态启动,并且应该可以解决您的问题。

还要确保其他数据和摄取节点的master.node:false设置默认为 true。