集群弹性搜索设置(两个主节点)



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

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

我们不可能设置额外的(第三(服务器/实例来充当"主服务器"。

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

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

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

  • org.lasticsearch.cluster.block.ClusterBlockException:被[SERVICE_NAVAILABLE/2/no-master]阻止
  • org.lasticsearch.transport.ConnectTransportException:[xxxxx-xx-2][xx.xx.xx:9300]connect_exception
  • 由以下原因引起:io.nety.channel.AbstractChannel$AnnotatedConnection异常:连接被拒绝:无进一步信息:xx.xx.xx.xx.xxx/xx.xx.xx:9300

简而言之:集群设置中的两个弹性搜索主实例。当一个关闭时,另一个不起作用,因为它无法连接到"master"实例。

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

关于如何解决这个问题,而不必设置一个额外的服务器,即"主服务器"和另两个"从服务器",有什么建议吗?

感谢

若要进行投票,master必须至少为2。这就是为什么如果您希望集群能够抵御一个节点的丢失,那么您必须至少有3个主节点。

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

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

我建议您升级到elasticsearch7.0或更高版本。在那里,你可以用两个节点生活,每个节点都符合条件,大脑分裂的问题不会出现。

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

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

所以,简单地说,从另一个节点中删除master角色,就可以开始了。

最新更新