如何缩减Elasticsearch索引分片?

Elastic Stack

1 前言

一个问题,一篇文章,一出故事。
笔者集群有5个节点,每个节点总体磁盘空间是4.5T。当前每个接单的平均磁盘使用率是76%,一共5个节点,如果出现一个节点不可用的情况,那么空间会被复制到剩下的4个节点空间,于是笔者做了一个试算。

|  总空间/节点 | 平均使用率/节点 |  平均已用空间/节点  | 平均可用空间/节点 | 可用空间/4节点 | 可用空间/5节点 |
|-------------|----------------|-------------------|------------------|---------------|---------------|
| 4.50 TB     | 76%            | 3.42 TB           | 1.08 TB          | 4.32 TB       | 5.40 TB       |
| 4.50 TB     | 80%            | 3.60 TB           | 0.90 TB          | 3.60 TB       | 4.50 TB       |

从上面表格可知,当每个节点的平均使用达到80%的时候,如果出现一个节点故障,那么四个节点可用空间为3.6TB。此时单个节点的使用空间为理想的平均空3.6TB,此时下线的数据块就会被复制到可用的四个节点,理论上刚好够用,但是现实不能太理想,因为分布的数据不是每个节点绝对平均的。
此时,我们正常情况下可以增加单节点空间或者是加节点,但是笔者本次想通过将旧索切换到温暖阶段,设置为只读并将其缩减为单个分片。
笔者一个数据块目前是存2份,如果将超过半年的数据缩减为单个数据块,理论上可以节省25%的存储空间。
本章在之前的章节已经完成了索引的只读设置,本章将只归纳总结索引的分片数量缩减。

2 最佳实践

2.1 查看设置前的索引状态

GET /_cat/indices/postfix-2024.11.30?v

可见如下显示,

health status index              uuid                   pri rep docs.count docs.deleted store.size pri.store.size dataset.size
green  open   postfix-2024.11.30 kwP_bvB_RK-UssUjYahIvA   1   1     213242            0    136.7mb         68.1mb       68.1mb

2.2 设置副本数量为零

PUT /postfix-2024.11.30/_settings
{
  "settings": {
    "index": {
      "number_of_replicas": 0
    }
  }
}

2.3 查看设置后的索引状态

GET /_cat/indices/postfix-2024.11.30?v

显示示例如下,

health status index              uuid                   pri rep docs.count docs.deleted store.size pri.store.size dataset.size
green  open   postfix-2024.11.30 kwP_bvB_RK-UssUjYahIvA   1   0     213242            0     68.1mb         68.1mb       68.1mb

参阅文档
===================

如何熟悉Elasticsearch的索引生命周期管理?

没有评论

发表回复

Elastic Stack
如何设置Elasticsearch索引为只读?

1 前言 一个问题,一篇文章,一出故事。 基于集群性能的需求,笔者想通过将旧索切换到温暖阶段,设置为 …

Elastic Stack
如何设置Filebeat上传Keycloak的Java类型日志?

1 前言 一个问题,一篇文章,一出故事。 今天遇到需要设置Filebeat上传Java类型的日志,于 …

Elastic Stack
如何临时解决Elasticsearch最大分片数量限制问题?

1 前言 一个问题,一篇文章,一出故事。 笔者今天遇到Elasticsearch最大分片数量限制问题 …