如果 Elasticsearch 不平衡分区之间的分片,为什么它允许您在 .yml 文件中指定多个磁盘分区?

问题描述

这是我之前here提出的问题的后续。

我有一个包含三个数据节点和一个头节点的集群。每个数据节点上的硬盘驱动器具有三个分区:/data1/data2/data3。我在头节点上配置了我的 elasticsearch.yml,如下所示:

path.data: /data1/elasticsearch,/data2/elasticsearch_2,/data3/elasticsearch_3

我现有的索引存储在每个节点上的 /data1/elasticsearch 中。但是,当我禁用复制并尝试为我的新索引加载数据时,我触发了 low watermark cluster setting; /data1 空间不足。

查看 Elasticsearch 文档,我发现 this warning

Elasticsearch 不会在节点的数据路径之间平衡分片。单个路径中的高磁盘使用率会触发整个节点的高磁盘使用率水印。如果触发,即使节点的其他路径有可用磁盘空间,Elasticsearch 也不会向节点添加分片。如果您需要额外的磁盘空间,我们建议您添加新节点而不是额外的数据路径。

所以我的问题是:如果 Elasticsearch 不为节点上的下一个空路径分配分片,为什么它允许您指定多个路径进行数据存储?

解决方法

不再允许使用多个数据路径的选项,此功能存在一些问题,例如您提到的问题以及在同一节点上使用多个磁盘时 kibana 可能显示错误可用空间的事实。

根据此github issue,计划在 7.13 版中弃用并在 8.0 版中删除使用多个数据路径。

根据同一个问题:

(...) 多数据路径是一项成本非常高的功能(其设计中有许多错误和缺陷),用户相对较少,而且最重要的是,在 Elasticsearch 之外有更好的替代标准。