news 2026/2/10 7:24:42

Elasticsearch 存储水位线测试验证

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Elasticsearch 存储水位线测试验证

目录标题

  • Elasticsearch 存储水位线测试验证
    • 环境准备
    • 一、水位线说明
      • 默认水位线
      • 注意事项:本地存储场景
    • 二、查看水位线设置
      • 方式1:查看当前有效值(推荐)
      • 方式2:查看所有默认值
      • 方式3:查看磁盘使用情况
    • 三、修改水位线
      • 3.1 永久修改(重启保留)
      • 3.2 临时修改(重启失效)
      • 3.3 恢复默认值
      • 3.4 支持的格式
    • 四、只读索引解锁
      • 4.1 查看只读索引
      • 4.2 解锁单个索引
      • 4.3 批量解锁所有索引
      • 4.4 单个解锁 vs 批量解锁
    • 五、完整测试验证流程
      • 5.1 准备测试索引
      • 5.2 降低水位线触发只读
      • 5.3 验证只读状态
      • 5.4 解锁索引并验证
      • 5.5 恢复默认水位线
      • 5.6 清理测试数据
    • 六、常见问题
      • Q1: 水位线设置报错 "high disk watermark more than flood stage"
      • Q2: 磁盘空间已释放,索引仍然只读
      • Q3: PVC显示20G,ES认为磁盘充足
    • 七、验证记录
      • 测试环境信息

Elasticsearch 存储水位线测试验证

环境准备

# 加载环境exportKUBECONFIG=/bpx/.145-admin.conf# 获取ES密码exportES_PASS=$(kubectl get secret es-0c1a4a65-es-elastic-user-nqfusion-admin-ojsonpath='{.data.elastic}'|base64-d)echo$ES_PASS# 检查集群状态kubectlexec-nqfusion-admin es-0c1a4a65-es-data-0-celasticsearch --\curl-uelastic:$ES_PASS"http://localhost:9200/_cluster/health?pretty"

一、水位线说明

默认水位线

阈值百分比含义
low85%低于此值时开始重新平衡分片
high90%高于此值时停止分配新分片
flood_stage95%高于此值时索引变为只读

注意事项:本地存储场景

使用csi-localpv/hostPath时:

  • ES看到的磁盘容量= 底层物理磁盘总容量(如200G)
  • PVC限制= K8s分配的软限制(如20Gi)
  • 水位线计算基于物理磁盘,而非PVC限制
PVC: 20Gi ──────────────────────────┐ 实际限制 物理磁盘: 200G ──────────────────────────────────────────────┐ ES用于水位线计算

二、查看水位线设置

方式1:查看当前有效值(推荐)

kubectlexec-nqfusion-admin es-0c1a4a65-es-data-0-celasticsearch --\curl-uelastic:$ES_PASS"http://localhost:9200/_cluster/settings?flat_settings=true"

输出示例:

{"persistent":{},"transient":{"cluster.routing.allocation.disk.watermark.flood_stage":"95%","cluster.routing.allocation.disk.watermark.high":"90%","cluster.routing.allocation.disk.watermark.low":"85%"}}
  • persistent: 永久设置(重启保留)
  • transient: 临时设置(重启失效)
  • 两者为空表示使用默认值

方式2:查看所有默认值

kubectlexec-nqfusion-admin es-0c1a4a65-es-data-0-celasticsearch --\curl-uelastic:$ES_PASS"http://localhost:9200/_cluster/settings?include_defaults=true&flat_settings=true"|\grep-E"cluster.routing.allocation.disk.watermark"

方式3:查看磁盘使用情况

# 查看各节点磁盘使用率kubectlexec-nqfusion-admin es-0c1a4a65-es-data-0-celasticsearch --\curl-uelastic:$ES_PASS"http://localhost:9200/_cat/allocation?v&h=name,disk.used_percent,disk.total"# 查看详细分配信息kubectlexec-nqfusion-admin es-0c1a4a65-es-data-0-celasticsearch --\curl-uelastic:$ES_PASS"http://localhost:9200/_cat/allocation?v"

三、修改水位线

3.1 永久修改(重启保留)

kubectlexec-nqfusion-admin es-0c1a4a65-es-data-0-celasticsearch --\curl-uelastic:$ES_PASS-XPUT"http://localhost:9200/_cluster/settings"\-H"Content-Type: application/json"\-d'{ "persistent": { "cluster.routing.allocation.disk.watermark.low": "80%", "cluster.routing.allocation.disk.watermark.high": "85%", "cluster.routing.allocation.disk.watermark.flood_stage": "90%" } }'

3.2 临时修改(重启失效)

kubectlexec-nqfusion-admin es-0c1a4a65-es-data-0-celasticsearch --\curl-uelastic:$ES_PASS-XPUT"http://localhost:9200/_cluster/settings"\-H"Content-Type: application/json"\-d'{ "transient": { "cluster.routing.allocation.disk.watermark.low": "80%", "cluster.routing.allocation.disk.watermark.high": "85%", "cluster.routing.allocation.disk.watermark.flood_stage": "90%" } }'

