当前位置: 首页 > news >正文

【ELasticsearch】集群故障模拟方案(二):磁盘空间满、重选主节点

集群故障模拟方案(二):磁盘空间满、重选主节点

  • 1.磁盘空间满模拟
    • 1.1 方案描述
    • 1.2 操作步骤
    • 1.3 命令说明
      • 1.3.1 dd if=/dev/zero of=...
      • 1.3.2 fallocate
      • 1.3.3 对比
  • 2.主节点选举问题模拟
    • 2.1 方案描述
    • 2.2 操作步骤
  • 3.安全注意事项
  • 4.监控与验证

1.磁盘空间满模拟

1.1 方案描述

模拟节点磁盘空间耗尽的情况。

1.2 操作步骤

  • 识别数据目录
    • 检查 elasticsearch.yml 配置文件中的 path.data 设置。
    • 也可通过 GET _nodes/stats/fs?pretty 命令查询。
  • 填充磁盘空间
    # 创建一个占满磁盘的大文件
    dd if=/dev/zero of=/path/to/es_data/fill_disk bs=1G count=100# 或者使用fallocate快速创建
    fallocate -l 10G /path/to/es_data/fill_disk
    

    🚀 注意:fill_disk 是一个文件名。

  • 观察集群反应
    # 观察集群状态(分片可能变为 UNASSIGNED)
    curl -XGET 'http://localhost:9200/_cluster/allocation/explain?pretty'
    curl -XGET 'http://localhost:9200/_cat/allocation?v'
    
  • 清理磁盘空间
    rm /path/to/es_data/fill_disk
    

1.3 命令说明

1.3.1 dd if=/dev/zero of=…

dd if=/dev/zero of=/path/to/es_data/fill_disk bs=1G count=100

这条命令使用 dd 创建一个 100GB 的大文件,用于快速占满磁盘空间,模拟 Elasticsearch 节点磁盘耗尽的情况。

部分
说明
dd数据复制工具,用于按块读写文件或设备
if=/dev/zero输入文件Input File):从 /dev/zero(Linux 零设备)读取数据(全零字节)
of=/path/to/es_data/fill_disk输出文件Output File):写入到指定路径(通常选 Elasticsearch 数据目录)
bs=1G块大小Block Size):每次读写 1GB1G = 1 Gigabyte)
count=100块数量:总共写入 100 块(100 × 1GB = 100GB)
  • 生成一个 100GB 的 fill_disk 文件,内容全为零(/dev/zero 提供无限零字节流)。
  • 快速消耗磁盘空间,模拟 Elasticsearch 节点因磁盘满而无法写入的情况。

1.3.2 fallocate

fallocate -l 10G /path/to/es_data/fill_disk

这条命令同样用于快速分配磁盘空间,模拟磁盘被占满的场景(如测试 Elasticsearch 在磁盘空间不足时的行为)。

部分
说明
fallocateLinux 文件空间预分配工具,直接创建大文件(比 dd 更快)
-l 10G指定文件大小为 10GB(10G = 10 Gigabytes)
/path/to/es_data/fill_disk文件生成路径(通常选择 Elasticsearch 的数据目录)
  • 立即占用 10GB 磁盘空间,生成一个名为 fill_disk 的空文件。
  • 相比 dd if=/dev/zero of=...fallocate 不实际写入数据,而是直接修改文件系统元数据,因此速度极快(即使分配 1TB 也只需几秒)。

关键参数

参数
说明
-l--length指定文件大小(支持单位:K / M / G / T,如 1K=1KB,2M=2MB)
-o--offset可选,从文件指定偏移量开始分配(默认从 0 开始)

1.3.3 对比

以上方法适用于测试:

  • Elasticsearch 的 磁盘水位检测(如 cluster.routing.allocation.disk.watermark)。
  • 分片是否会自动迁移(当磁盘空间不足时)。
  • 集群是否进入 read-only 模式(防止数据丢失)。
