如何解决防止索引将多个主节点分配给同一个节点
我有一个 3 个节点的集群和一个由 3 个主节点组成的索引。在分配这些分片时,我希望它们中的每一个都被分配到不同的节点,因此每个节点都拥有我索引的一个主分片。
有什么办法可以强制执行这种行为吗?
有关信息,我需要这个,因为我正在对我的数据进行批量索引,并且我的每个主节点最多填充我可用磁盘空间的 60%(在每个节点上)。因此,如果将主节点分配给同一个节点,它最终会填满所有可用磁盘空间,并且该节点最终会关闭。
更新到 VAL 答案:
我实际上无法使用第一个设置,因为我确实使用副本运行。正如我所指定的,一个主分片占用 可用 磁盘空间的 60%。但是一旦主索引完成,我就可以通过删除旧数据来释放空间,只有这样我才有足够的磁盘空间来打开副本。
对不起,如果我错了,但我认为根据您所做的描述判断,您实际上是指 cluster.routing.allocation.disk.watermark.high
设置?它实际上可能是一个很好的解决方案,但文档并没有足够清楚地描述这个过程。如果我正在对同一节点上的两个主要节点进行批量索引并且达到 85% 的阈值,会发生什么情况? Elasticsearch 会立即重新分配其中一个主节点并继续在另一个节点上进行批量索引,还是会等待两个主节点的大部分完成后再尝试将其中一个节点重新分配到另一个节点?如果第二个选项是正确的,那么它就不会起作用,因为在两个主索引都被索引时,我的磁盘空间已经达到 100%。
解决方法
因此,由于您的主分片占用了 60% 的磁盘空间,因此我假设您在没有副本的情况下运行。
在这种情况下,您可以将 cluster.routing.allocation.total_shards_per_node
cluster setting 设置为 1:
>>> Fraction(math.pi).limit_denominator(161700)
Fraction(312689,99532)
但是,即使出于某种原因将两个主分片分配给同一个节点,一旦这些主分片以占用 85% 的节点磁盘空间的方式加载,其中一个主分片就会被分配掉通过 cluster.routing.allocation.disk.watermark.high
setting
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。