3.3 恢复默认值

kubectlexec-nqfusion-admin es-0c1a4a65-es-data-0-celasticsearch --\curl-uelastic:$ES_PASS-XPUT"http://localhost:9200/_cluster/settings"\-H"Content-Type: application/json"\-d'{ "transient": { "cluster.routing.allocation.disk.watermark.low": null, "cluster.routing.allocation.disk.watermark.high": null, "cluster.routing.allocation.disk.watermark.flood_stage": null } }'

3.4 支持的格式

# 百分比"low":"85%"# 绝对值(剩余空间)"low":"500gb""low":"15gb"# 组合(两者都满足才触发)"low":"85%, 500gb"

四、只读索引解锁

4.1 查看只读索引

kubectlexec-nqfusion-admin es-0c1a4a65-es-data-0-celasticsearch --\curl-uelastic:$ES_PASS"http://localhost:9200/_all/_settings?pretty"|\grep-B2"read_only_allow_delete"

输出示例:

"blocks":{"read_only_allow_delete":"true"}

4.2 解锁单个索引

kubectlexec-nqfusion-admin es-0c1a4a65-es-data-0-celasticsearch --\curl-uelastic:$ES_PASS-XPUT\"http://localhost:9200/<index_name>/_settings"\-H"Content-Type: application/json"\-d'{"index.blocks.read_only_allow_delete": null}'

用途:只解锁指定的索引,其他索引不受影响

4.3 批量解锁所有索引

kubectlexec-nqfusion-admin es-0c1a4a65-es-data-0-celasticsearch --\curl-uelastic:$ES_PASS-XPUT\"http://localhost:9200/_all/_settings"\-H"Content-Type: application/json"\-d'{"index.blocks.read_only_allow_delete": null}'

用途:一次性解锁所有索引(注意:确保磁盘空间已释放)

4.4 单个解锁 vs 批量解锁

方式范围适用场景
单个索引只解锁指定索引精确控制,部分索引恢复写入
批量解锁解锁所有索引磁盘已清理,快速恢复所有索引

五、完整测试验证流程

5.1 准备测试索引

kubectlexec-nqfusion-admin es-0c1a4a65-es-data-0-celasticsearch --\curl-uelastic:$ES_PASS-XPUT"http://localhost:9200/test_watermark"\-H"Content-Type: application/json"\-d'{"settings": {"number_of_shards": 1, "number_of_replicas": 0}}'

5.2 降低水位线触发只读

# 设置 flood_stage 为 30%(低于当前使用率)kubectlexec-nqfusion-admin es-0c1a4a65-es-data-0-celasticsearch --\curl-uelastic:$ES_PASS-XPUT"http://localhost:9200/_cluster/settings"\-H"Content-Type: application/json"\-d'{ "transient": { "cluster.routing.allocation.disk.watermark.low": "25%", "cluster.routing.allocation.disk.watermark.high": "28%", "cluster.routing.allocation.disk.watermark.flood_stage": "30%" } }'

5.3 验证只读状态

# 等待ES检测(约30秒)sleep30# 检查集群块kubectlexec-nqfusion-admin es-0c1a4a65-es-data-0-celasticsearch --\curl-uelastic:$ES_PASS"http://localhost:9200/_cluster/state?pretty"|grep-A3"blocks"# 尝试写入(应该失败)kubectlexec-nqfusion-admin es-0c1a4a65-es-data-0-celasticsearch --\curl-uelastic:$ES_PASS-XPOST"http://localhost:9200/test_watermark/_doc"\-H"Content-Type: application/json"\-d'{"message": "test"}'

预期错误:

{"error":{"type":"cluster_block_exception","reason":"index blocked by: [TOO_MANY_REQUESTS/12/disk usage exceeded flood-stage watermark...]"},"status":429}

5.4 解锁索引并验证

# 批量解锁所有索引kubectlexec-nqfusion-admin es-0c1a4a65-es-data-0-celasticsearch --\curl-uelastic:$ES_PASS-XPUT"http://localhost:9200/_all/_settings"\-H"Content-Type: application/json"\-d'{"index.blocks.read_only_allow_delete": null}'# 验证写入成功kubectlexec-nqfusion-admin es-0c1a4a65-es-data-0-celasticsearch --\curl-uelastic:$ES_PASS-XPOST"http://localhost:9200/test_watermark/_doc"\-H"Content-Type: application/json"\-d'{"message": "test after unlock"}'

5.5 恢复默认水位线

kubectlexec-nqfusion-admin es-0c1a4a65-es-data-0-celasticsearch --\curl-uelastic:$ES_PASS-XPUT"http://localhost:9200/_cluster/settings"\-H"Content-Type: application/json"\-d'{ "transient": { "cluster.routing.allocation.disk.watermark.low": null, "cluster.routing.allocation.disk.watermark.high": null, "cluster.routing.allocation.disk.watermark.flood_stage": null } }'