方法速度是否实际写数据适用场景
fallocate⚡️ 极快❌ 只修改元数据快速测试磁盘空间不足
dd if=/dev/zero🐢 慢(需写全零)✅ 是需要真实占用磁盘 I/O 的场景
truncate -s 10G⚡️ 快❌ 稀疏文件(不占实际空间)仅需逻辑大文件时

注意事项

  • 需要 root 权限(如果目标目录权限受限)。
  • 确保路径正确,避免误填其他关键目录。
  • Elasticsearch 默认磁盘水位阈值:
    • 低水位low):85%85\%85% 占用时停止分配新分片。
    • 高水位high):90%90\%90% 占用时尝试迁移分片。
    • 强制只读flood_stage):95%95\%95% 占用时设为只读模式。

2.主节点选举问题模拟

2.1 方案描述

模拟主节点不可用时的选举过程。

2.2 操作步骤

  • 识别当前主节点
    curl -XGET 'http://localhost:9200/_cat/nodes?v&h=name,node.role,master'
    
  • 停止主节点
    systemctl stop elasticsearch
    
  • 观察选举过程
    watch -n 1 curl -s 'http://localhost:9200/_cat/master?v'
    
  • 恢复原主节点
    systemctl start elasticsearch
    

3.安全注意事项

  • 在生产环境谨慎操作,建议先在测试环境验证。
  • 确保有备份,避免数据丢失。
  • 监控集群状态,准备好快速恢复方案。
  • 避免在业务高峰期 进行故障模拟。

4.监控与验证

在执行故障模拟时,建议同时监控以下指标:

  • 集群健康状态/_cluster/health
  • 节点状态/_cat/nodes
  • 分片分配情况/_cat/shards
  • 未分配分片解释/_cluster/allocation/explain

以上模拟可以帮助你了解集群的容错能力和恢复机制,为制定应急预案提供依据。

http://www.dtcms.com/a/307965.html

相关文章:

  • C++ 入门基础(2)
  • Docker compose和Docker-compose的区别
  • 智慧交通中目标检测 mAP↑28%:陌讯多模态融合算法实战解析
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博评论数据可视化分析-点赞区间折线图实现
  • 从“健忘”到“懂我”:构建新一代AI记忆系统
  • 开发指南126-参数管理
  • 【C语言学习】scanf函数
  • TCP 连接管理 之 三次握手详解
  • 在Trae中使用MoonBit月兔1 创建项目
  • 力扣-102. 二叉树的层序遍历
  • 【BUG】nvm无法安装低版本Node.js:The system cannot find the file specified解决方案
  • 关于npm前端项目编译时栈溢出 Maximum call stack size exceeded的处理方案
  • 去重、top_n()、pull()、格式化
  • LCM中间件入门(1):工作原理核心概念及Ubuntu环境下的C++实践
  • 如何在NPM上发布自己的React组件(包)
  • 基于岗位需求的康养休闲旅游服务实训室建设方案
  • 达梦(DM8)常用管理SQL命令(3)
  • JavaScript内存管理完全指南:从入门到精通(通俗版+硬核版)
  • python后端之DRF框架(下篇)
  • Linux 服务器性能优化:性能监控,系统性能调优,进程优先级,内核升级全解析
  • 常见的中间件漏洞(tomcat,weblogic,jboss,apache)
  • 制造业企业如何保障文件外发图纸数据安全的?
  • dubbo源码之消费端启动的高性能优化方案
  • CTE公用表表达式的可读性与性能优化
  • Java项目:基于SSM框架实现的小区物业管理系统【ssm+B/S架构+源码+数据库+毕业论文+开题报告+任务书+远程部署】
  • 解决Git升级后出现的问题
  • DeepSeek SEO关键词优化提升流量增长
  • Linux Shell 条件判断:`test`、`[`、`[[` 命令深度解析
  • centos yum更换阿里源
  • 处理vscode在Ubuntu18.04上用不到的方法