2

我们目前正在设置一个包含两个弹性搜索实例(集群服务器)的环境。

由于它是集群的,我们需要确保数据(索引)在两个实例之间同步。

我们无法设置额外的(第 3 个)服务器/实例来充当“主服务器”。

因此,我们将这两个实例都配置为主节点和数据节点。所以实例 1 是主节点,实例 2 也是主节点。

当两个实例都启动并运行时,同步工作正常。但是当一个实例宕机时,另一个实例不断尝试与宕机的实例连接,这显然是因为实例宕机而失败。因此,启动的节点也不再运行,因为它无法连接到他的“主”节点(即关闭的节点),即使实例本身也是“主”。

在这种情况下会记录以下错误:

  • org.elasticsearch.cluster.block.ClusterBlockException:被阻止:[SERVICE_UNAVAILABLE/2/no master];
  • org.elasticsearch.transport.ConnectTransportException:[xxxxx-xxxxx-2][xx.xx.xx.xx:9300] connect_exception
  • 引起:io.netty.channel.AbstractChannel$AnnotatedConnectException:连接被拒绝:没有更多信息:xx.xx.xx.xx/xx.xx.xx.xx:9300

简而言之:集群设置中的两个弹性搜索主实例。当一个关闭时,另一个无法运行,因为它无法连接到“主”实例。

期望的结果:如果一个主实例关闭,另一个应该继续运行(不抛出错误)。

关于如何解决这个问题的任何建议,而无需设置一个额外的服务器,即“主服务器”和其他 2 个“从属服务器”?

谢谢

4

3 回答 3

0

如果没有选项可以再增加 1 个节点,则可以设置
minimum_master_nodes=1 。即使有 1 个节点启动,这也会让您的 es 集群启动。但这可能会导致脑裂问题,因为我们限制只有 1 个节点可见以形成集群。在这种情况下,您必须重新启动集群才能解决裂脑问题。

我建议您升级到 elasticsearch 7.0 或更高版本。在那里,您可以使用两个节点,每个节点都符合条件,并且不会出现脑裂问题。

于 2020-10-01T17:38:07.340 回答
0

为了能够投票,masters 必须至少有 2 个。这就是为什么你必须至少有 3 个 master 节点才能让你的集群抵抗一个节点的丢失。

您可以通过将所有其他角色设置为 false 来添加专门的小型主节点。这个节点可以有很少的资源。如本文所述: https ://discuss.elastic.co/t/master-node-resource-requirement/84609 专用主节点需要持久存储,但不是很多。1-2 个 CPU 内核和 2-4GB RAM 通常足以满足较小的部署。由于专用主节点不存储数据,您还可以将堆设置为建议用于数据节点的总 RAM 的更高百分比 (75%-80%)。

于 2020-09-29T15:05:22.900 回答
0

您不应该在集群中有 2 个符合条件的主节点,因为这是一件非常危险的事情,并且可能导致脑裂问题。

主节点不需要太多资源,但由于您只有两个数据节点,您仍然可以在没有专用主节点的情况下生活(但请注意它有缺点)以节省成本。

很简单,从另一个节点删除主角色,你应该很高兴。

于 2020-09-29T15:13:28.310 回答