本文详细介绍Hadoop磁盘损坏模拟恢复实战,包括故障预防、磁盘监控、故障模拟、磁盘替换、数据恢复等内容,适合大数据运维工程师使用。学习交流加群风哥微信: itpux-com
Part01-基础概念与理论知识
1.1 磁盘损坏概述
磁盘损坏是指磁盘硬件故障或数据损坏导致无法正常读写。更多视频教程www.fgedu.net.cn
- 硬件故障
- 坏道
- 固件问题
- 电源问题
- 人为错误
1.2 损坏类型
损坏类型:
1. 硬件故障
– 磁盘完全损坏
– 无法识别
– 无法读写
– 需要更换磁盘
2. 坏道
– 部分扇区损坏
– 部分数据损坏
– 其他部分可用
3. 文件系统损坏
– 文件系统错误
– 目录损坏
– 元数据损坏
4. 数据块损坏
– HDFS数据块损坏
– 校验和错误
– 可从其他副本恢复
1.3 恢复原理
恢复原理:
Part02-生产环境规划与建议
2.1 预防措施
预防措施:
1. 硬件选择
– 企业级硬盘
– SAS/SATA SSD
– 品牌硬盘
– 质保时间长
2. RAID配置
– RAID 1/5/6/10
– 热备盘
– 定期检查
3. 电源保护
– UPS
– 双路电源
– 稳定电压
4. 环境控制
– 温度控制
– 湿度控制
– 防尘
– 防静电
2.2 磁盘监控
磁盘监控:
- SMART:磁盘健康状态
- IO错误:读写错误
- 坏道:坏道数量
- 使用率:磁盘使用率
from bigdata视频:www.itpux.com
2.3 RAID配置
RAID配置:
1. RAID 0
– 条带化
– 性能好
– 无冗余
– 不适合生产
2. RAID 1
– 镜像
– 100%冗余
– 性能一般
– 适合系统盘
3. RAID 5
– 分布式奇偶校验
– 一块盘冗余
– 读性能好
– 写性能一般
4. RAID 6
– 双分布式奇偶校验
– 两块盘冗余
– 更安全
– 写性能较差
5. RAID 10
– 镜像+条带
– 性能好
– 冗余好
– 成本高
# 建议
– 系统盘:RAID 1
– 数据盘:RAID 5/6/10
– NameNode:RAID 10
– DataNode:RAID 5/6
Part03-生产环境项目实施方案
3.1 故障模拟
3.1.1 模拟坏道
# 警告:仅在测试环境执行!
# 1. 查看磁盘
lsblk
fdisk -l
# 2. 查看SMART信息
smartctl -a /dev/sda
# 3. 模拟磁盘只读(使用dmsetup)
# 这会让磁盘变成只读,模拟故障
# 注意:有风险!
# 或者,卸载磁盘模拟故障
umount /bigdata/fgdata/disk1
# 4. 观察HDFS
sleep 300
hdfs dfsadmin -report
hdfs fsck /
3.1.2 模拟数据块损坏
# 警告:仅在测试环境执行!
# 1. 创建测试文件
hdfs dfs -mkdir -p /disk_test
hdfs dfs -put /etc/passwd /disk_test/
hdfs dfs -ls /disk_test/
# 2. 找到该文件的数据块
hdfs fsck /disk_test/passwd -files -blocks
# 3. 在DataNode上找到该块并破坏
# 假设块在fgedu-dn01上
ssh fgedu-dn01
cd /bigdata/fgdata/hdfs/data/current/
# 找到对应的块文件
# 用随机数据覆盖它
echo “corrupted data” > blk_123456789
# 4. 观察HDFS
hdfs fsck /
# 应该看到Corrupt blocks
# 5. 恢复
# HDFS会自动从其他副本恢复
sleep 300
hdfs fsck /
3.2 磁盘替换
3.2.1 DataNode磁盘替换
# 场景:DataNode一块磁盘损坏,需要替换
# 1. 停止DataNode
hdfs –daemon stop datanode
# 2. 标记磁盘为损坏
# hdfs-site.xml配置的目录
# 假设坏盘是/bigdata/fgdata/disk1
# 从配置中移除该目录
# 或者直接umount
# 3. 物理更换磁盘
# 断电
# 拔出坏盘
# 插入新盘
# 上电
# 4. 分区格式化新盘
fdisk /dev/sdb
mkfs.xfs /dev/sdb1
# 5. 挂载新盘
mkdir -p /bigdata/fgdata/disk1
mount /dev/sdb1 /bigdata/fgdata/disk1
echo “/dev/sdb1 /bigdata/fgdata/disk1 xfs defaults 0 0” >> /etc/fstab
# 6. 设置权限
chown -R hadoop:hadoop /bigdata/fgdata/disk1
chmod 700 /bigdata/fgdata/disk1
# 7. 启动DataNode
hdfs –daemon start datanode
sleep 60
# 8. 验证
jps
hdfs dfsadmin -report
hdfs fsck /
3.3 数据恢复
3.3.1 数据块自动恢复
# HDFS会自动检测和恢复
# 1. 检查坏块
hdfs fsck / -list-corruptfileblocks
# 2. 如果有副本,自动恢复
# 等待HDFS自动恢复
sleep 300
# 3. 检查恢复状态
hdfs fsck /
# 4. 如果没有副本,需要手动处理
# 查看哪个文件损坏
hdfs fsck / -list-corruptfileblocks
# 删除损坏的文件(如果可以接受丢失)
hdfs fsck / -delete
# 或者从备份恢复
hdfs dfs -cp /backup/corrupted_file /path/to/dest
Part04-生产案例与实战讲解
4.1 DataNode磁盘损坏
4.1.1 实战案例
# 场景:DataNode一块磁盘损坏
# 1. 发现问题
# 监控告警
# 查看日志
tail -n 100 /bigdata/app/hadoop/logs/hadoop-hdfs-datanode-*.log
# 输出示例:
# ERROR … – DiskErrorException: /bigdata/fgdata/disk1
# 2. 检查磁盘
ssh fgedu-dn01
dmesg | tail -100
smartctl -a /dev/sdb
fdisk -l
lsblk
df -h
# 3. 确定磁盘损坏
# 磁盘不可读
# 有大量IO错误
# SMART显示故障
# 4. 停止DataNode
hdfs –daemon stop datanode
# 5. 卸载坏盘
umount /bigdata/fgdata/disk1
# 6. 更新hdfs-site.xml
# 从dfs.datanode.data.dir中移除该目录
# 或者保留,HDFS会跳过不可用的目录
# 7. 启动DataNode
hdfs –daemon start datanode
sleep 60
# 8. 检查状态
jps
hdfs dfsadmin -report
# 9. 观察块复制
hdfs fsck /
# 应该看到Under-replicated blocks正在复制
# 10. 物理更换磁盘
# 在维护窗口更换磁盘
# 重新挂载
# 重新添加到配置
4.2 NameNode磁盘损坏
4.2.1 实战案例
# 场景:NameNode系统盘损坏
# 1. 发现问题
# 监控告警
# NameNode服务不可用
# 检查日志
# 2. 检查HA
# 查看NameNode状态
hdfs haadmin -getServiceState nn1
hdfs haadmin -getServiceState nn2
# 3. 如果有Standby,应该已经自动切换
# 验证
hdfs dfs -ls /
# 4. 修复故障的NameNode
# 重装系统
# 或者更换磁盘
# 恢复配置
# 从其他NameNode同步元数据
# 5. 初始化NameNode
# 同步Standby NameNode
hdfs namenode -bootstrapStandby
# 6. 启动NameNode
hdfs –daemon start namenode
sleep 30
# 7. 检查状态
hdfs haadmin -getServiceState nn1
hdfs haadmin -getServiceState nn2
4.3 数据块损坏
4.3.1 实战案例
# 场景:HDFS报告Corrupt blocks
# 1. 检查坏块
hdfs fsck / -list-corruptfileblocks
# 输出示例:
# /user/fgedu/corrupt_file: CORRUPT blockpool BP-123456789-192.168.1.10-1234567890123 block blk_123456789_123456789
# 2. 检查文件
hdfs fsck /user/fgedu/corrupt_file -files -blocks -locations
# 3. 检查是否有副本
# 查看每个块的副本位置
# 如果有其他副本,HDFS会自动恢复
# 等待自动恢复
echo “Waiting for auto-recovery…”
sleep 600
# 4. 重新检查
hdfs fsck /
# 5. 如果没有副本,无法自动恢复
# 选项1:删除损坏文件
hdfs fsck /user/fgedu/corrupt_file -delete
# 选项2:从备份恢复
hdfs dfs -cp /backup/user/fgedu/corrupt_file /user/fgedu/
# 6. 验证
hdfs dfs -cat /user/fgedu/corrupt_file | head
Part05-风哥经验总结与分享
5.1 最佳实践
最佳实践:
- RAID:配置RAID保护数据
- 监控:SMART监控、IO错误监控
- 备件:准备热备盘或备件
- 定期检查:定期检查磁盘健康
- 多副本:HDFS至少3副本
5.2 经验教训
1. 不配置RAID
– 教训:单盘故障导致长时间不可用
– 改进:配置RAID
2. 不监控磁盘
– 教训:故障发现晚
– 改进:配置SMART和IO监控
3. 没有备件
– 教训:等备件等很久
– 改进:准备热备盘或备件
4. 副本数太少
– 教训:两块盘坏丢失数据
– 改进:至少3副本
5.3 检查清单
## 日常检查
– [ ] SMART状态正常
– [ ] 无IO错误
– [ ] 磁盘使用率正常
– [ ] RAID状态正常
– [ ] 备盘可用
## 故障处理
– [ ] 及时发现故障
– [ ] 快速定位故障磁盘
– [ ] 安全更换磁盘
– [ ] 验证恢复成功
– [ ] 观察数据复制
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
