修复磁盘外数据节点
edit修复数据节点磁盘空间不足
editElasticsearch 使用数据节点在集群内分发您的数据。如果这些节点中的一个或多个空间不足,Elasticsearch 会采取行动在节点之间重新分发您的数据,以确保所有节点都有足够的可用磁盘空间。如果 Elasticsearch 无法在节点中提供足够的可用空间,那么您需要以以下两种方式之一进行干预:
增加数据节点的磁盘容量
edit为了增加集群中数据节点的磁盘容量:
- 登录到 Elastic Cloud 控制台。
-
在 Elasticsearch 服务 面板上,点击与您的部署名称对应的
管理部署
列下的齿轮图标。 -
如果自动扩展功能可用但未启用,请启用它。您可以通过点击如下横幅上的按钮
启用自动扩展
来完成此操作:或者你可以转到
操作 > 编辑部署
,勾选复选框自动扩展
并在页面底部点击保存
。 -
如果自动缩放成功,集群应返回
healthy
状态。如果集群仍然磁盘不足,请检查自动缩放是否已达到其限制。您将通过以下横幅收到通知:或者你可以转到
操作 > 编辑部署
并查找标签限制已达到
,如下所示:如果你看到横幅,点击
更新自动扩展设置
进入编辑
页面。否则,你已经在编辑
页面,点击编辑设置
来增加自动扩展限制。完成更改后,点击页面底部的保存
。
为了增加集群中的数据节点容量,您需要计算所需的额外磁盘空间。
-
首先,获取相关的磁盘阈值,这些阈值将指示应该有多少可用空间。相关的阈值是除冻结层之外所有层级的高水位线,以及冻结层级的冻结洪水位线。以下示例展示了热层中的磁盘短缺情况,因此我们只会获取高水位线:
GET _cluster/settings?include_defaults&filter_path=*.cluster.routing.allocation.disk.watermark.high*
响应将会是这样的:
{ "defaults": { "cluster": { "routing": { "allocation": { "disk": { "watermark": { "high": "90%", "high.max_headroom": "150GB" } } } } } } }
上述内容意味着为了解决磁盘不足的问题,我们需要将磁盘使用率降低到90%以下,或者确保有超过150GB的可用空间,更多关于此阈值如何工作的信息请点击这里。
-
下一步是找出当前的磁盘使用情况,这将指示需要多少额外的空间。为了简单起见,我们的示例只有一个节点,但您可以对超过相关阈值的每个节点应用相同的方法。
GET _cat/allocation?v&s=disk.avail&h=node,disk.percent,disk.avail,disk.total,disk.used,disk.indices,shards
响应将会是这样的:
node disk.percent disk.avail disk.total disk.used disk.indices shards instance-0000000000 91 4.6gb 35gb 31.1gb 29.9gb 111
-
高水位线配置表示磁盘使用率需要降至90%以下。为此,有两种可能的方法:
- 添加一个额外的数据节点到集群(这要求您的集群中有多于一个分片),或者
- 通过增加大约20%的磁盘空间来扩展当前节点的磁盘空间,以允许此节点降至70%。这将为此节点提供足够的空间,以避免很快耗尽空间。
-
在添加另一个数据节点的情况下,集群不会立即恢复。可能需要一些时间将一些分片重新定位到新节点。您可以在此处查看进度:
GET /_cat/shards?v&h=state,node&s=state
如果在响应中分片的状态是
RELOCATING
,这意味着分片仍在移动。等待所有分片变为STARTED
或直到健康磁盘指示器变为green
。
减少数据节点的磁盘使用量
edit为了在不丢失任何数据的情况下减少集群的磁盘使用量,您可以尝试减少索引的副本数量。
减少索引的副本可能会降低搜索吞吐量和数据冗余。然而,这可以快速为集群提供喘息的空间,直到实施更永久的解决方案。
使用 Kibana
- 登录到 Elastic Cloud 控制台。
-
在Elasticsearch Service面板上,点击您的部署名称。
如果您的部署名称被禁用,您的 Kibana 实例可能不健康,在这种情况下,请与 Elastic 支持 联系。如果您的部署不包含 Kibana,您需要做的就是 首先启用它。
- 打开您的部署的侧边导航菜单(位于左上角的 Elastic 标志下方)并转到 Stack Management > Index Management。
-
在所有索引列表中,双击
副本
列以根据副本数量对索引进行排序,从副本数量最多的开始。逐一检查索引,并选择重要性最低且副本数量最多的索引。减少索引的副本可能会降低搜索吞吐量和数据冗余。
-
对于您选择的每个索引,点击其名称,然后在出现的面板上点击
编辑设置
,将index.number_of_replicas
的值减少到所需值,然后点击保存
。 - 继续此过程,直到集群恢复健康。
为了估计需要移除多少个副本,首先你需要估计需要释放的磁盘空间量。
-
首先,获取相关的磁盘阈值,这些阈值将指示应释放多少空间。相关的阈值是除冻结层之外所有层的高水位线,以及冻结层的冻结洪水位线。以下示例演示了热层的磁盘短缺,因此我们只会获取高水位线:
GET _cluster/settings?include_defaults&filter_path=*.cluster.routing.allocation.disk.watermark.high*
响应将会是这样的:
{ "defaults": { "cluster": { "routing": { "allocation": { "disk": { "watermark": { "high": "90%", "high.max_headroom": "150GB" } } } } } } }
上述内容意味着为了解决磁盘短缺问题,我们需要将磁盘使用率降低到90%以下,或者确保可用磁盘空间超过150GB,更多关于此阈值如何工作的信息请点击这里。
-
下一步是找出当前的磁盘使用情况;这将指示应该释放多少空间。为了简单起见,我们的示例只有一个节点,但您可以对超过相关阈值的每个节点应用相同的方法。
GET _cat/allocation?v&s=disk.avail&h=node,disk.percent,disk.avail,disk.total,disk.used,disk.indices,shards
响应将会是这样的:
node disk.percent disk.avail disk.total disk.used disk.indices shards instance-0000000000 91 4.6gb 35gb 31.1gb 29.9gb 111
- 高水位线配置表明磁盘使用率需要降至90%以下。考虑允许一些缓冲,以便节点不会在不久的将来超过阈值。在这个例子中,让我们释放大约7GB。
-
下一步是列出所有索引并选择要减少的副本。
以下命令按副本数量和主存储大小降序排列索引。我们这样做是为了帮助您选择要减少的副本,假设副本越多,删除副本的风险越小,副本越大,释放的空间越多。这没有考虑任何功能需求,因此请将其视为一个简单的建议。
GET _cat/indices?v&s=rep:desc,pri.store.size:desc&h=health,index,pri,rep,store.size,pri.store.size
响应将如下所示:
health index pri rep store.size pri.store.size green my_index 2 3 9.9gb 3.3gb green my_other_index 2 3 1.8gb 470.3mb green search-products 2 3 278.5kb 69.6kb green logs-000001 1 0 7.7gb 7.7gb
-
在上面的列表中,我们看到如果我们减少索引
my_index
和my_other_index
的副本数到1,我们将释放所需的磁盘空间。没有必要减少search-products
和logs-000001
的副本数,因为它们本来就没有任何副本。使用 索引更新设置 API 减少一个或多个索引的副本数:减少索引的副本可能会降低搜索吞吐量和数据冗余。
PUT my_index,my_other_index/_settings { "index.number_of_replicas": 1 }