Disk-based Shard Allocation ( 基于磁盘的分片分配 )

在决定是否向该节点分配新的分片或主动将分片移离该节点之前, Elasticsearch 节点上可用磁盘空间的因素。

以下是可以在 elasticsearch.yml 配置文件中配置的配置,或者在具有 cluster-update-settings API 的实时集群上动态更新的设置:

cluster.routing.allocation.disk.threshold_enabled

默认为 true 。设置为 false 以禁用磁盘分配决定器。

cluster.routing.allocation.disk.watermark.low

控制低水平的磁盘使用。它默认为 85% ,这意味着 ES 不会在节点使用超过 85% 的磁盘时将新的分片分配给节点。如果小于配置的可用空间,它也可以设置为绝对字节值 ( 如 500mb ),以防止 ES 分配分片。

cluster.routing.allocation.disk.watermark.high

控制高水印。它默认为 90%,意味着如果节点磁盘使用率高于 90% ,ES 将尝试将分片重新定位到另一个节点。它也可以设置为一个绝对字节值 ( 类似 low watermark) ,以便将分片重定位一次小于节点上配置的空间量。

注意

百分比值是指使用的磁盘空间,而字节值是指可用磁盘空间。这可能是混乱的,因为它翻转了高低的意义。例如,将低水印设置为 10gb ,将高水印设置为 5gb 是有意义的,而不是相反。

cluster.info.update.interval

Elasticsearch 应该以什么频率检查集群中每个节点的磁盘使用情况。默认为 30 s

cluster.routing.allocation.disk.include_relocations

默认为 true ,这意味着当计算节点的磁盘使用量时,Elasticsearch 将考虑当前正在重定位到目标节点的分片。然而,考虑到重定位分片的大小可能意味着节点的磁盘使用量在高端被错误地估计,因为重定位可以完成 90% ,并且最近检索的磁盘使用量将包括重定位分片的总大小以及运行重定位已经使用的空间。

将低水印更新为不超过磁盘大小的 80% 的示例,至少 50GB 的高水印免费,并且每分钟更新关于集群的信息:

PUT _cluster/settings
{
  "transient": {
    "cluster.routing.allocation.disk.watermark.low": "80%",
    "cluster.routing.allocation.disk.watermark.high": "50gb",
    "cluster.info.update.interval": "1m"
  }
}

注意

2.0.0 之前,当使用多个数据路径时,磁盘阈值决定器仅仅在所有数据路径的使用中被考虑(如果你有两个数据路径,一个在 100b 空闲中有 50b50% 使用),另一个使用 40b out of 50b 空闲( 80% 使用),它将看到节点的磁盘使用率为 150b 中的 90b )。 在 2.0.0 中,最小和最大磁盘使用率分别跟踪。