在Elasticsearch集群中创建索引时,如果您无法评估实际数据量,可能导致设置的主分数很大,但实际业务的数据量并不多,此时您需要减少主分片数,防止因主分片数太多导致集群资源消耗过大或影响查询写入速率等。本文为您介绍如何通过_shrink
API快速减少主分片数。
背景信息
使用Elasticsearch需要密切关注集群分片总数及索引分片数设置。集群分片总数越多,对应分片会占用大量的文件句柄耗用大量的集群资源。同样,索引分片数设置不合理,会对查询和写入均造成潜在的影响。
在创建索引时,如果您无法评估实际数据量,可能导致设置的索引主分数很大,但实际业务数据量并不多。通过reindex减少主分片数耗时太久,elastic提供了
_shrink
API可快速减少索引主分片数。shrink操作不会在原索引上直接缩小分片,基本流程如下:
- 创建一个和原索引配置相同的新索引,新索引主分片比原索引少,所有分片需汇集在一个节点,该节点预留的磁盘空间需要大于原索引主分片上的数据大小。
- 从原索引到新索引创建segments硬链接。
- 对新索引执行恢复操作,类似关闭的索引执行打开操作。
reindex与
_shrink
API的性能测试信息如下:
- 测试环境:
- 数据节点:数量为5个,规格为8核16 GB。
- 索引数据:数据量为182 GB。
- 分片数:原主分片数为30,目标分片数为5,副本数为0。
- 测试结果
方式 耗时 资源占用 reindex 3小时22分钟 集群中有大量的写QPS,索引所占节点资源高。 _shrink
API15分钟 shrink节点计算资源较高。
前提条件
- Elasticsearch集群状态健康,且负载处于正常水位。
- 根据集群数据节点个数、集群磁盘容量等因素,合理评估索引可减少的分片数。详细信息请参见Shard评估。
- 原索引必须处于green状态。
- 原索引的文档总数不能超过2,147,483,519。
- Elasticsearch集群中没有新索引的同名索引。
操作步骤
常见问题
Q:为什么要使用硬链接,而不使用软链接?
A:通过软链接创建索引,待数据写入,将原索引删除后,目标索引数据也会被删除,而硬链接会保证索引的独立性。