集群的Elasticsearch设置(两个主节点)

时间:2020-09-29 14:53:43

标签: elasticsearch dotcms

我们当前正在建立一个具有两个Elasticsearch实例(集群服务器)的环境。

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

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

因此,我们已经将实例配置为主节点和数据节点。因此,实例1是master&node,实例2也是master&node。

当两个实例都启动并运行时,同步工作正常。但是,当一个实例关闭时,另一个实例将继续尝试与关闭的实例连接,这显然会失败,因为该实例关闭了。因此,处于运行状态的节点也不再起作用,因为即使实例本身也是一个“主节点”,它也无法连接到其“主节点”节点(处于关闭状态的节点)。

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

  • 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
简而言之:集群设置中的两个Elasticsearch主实例。当其中一个发生故障时,另一个则无法运行,因为它无法连接到“主”实例。

所需结果:如果其中一个主实例已关闭,则另一个应继续运行(没有抛出错误)。

关于如何解决此问题的任何建议,而不必设置额外的服务器(即“主服务器”,另2个为“从服务器”)?

谢谢

3 个答案:

答案 0 :(得分:0)

要能够投票,硕士必须至少有2名。 这就是为什么要让群集抵抗一个节点丢失的原因,必须至少拥有3个主节点。

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

答案 1 :(得分:0)

您不应在集群中拥有2个符合条件的主节点,因为这是非常危险的事情,并且可能导致大脑分裂问题,请访问split brain issue and how to avoid it

参阅此博客。

主节点并不需要太多资源,但是由于您只有两个数据节点,因此仍然可以在没有专用主节点的情况下生存(但请注意,这样做有缺点)只是为了节省成本。

因此,简单地,从另一个节点上删除主角色,您应该就很好了。

答案 2 :(得分:0)

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

我建议您升级到Elasticsearch 7.0或更高版本。您可以在那里拥有两个节点,每个节点都符合资格,并且不会出现脑裂问题。