8

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

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

cluster.initial_master_nodes:
  - master-a
  - master-b
  - master-c

然后,我进行了缩减操作,将主节点 3 的数量减少到 1 个(出乎意料,但出于测试目的)。在执行此操作时,我删除了master-c,master-b节点并master-a使用以下设置重新启动了节点:

cluster.initial_master_nodes:
  - master-a

由于elasticsearch节点(即pods)使用持久化卷,重启节点后,会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"  }

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

问题:

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

2 回答 2

14

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

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

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

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

您同时停止了三个符合主节点条件的节点中的两个,占其中一半以上,因此预计集群不再工作。

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

只要集群中至少有 3 个符合 master 条件的节点,作为一般规则,最好一次移除一个节点,让集群有足够的时间自动调整投票配置并适应故障对新节点集的容忍度。

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

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

于 2020-04-07T15:02:20.077 回答
3

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

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

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

于 2020-04-07T11:06:01.350 回答