【问题标题】:Prevent an index from allocating multiple primaries to same node防止索引将多个主节点分配给同一节点
【发布时间】:2021-06-27 11:56:29
【问题描述】:

我有一个 3 个节点的集群和一个由 3 个主节点组成的索引。在分配这些分片时,我希望将它们中的每一个都分配给不同的节点,因此每个节点都恰好拥有我索引的一个主分片。

有什么办法可以强制执行这种行为吗?

有关信息,我需要这个,因为我正在对我的数据进行批量索引,并且我的每个主索引都占了我可用磁盘空间的 60%(在每个节点上)。因此,如果将主节点分配给同一个节点,它最终会填满所有可用的磁盘空间,并且节点最终会宕机。

更新到 VAL 答案:

我实际上不能使用第一个设置,因为我确实使用副本运行。正如我所指定的,一个主分片占用了 AVAILABLE 磁盘空间的 60%。但是一旦主索引索引完成,我可以通过删除旧数据来释放空间,只有这样我才有足够的磁盘空间来打开副本。

对不起,如果我错了,但从您所做的描述来看,我认为您实际上是指 cluster.routing.allocation.disk.watermark.high 设置?它实际上可能是一个很好的解决方案,但文档没有足够清楚地描述该过程。如果我正在对同一节点上的两个主索引进行批量索引并且达到 85% 的阈值,会发生什么情况? Elasticsearch 会立即重新分配其中一个主节点并继续在另一个节点上进行批量索引,还是会等待两个主节点的大部分完成,然后再尝试将其中一个主节点重新分配给另一个节点?如果第二个选项是正确的,那么它将不起作用,因为我的磁盘空间在两个主索引都被索引时已经达到 100%。

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    因此,由于您的主分片占用了 60% 的磁盘空间,我假设您在没有副本的情况下运行。

    在这种情况下,您可以将cluster.routing.allocation.total_shards_per_node cluster setting 设置为 1:

    PUT /_cluster/settings
    {
      "persistent" : {
        "cluster.routing.allocation.total_shards_per_node" : 1
      }
    }
    

    但是,即使出于某种原因将两个主分片分配给同一个节点,一旦这些主分片以占用 85% 节点磁盘空间的方式加载,其中一个主分片将被分配出去通过cluster.routing.allocation.disk.watermark.high setting 到另一个节点

    【讨论】:

    • 我不得不更新我的帖子来回答你,因为没有足够的字符。请看一看。
    • 好的,感谢您的精确。如果您仅在批量上传完成后打开副本,并且将设置增加到 2,则第一个设置将起作用。关于高水位线,一旦达到,ES 将重新分配主分片 立即,不会等待批量完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 2020-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多