【问题标题】:Number of nodes AWS Elasticsearch节点数 AWS Elasticsearch
【发布时间】:2023-03-27 19:38:01
【问题描述】:

我阅读了文档,但不幸的是我仍然不明白一件事。在创建 AWS Elasticsearch 域时,我需要在“数据节点”部分选择“节点数”。 如果我指定 3 个数据节点和 3 个可用区,它的实际含义是什么? 我有建议:

  1. 我将获得 3 个具有自己的存储 (EBS) 的节点。其中一个节点是主节点,其他 2 个是不同 AZ 中的副本。只是主节点的副本,如果主节点损坏,不会丢失数据。

  2. 我将获得 3 个具有自己的存储 (EBS) 的节点。他们所有人都将独立工作,并且在他们的存储中是不同的数据。所以同时数据可以被不同的节点处理并存储在不同的存储上。

看起来在其他 AZ 应该是副本。但后来我不明白为什么我在不同的节点上有不同的可用空间值

请解释一下它是如何工作的。 非常感谢您提供任何信息或链接。

【问题讨论】:

    标签: elasticsearch amazon-elasticsearch


    【解决方案1】:

    我没有用过 AWS Elasticsearch,但我用过 Cloud Elasticsearch 服务。

    当您使用 3 个可用区(可用区)时,意味着您的集群将使用 3 个区域以使其具有弹性。如果一个区域出现问题,那么该区域中的节点也会出现问题。

    如描述部分所述,如果选择 3 AZ,则需要指定 3 的倍数。如果您有 3 个节点,那么每个 AZ 将有一个区域。如果一个区域有问题,那么那个节点就出问题了,剩下的两个必须从那里接起来。

    现在来回答您的问题。你用这些配置得到了什么。你可以自己检查一下。通过 kibana 或任何 HTTP 客户端使用它

    GET _nodes
    

    检查部分:

    • nodes.roles
    • nodes.attributes

    在各种文档、博客文章等中,您会看到对于生产用途,3 个节点和 3 个可用区是一个很好的起点,以便拥有一个弹性生产集群。

    让我们一步一步来:

    • 您需要偶数个主节点以避免split brain problem
    • 您的集群中需要多个节点才能使其具有弹性(如果节点不可用)。

    通过将这两者结合起来,您至少需要 3 个节点(尚未提及区域)。

    但是有一个主节点和两个数据节点,不会削减它。您需要有 3 个符合主节点资格的节点。因此,如果您有一个节点出局,其他两个仍然可以形成一个仲裁并投票选出一个新的主节点,因此您的集群将在两个节点上运行。但是为了让它工作,你需要设置你的主分片和副本分片,让你的任何两个节点都可以保存你的全部数据。

    示例(为简单起见,我们只有一个索引):

    1. 1 个主,2 个副本。每个节点都拥有一个分片,即 100% 的数据
    2. 3 个初选,1 个复本。每个节点将拥有一个主节点和一个副本(33% 主节点,33% 副本)。两个节点组合在一起(这也是构成仲裁的最小值)将保存您的所有数据(以及更多数据)

    你可以有更多的组合,但你明白了。

    如您所见,分片配置需要与您的节点数量和类型(主合格、仅数据等)相匹配。

    现在,如果您添加可用区域,您就可以解决一个区域出现问题的问题。如果您的集群作为一个整体在一个区域中(一个节点中有 3 个节点),那么如果该区域有问题,那么您的整个集群就出局了。

    如果您设置一个主节点和两个数据节点(不符合主节点资格),则拥有 3 个可用区(甚至 3 个节点)对弹性没有多大帮助,因为如果主节点退出,您的集群将无法选举一个新的,它将一直存在,直到主节点再次启动。现在对于相同的设置,如果数据节点出现故障,那么如果您将分片配置为具有冗余的方式(这意味着剩余的两个节点如果合并则具有所有数据),那么它将正常工作。

    【讨论】:

      【解决方案2】:

      您的答案应涵盖以下三点。

      If i specify 3 data nodes and 3-AZ, what it actually means?

      • 这意味着您的数据和副本将在 3AZ 中可用,而没有一个副本与数据节点位于同一 AZ。检查this 链接。例如,当您说您想要 2 个 AZ 中的 2 个数据节点时。 DN1 将保存在(假设)AZ1 中,它的副本将存储在 AZ2 中。 DN2 将在 AZ2 中,它的副本将在 AZ1 中。

      It looks like in other AZ's should be replicas. but then I don't understand why I have different values of free space on different nodes

      • 这是因为当你给你的 AWS Elasticsearch 一定的存储量时,集群会在所有数据节点中划分指定的存储空间。如果您在具有 2 个数据节点的集群上指定 100G 的存储空间,它将在所有数据节点上平均分配存储空间,即两个数据节点,每个数据节点具有 50G 的可用存储空间。

      • 有时您会看到比您在集群上指定的节点更多。我花了一段时间才理解这种行为。这背后的原因是当您在 AWS ES 上更新这些配置时,需要一些时间来稳定集群。因此,如果您按预期看到更多数据或主节点,请等待一段时间并等待它稳定下来。

      【讨论】:

        【解决方案3】:

        感谢大家的帮助。要了解可用/分配了多少空间,请运行下一个查询:

        GET /_cat/allocation?v
        GET /_cat/indices?v
        GET /_cat/shards?v
        

        所以,如果我创建 3 个节点,而不是创建 3 个具有独立存储的不同节点,它们不是副本。一些数据存储在一个节点中,一些数据存储在另一个节点中。

        【讨论】:

          猜你喜欢
          • 2017-02-12
          • 2014-05-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-07-22
          • 2018-09-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多