5.6 清理测试数据

kubectlexec-nqfusion-admin es-0c1a4a65-es-data-0-celasticsearch --\curl-uelastic:$ES_PASS-XDELETE"http://localhost:9200/test_watermark*"

六、常见问题

Q1: 水位线设置报错 “high disk watermark more than flood stage”

原因:flood_stage 必须大于 high,high 必须大于 low

解决:同时设置三个值,确保 low < high < flood_stage

# 错误示例"flood_stage":"30%"# high默认是90%,报错# 正确示例"low":"25%","high":"28%","flood_stage":"30%"

Q2: 磁盘空间已释放,索引仍然只读

原因:ES不会自动解除只读锁,需要手动解锁

解决:执行解锁命令

curl-XPUT"_all/_settings"-d'{"index.blocks.read_only_allow_delete": null}'

Q3: PVC显示20G,ES认为磁盘充足

原因:使用本地存储时,ES看到的是物理磁盘总容量

建议:监控PVC使用量,不要仅依赖ES水位线


七、验证记录

测试项测试时间结果备注
默认水位线查询2025-01-04✅ 通过使用默认值 low=85%, high=90%, flood_stage=95%
水位线修改(persistent)-⏭️ 跳过使用 transient 方式测试即可
水位线修改(transient)2025-01-04✅ 通过成功修改为 low=80%, high=85%, flood_stage=90%
只读锁触发2025-01-04✅ 通过设置 flood_stage=25% 后成功触发,写入返回 429 错误
单个索引解锁2025-01-04✅ 通过解锁 test_watermark 索引后写���成功
批量索引解锁2025-01-04✅ 通过使用 _all 批量解锁所有索引成功
恢复默认值2025-01-04✅ 通过transient 设置恢复为空,使用默认值

测试环境信息

  • ES 集群: es-0c1a4a65
  • 集群状态: green (3节点)
  • 测试索引: test_watermark
  • 初始磁盘使用率: 33%-39%
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/9 18:54:39

栈溢出攻击原理与防御

栈溢出攻击原理与防御 栈的结构与特性 栈&#xff08;Stack&#xff09;是用于存储函数调用过程中局部变量、参数、返回地址以及保存的寄存器值的内存区域。每次函数调用时&#xff0c;系统会在栈上分配一个栈帧。栈的生长方向是从高地址向低地址&#xff0c;而缓冲区数据的写入…

作者头像 李华
网站建设 2026/2/8 1:43:28

安装包打包规范:为GLM-TTS制作一键部署发行版

安装包打包规范&#xff1a;为GLM-TTS制作一键部署发行版 在语音合成技术飞速演进的今天&#xff0c;一个令人兴奋的趋势正在发生&#xff1a;我们不再需要为每个说话人重新训练模型&#xff0c;也能生成高度逼真的个性化语音。GLM-TTS 正是这一趋势下的代表性成果——它基于大…

作者头像 李华
网站建设 2026/2/9 14:21:15

元宇宙应用场景:在VR环境中使用个性化语音合成

元宇宙中的声音人格&#xff1a;VR环境下的个性化语音合成实践 在虚拟现实&#xff08;VR&#xff09;世界中&#xff0c;当你的数字分身第一次开口说话——是机械单调的合成音&#xff0c;还是带着你真实语调、情绪起伏的声音&#xff1f;这个看似微小的差异&#xff0c;恰恰决…

作者头像 李华
网站建设 2026/2/8 16:34:43

从本地到云端:我亲历的AI模型部署之路,这笔“账”你得这么算

每次和同行、客户聊起AI项目的落地&#xff0c;话题总会不可避免地拐到一个核心抉择上&#xff1a;这模型&#xff0c;咱们是放在自己机房里跑&#xff0c;还是扔到云上去&#xff1f;这问题听起来像是技术选型&#xff0c;但在我这些年摸爬滚打的经历里&#xff0c;它早就不止…

作者头像 李华
网站建设 2026/2/9 14:21:59

GLM-TTS KV Cache加速原理与实际性能增益测试

GLM-TTS KV Cache加速原理与实际性能增益测试 在当前AI语音合成技术快速演进的背景下&#xff0c;零样本语音克隆&#xff08;Zero-shot Voice Cloning&#xff09;正逐步从实验室走向实际应用。GLM-TTS作为一款支持多语言、高保真度且具备音素级控制能力的开源TTS模型&#x…

作者头像 李华
网站建设 2026/2/8 10:38:10

全网最全专科生必看9个AI论文平台测评

全网最全专科生必看9个AI论文平台测评 一、不同维度核心推荐&#xff1a;9款AI工具各有所长 对于专科生而言&#xff0c;论文写作是一个复杂而系统的过程&#xff0c;从选题、开题到初稿撰写、查重降重&#xff0c;每一个环节都可能遇到困难。因此&#xff0c;选择一款合适的AI…

作者头像 李华