【问题标题】:Clustered elasticsearch setup (two master nodes)集群弹性搜索设置(两个主节点)
【发布时间】:2020-09-29 14:53:43
【问题描述】:

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

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

我们无法设置额外的(第 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

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

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

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

谢谢

【问题讨论】:

  • 已经很久了,如果有帮助的话,如果您能投票并接受答案,那就太好了。

标签: elasticsearch dotcms


【解决方案1】:

要能够投票,主人必须至少有 2 人。 这就是为什么如果您希望集群能够抵抗丢失一个节点的情况,您必须至少拥有 3 个主节点。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-10
        • 2022-11-05
        相关资源
        最近更新 更多