降低数据节点的磁盘使用率
编辑降低数据节点的磁盘使用率
编辑为了在不丢失任何数据的情况下降低集群中的磁盘使用率,您可以尝试减少索引的副本数。
减少索引的副本数可能会降低搜索吞吐量和数据冗余。但是,它可以快速为集群提供喘息空间,直到找到更永久的解决方案。
使用 Kibana
- 登录 Elastic Cloud 控制台。
-
在 Elasticsearch 服务 面板中,点击您的部署名称。
如果您的部署名称被禁用,则您的 Kibana 实例可能不健康,在这种情况下,请联系 Elastic 支持。如果您的部署不包含 Kibana,您只需 先启用它。
- 打开部署的侧边导航菜单(位于左上角的 Elastic 徽标下方),然后转到 堆栈管理 > 索引管理。
-
在所有索引列表中,点击
Replicas
列两次,以根据索引的副本数量对索引进行排序,从副本数量最多的开始。浏览索引,逐个选择重要性最低且副本数量较高的索引。减少索引的副本数可能会降低搜索吞吐量和数据冗余。
-
对于您选择的每个索引,点击其名称,然后在出现的面板中点击
Edit settings
,将index.number_of_replicas
的值减少到所需的值,然后点击Save
。 - 继续此过程,直到集群恢复健康状态。
为了估计需要删除多少个副本,首先需要估计需要释放多少磁盘空间。
-
首先,检索相关的磁盘阈值,这些阈值将指示应释放多少空间。相关的阈值是除冻结层之外的所有层的 高水位线 和冻结层的 冻结洪水阶段水位线。以下示例演示了热层中的磁盘短缺,因此我们只会检索高水位线。
resp = client.cluster.get_settings( include_defaults=True, filter_path="*.cluster.routing.allocation.disk.watermark.high*", ) print(resp)
response = client.cluster.get_settings( include_defaults: true, filter_path: '*.cluster.routing.allocation.disk.watermark.high*' ) puts response
const response = await client.cluster.getSettings({ include_defaults: "true", filter_path: "*.cluster.routing.allocation.disk.watermark.high*", }); console.log(response);
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 的可用空间,有关此阈值的工作原理,请阅读 此处。
-
下一步是找出当前的磁盘使用情况;这将指示应释放多少空间。为简单起见,我们的示例只有一个节点,但您可以对超过相关阈值的每个节点应用相同的操作。
resp = client.cat.allocation( v=True, s="disk.avail", h="node,disk.percent,disk.avail,disk.total,disk.used,disk.indices,shards", ) print(resp)
response = client.cat.allocation( v: true, s: 'disk.avail', h: 'node,disk.percent,disk.avail,disk.total,disk.used,disk.indices,shards' ) puts response
const response = await client.cat.allocation({ v: "true", s: "disk.avail", h: "node,disk.percent,disk.avail,disk.total,disk.used,disk.indices,shards", }); console.log(response);
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。
-
下一步是列出所有索引并选择要减少哪些副本。
以下命令按副本数量和主存储大小降序排列索引。我们这样做是为了帮助您选择要减少哪些副本,假设副本越多,如果您删除副本的风险越小,副本越大,释放的空间就越多。这没有考虑任何功能要求,因此请将其视为一个建议。
resp = client.cat.indices( v=True, s="rep:desc,pri.store.size:desc", h="health,index,pri,rep,store.size,pri.store.size", ) print(resp)
response = client.cat.indices( v: true, s: 'rep:desc,pri.store.size:desc', h: 'health,index,pri,rep,store.size,pri.store.size' ) puts response
const response = await client.cat.indices({ v: "true", s: "rep:desc,pri.store.size:desc", h: "health,index,pri,rep,store.size,pri.store.size", }); console.log(response);
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 减少一个或多个索引的副本。减少索引的副本数可能会降低搜索吞吐量和数据冗余。
resp = client.indices.put_settings( index="my_index,my_other_index", settings={ "index.number_of_replicas": 1 }, ) print(resp)
response = client.indices.put_settings( index: 'my_index,my_other_index', body: { 'index.number_of_replicas' => 1 } ) puts response
const response = await client.indices.putSettings({ index: "my_index,my_other_index", settings: { "index.number_of_replicas": 1, }, }); console.log(response);
PUT my_index,my_other_index/_settings { "index.number_of_replicas": 1 }