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

原文链接 : [https://www.elastic.co/guide/en/elasticsearch/reference/5.4/disk-allocator.html](https://www.elastic.co/guide/en/elasticsearch/reference/5.4/disk-allocator.html)

译文链接 : [http://www.apache.wiki/pages/viewpage.action?pageId=10029750](http://www.apache.wiki/pages/viewpage.action?pageId=10029750)

贡献者 : [小瑶](/display/~chenyao)，[ApacheCN](/display/~apachecn)，[Apache中文网](/display/~apachechina)

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

以下是可以在 **elasticsearch.yml** 配置文件中配置的配置，或者在具有[ cluster-update-settings API](/display/Elasticsearch/Cluster+Update+Settings) 的实时集群上动态更新的设置：

**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** 空闲中有 **50b** （ **50％** 使用），另一个使用 **40b out of 50b** 空闲（ **80％** 使用），它将看到节点的磁盘使用率为 **150b** 中的 **90b** ）。 在 **2.0.0** 中，最小和最大磁盘使用率分别跟踪。