Ceph故障排查与性能诊断完整指南

Ceph故障排查与性能诊断完整指南


前言

Ceph集群在生产环境中运行时会遇到各种问题,从OSD故障到性能下降,从网络问题到数据不一致。本教程提供系统性的故障排查方法论,涵盖常见问题诊断、性能分析、故障恢复等实战技巧,帮助运维人员快速定位和解决问题。


1. 故障排查方法论

1.1 排查流程


问题发现 → 信息收集 → 分析定位 → 解决方案 → 验证恢复

1.2 快速诊断命令


# 集群概览
ceph -s

# 健康详情
ceph health detail

# OSD状态
ceph osd status
ceph osd tree

# PG状态
ceph pg stat
ceph pg dump

# MDS状态
ceph mds stat

2. OSD故障处理

2.1 OSDDown排查


# 1. 检查OSD状态
ceph osd stat
ceph osd tree

# 2. 查看OSD日志
journalctl -u ceph-osd@X

# 3. 检查磁盘状态
smartctl -a /dev/sdX
hdparm -tT /dev/sdX

# 4. 网络连通性测试
ceph osd ping osd.X

# 5. 处理建议
# - 磁盘故障:更换磁盘
# - 进程崩溃:重启OSD
# - 网络问题:检查网络配置

2.2 OSD启动失败


# 查看启动错误
systemctl status ceph-osd@X
journalctl -u ceph-osd@X -n 100

# 常见原因
# 1. 磁盘空间不足
df -h /var/lib/ceph/osd/ceph-X

# 2. 权限问题
ls -la /var/lib/ceph/osd/ceph-X/

# 3. 损坏的BlueStore
ceph-volume lvm zap /dev/sdX --destroy
ceph orch daemon add osd host:/dev/sdX

2.3 OSD替换流程


# 1. 标记OSD为out
ceph osd out osd.X

# 2. 停止OSD服务
systemctl stop ceph-osd@X

# 3. 确认数据恢复完成
ceph -w

# 4. 移除OSD
ceph osd rm osd.X

# 5. 销毁CRUSH条目
ceph osd crush rm osd.X

# 6. 更换磁盘后重新部署
ceph orch daemon add osd host:/dev/sdX

3. PG故障处理

3.1 PG状态说明

| 状态 | 含义 | 处理 | |-----|------|------| | active | 可访问 | 正常 | | clean | 无问题 | 正常 | | down | PG离线 | 检查OSD | | inactive | 无法主处理 | 检查PG分布 | | undersized | 副本不足 | 检查OSD | | remapped | 正在迁移 | 等待恢复 | | inconsistent | 数据不一致 | 执行scrub |

3.2 PG恢复


# 查看PG恢复状态
ceph pg stat
ceph pg 1.3f query

# 手动触发恢复
ceph pg force_backfill 1.3f

# 调整恢复优先级
ceph config set osd osd_recovery_max_active 8
ceph config set osd osd_recovery_op_priority 3

# 查看恢复进度
ceph -w | grep recovery

3.3 数据不一致修复


# 执行对象级修复
ceph pg 1.3f repair

# 执行深度scrub
ceph pg deep-scrub 1.3f

# 查看scrub结果
ceph pg 1.3f query | grep scrub

4. MON故障处理

4.1 MON问题诊断


# 检查MON状态
ceph quorum_status --format json-pretty

# 查看MON日志
journalctl -u ceph-mon@X

# 检查磁盘空间
df -h /var/lib/ceph/mon/

# 检查网络
ceph ping mon.X

4.2 MON仲裁问题


# 查看仲裁状态
ceph quorum_status

# 添加新MON
ceph orch host add new-mon 10.0.10.20

# 移除故障MON
ceph orch host rm old-mon

4.3 MON数据库恢复


# 备份当前数据库
cp -ra /var/lib/ceph/mon/ceph-X/store.db /backup/

# 从其他MON同步
ceph-mon -i X --inject-monmap /tmp/monmap

# 重建MON(最后手段)
ceph orch rm mon.X
ceph orch host add mon-X 10.0.10.X

5. 性能问题诊断

5.1 IO延迟排查


# 查看整体延迟
ceph osd perf

# 查看单个OSD延迟
ceph daemon osd.X perf dump | grep -E "op_latency|op"

# 检查磁盘IO
iostat -x 1
iotop -o

# 检查网络延迟
iperf3 -c ceph-node01

5.2 性能瓶颈分析


# CPU瓶颈
top
htop

# 内存瓶颈
free -m
ceph daemon osd.X perf dump | grep cache

# 网络瓶颈
ifstat
nload

# 磁盘瓶颈
fio --name=test --filename=/dev/sdX --ioengine=libaio --direct=1 --rw=randwrite --bs=4k --iodepth=32

6. 数据恢复

6.1 从备份恢复


# 恢复MON配置
ceph config get mon mon_config > /backup/ceph-mon-config.json
ceph auth import -i /backup/ceph-mon.keyring

# 恢复CRUSH Map
ceph osd setcrushmap -i /backup/crushmap.bin

# 恢复OSD
ceph osd create  
ceph auth get-or-create osd.X > /etc/ceph/ceph.osd.X.keyring

6.2 紧急恢复操作


# 强制集群启动(谨慎使用)
ceph osd set noout
ceph osd set norebalance

# 标记所有OSD in
ceph osd in *

# 恢复后清理
ceph osd unset noout
ceph osd unset norebalance

7. 网络问题排查

7.1 网络诊断


# 连通性测试
ping ceph-node01

# 端口连通性
nc -zv ceph-node01 6789
nc -zv ceph-node01 6800

# MTU检查
ip link show | grep mtu

# 网卡绑定状态
cat /proc/net/bonding/bond0

7.2 网络配置问题


# 检查防火墙
iptables -L
ufw status

# 检查路由
ip route
ip neigh

# DNS解析
nslookup ceph-node01
dig ceph-node01

8. 日志分析

8.1 日志位置


# 系统日志
/var/log/ceph/ceph.log

# OSD日志
/var/log/ceph/ceph-osd.X.log

# MON日志
/var/log/ceph/ceph-mon.X.log

# 实时日志
ceph -w

8.2 日志过滤


# 搜索错误
grep -i error /var/log/ceph/ceph.log

# 搜索特定时间
grep "2024-01-15 10:" /var/log/ceph/ceph.log

# 搜索特定OSD
grep "osd.5" /var/log/ceph/ceph.log | tail -100

9. 故障恢复脚本


#!/bin/bash
# ceph-recovery.sh - 自动故障诊断脚本

echo "=== Ceph故障诊断报告 ==="
echo "生成时间: $(date)"
echo ""

echo "1. 集群健康状态"
ceph -s | grep health
echo ""

echo "2. OSD状态"
ceph osd stat | grep -E "up|down|out|in"
echo ""

echo "3. PG状态"
ceph pg stat | grep -E "active|clean|undersized"
echo ""

echo "4. MON仲裁"
ceph quorum_status --format json | jq '.quorum_names'
echo ""

echo "5. 磁盘使用率"
ceph df | grep -E "TOTAL|used"
echo ""

echo "建议操作:"
if ceph -s | grep -q "HEALTH_OK"; then
    echo "✓ 集群状态正常"
else
    echo "⚠ 请检查上述异常项"
fi

总结

故障排查需要系统性的方法,从症状到根因逐层分析。掌握常见故障的处理流程,建立完善的监控告警体系,能够快速响应和解决问题,保障Ceph集群稳定运行。

发表回复

后才能评论