elasticsearch - Elasticsearch如何在分片运动中选择目标节点?

标签 elasticsearch elasticsearch-5

我有一个大型ES集群。我通常会收到磁盘警报,因为我们将磁盘警报策略设置为90%[我的ES高水位标记设置为87%]。当我查看分片分配时,我看到节点从高磁盘使用率节点移到某个随机节点,这可以快速解决我的磁盘问题,但通常不会将该分片移至磁盘使用率最低的节点。当达到高水位标记时,是否可以强制Elasticsearch将碎片移动到磁盘使用率最低的节点,而不是将其移动到随机节点?

最佳答案

实际上,ES不使用考虑a lot of factors的随机决策:

  • MaxRetryAllocationDecider-防止碎片分配到
    如果分片分配已重试N次而没有
    成功
  • NodeVersionAllocationDecider-防止从可能不属于的节点进行重定位或分配
    版本兼容。
  • SameShardAllocationDecider-防止在同一节点上分配同一分片的多个实例。
  • DiskThresholdDecider-检查可能将分片分配给的节点是否有足够的磁盘空间。
  • ShardsLimitAllocationDecider-在每个索引或整个节点范围内限制每个节点的分片数量。
  • AwarenessAllocationDecider-基于节点配置中定义的感知键值对控制分片分配。

  • 如您所见,有很多因素,并且没有低磁盘空间检查程序。因此,唯一的解决方案是编写对org.elasticsearch.plugins.ClusterPlugin进行扩展的your own plugin,它将为您提供决策者。但是我认为这不是一个好主意,因为它与ES分配决定者模式的主要设计/思想相矛盾:
  • 任何决策者都可以否决所有先前决策者的决策
  • 任何正解都不会影响后续决定
  • 大多数决策者使用本地节点数据

  • 该策略允许您禁止使用,旨在最大程度地提高集群中选择的自由度。这就是为什么从外面看起来像是随机移动的原因。对于大型且长期存在的集群来说,这是一个不错的策略。

    引入任何类型的偏差都可能导致生产中的灾难性问题。假设您有基于磁盘空间的决策程序,并且一台服务器具有令人难以置信的大硬盘-不久之后,所有分片都将分配到该计算机上。为了解决这个问题,有必要考虑更多重要资源,例如CPU,内存,网络,分片数量等。此外,我们需要针对每个因素提出一个度量标准和权重。

    关于elasticsearch - Elasticsearch如何在分片运动中选择目标节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46616540/

    相关文章:

    elasticsearch - 我如何在没有此错误的情况下创建 pod 在 kubernetes 上使用 elasticsearch

    elasticsearch - Elasticsearch聚合。这些是什么?

    elasticsearch - Elasticsearch查找日期使用范围查询相交和内部

    curl - 不支持内容类型 header [application/x-www-form-urlencoded]

    javascript - 将副本添加到索引模板上的elasticsearch

    pagination - Elasticsearch:获取x个匹配搜索结果的百分比

    elasticsearch - 弹性云(kibana)中的默认用户名以及如何查找密码

    elasticsearch - 在6.5.1和5.6.2之间进行摇晃的跨集群搜索

    elasticsearch - 聚合任务如何从Elasticsearch中的反向索引中受益

    elasticsearch - 如何创建动态日期变量/常量以在 watch 中使用