--- title: "Easysearch 节点磁盘不足应对方法" date: 2025-03-04 lastmod: 2025-03-04 description: "Easysearch通过磁盘水位线控制磁盘空间,防止索引占满。本文探讨提前处理方法:增加资源(添加节点、扩充磁盘)、释放空间(删除无用索引、减少副本、使用可搜索快照)及优化索引空间(启用压缩、优化mapping与字段、使用rollup功能)。" tags: ["Easysearch"] summary: "Easyearch 为了防止索引将磁盘空间完全占满,使用磁盘水位线进行磁盘空间控制。之前有 文章提过不同水位线的作用,以及如何使用 INFINI Console 提前进行告警,提前进行处理。本篇主要探讨提前处理的情况。 一、增加资源 # 如果资源充裕,可考虑为 Easysearch 集群扩充资源: 添加新的数据节点 扩充节点后,集群会自动进行数据平衡,可用下面的命令查看进度 GET /_cat/shards?v&h=state,node&s=state 如果响应中分片的状态是 RELOCATING ,则表示分片仍在移动。 扩充现有数据节点磁盘容量 扩充完后可查看磁盘利用率下降情况 GET _cat/allocation?v&s=disk.avail&h=node,disk.percent,disk.avail,disk.total,disk.used,disk.indices,shards 二、释放磁盘空间 # 如果无资源可添加,则考虑减少磁盘消耗: 删除无用索引 建议使用 索引生命周期进行管理,自动删除过期索引。 删除多余副本 有些业务索引可能会有多分副本,可酌情缩减副本数,降低磁盘消耗。以下命令按副本数量和主存储大小的降序排列索引。 GET _cat/indices?v&s=rep:desc,pri.store.size:desc&h=health,index,pri,rep,store.size,pri.store.size 可搜索快照 对于有些数据平时不常用,但需要长期保留的,建议使用 可搜索快照功能降低磁盘消耗。 三、索引空间优化 # 启用 ZSTD 压缩及 source_reuse 功能 Easysearch 支持 ZSTD 和 source_reuse 功能,对比默认的压缩算法,可大幅降低磁盘消耗。 可在创建索引时启用 ZSTD 和 source_reuse 功能,也可通过索引模板来进行设置,参考 文档。 PUT test-index { "settings": { "index." --- Easyearch 为了防止索引将磁盘空间完全占满,使用磁盘水位线进行磁盘空间控制。之前有[文章](https://infinilabs.cn/blog/2025/easysearch-disk-watermark-tips/)提过不同水位线的作用,以及如何使用 INFINI Console 提前进行告警,提前进行处理。本篇主要探讨提前处理的情况。 ## 一、增加资源 如果资源充裕,可考虑为 Easysearch 集群扩充资源: 1. 添加新的数据节点 扩充节点后,集群会自动进行数据平衡,可用下面的命令查看进度 ```plain GET /_cat/shards?v&h=state,node&s=state ``` 如果响应中分片的状态是 RELOCATING ,则表示分片仍在移动。 2. 扩充现有数据节点磁盘容量 扩充完后可查看磁盘利用率下降情况 ```plain GET _cat/allocation?v&s=disk.avail&h=node,disk.percent,disk.avail,disk.total,disk.used,disk.indices,shards ``` ## 二、释放磁盘空间 如果无资源可添加,则考虑减少磁盘消耗: 1. 删除无用索引 建议使用[索引生命周期](https://docs.infinilabs.com/easysearch/main/docs/references/management/ilm_api/)进行管理,自动删除过期索引。 2. 删除多余副本 有些业务索引可能会有多分副本,可酌情缩减副本数,降低磁盘消耗。以下命令按副本数量和主存储大小的降序排列索引。 ```plain GET _cat/indices?v&s=rep:desc,pri.store.size:desc&h=health,index,pri,rep,store.size,pri.store.size ``` 3. 可搜索快照 对于有些数据平时不常用,但需要长期保留的,建议使用[可搜索快照](https://infinilabs.cn/blog/2024/searchable-snapshot-read-this-article/)功能降低磁盘消耗。 ## 三、索引空间优化 1. 启用 ZSTD 压缩及 source_reuse 功能 Easysearch 支持 ZSTD 和 source_reuse 功能,对比默认的压缩算法,可大幅降低磁盘消耗。 可在创建索引时启用 ZSTD 和 source_reuse 功能,也可通过索引模板来进行设置,参考[文档](https://docs.infinilabs.com/easysearch/main/docs/references/document/index-compression/#%e7%b4%a2%e5%bc%95%e5%8e%8b%e7%bc%a9)。 ```plain PUT test-index { "settings": { "index.codec": "ZSTD", "index.source_reuse": "true" } } ``` ⚠️ 注意:当索引里包含 nested 类型映射,或插件额外提供的数据类型时,不能启用 source_reuse,例如 knn 索引。 2. 索引优化 - mapping 优化 避免使用默认的 mapping 类型,因为字符串类型的数据将得到 text 和 keyword 两个类型的 mapping。 - 字段优化 统计指定索引每个字段的访问次数。 ```plain GET metrics/_field_usage_stats ``` 分析指定索引各个字段占用磁盘的大小。 ```plain POST metrics/_disk_usage?run_expensive_tasks=true ``` 结合以上信息进一步优化各个字段,如关闭不用的功能等 3. 使用 rollup 功能 对于时序场景类的数据,往往会有大量的非常详细的聚合指标,随着时间的图推移,存储将持续增长。汇总功能可以将旧的、细粒度的数据汇总为粗粒度格式以进行长期存储。通过将数据汇总到一个单一的文档中,可以大大降低历史数据的存储成本。 Easysearch 的 [rollup](https://docs.infinilabs.com/easysearch/main/docs/references/management/rollup_api/) 具备一些独特的优势,可以自动对 rollup 索引进行滚动而不用依赖其他 API 去单独设置,并且在进行聚合查询时支持直接搜索原始索引,做到了对业务端的搜索代码完全兼容,从而对用户无感知。 如果有问题,欢迎加我微信沟通。 {{% load-img "/img/blog/banner/about_yangf.png" "" %}}