Ceph OSD.419 故障分析

Ceph OSD.419 故障分析

1. 问题描述

在 Ceph 存储集群中,OSD.419 无法正常启动,系统日志显示服务反复重启失败。

2. 初始状态分析

观察到 OSD.419 服务启动失败的系统状态:

bash 复制代码
systemctl status ceph-osd@419
● ceph-osd@419.service - Ceph object storage daemon osd.419
   Loaded: loaded (/usr/lib/systemd/system/ceph-osd@.service; enabled-runtime; vendor preset: disabled)
   Active: failed (Result: start-limit) since Thu 2025-07-17 10:55:23 CST; 2s ago
  Process: 1459996 ExecStart=/usr/bin/ceph-osd -f --cluster ${CLUSTER} --id %i --setuser ceph --setgroup ceph (code=exited, status=1/FAILURE)

这表明 OSD 进程启动后立即失败,退出状态码为 1。

3. 日志分析

查看 OSD.419 的详细日志:

bash 复制代码
journalctl -u ceph-osd@419 -n 50

日志中发现关键错误信息:

复制代码
2025-07-17 10:55:23.127 7f102fcbca80 -1 bluestore(/var/lib/ceph/osd/ceph-419/block) _read_bdev_label failed to read from /var/lib/ceph/osd/ceph-419
2025-07-17 10:55:23.127 7f102fcbca80 -1  ** ERROR: unable to open OSD superblock on /var/lib/ceph/osd/ceph-419: (2) No such file or directory

这表明 BlueStore 无法读取块设备上的标签信息,导致 OSD 无法启动。

4. 文件系统与设备链接检查

检查 OSD 数据目录及其块设备链接:

bash 复制代码
ls -la /var/lib/ceph/osd/ceph-419

输出显示目录存在且包含必要文件:

复制代码
total 28
drwxrwxrwt  2 ceph ceph  200 Jun 28 22:17 .
drwxr-x--- 63 ceph ceph 4096 Apr 15 19:50 ..
lrwxrwxrwx  1 ceph ceph   93 Jun 28 22:17 block -> /dev/ceph-51f28752-dd94-4636-ad49-4f94adeec1fb/osd-block-4e392de5-7359-44a9-b5d3-2e4ad333bd87
lrwxrwxrwx  1 ceph ceph   23 Jun 28 22:17 block.db -> /dev/vg_nvme1n1/lv_sdbc
-rw-------  1 ceph ceph   37 Jun 28 22:17 ceph_fsid
-rw-------  1 ceph ceph   37 Jun 28 22:17 fsid
-rw-------  1 ceph ceph   57 Jun 28 22:17 keyring
-rw-------  1 ceph ceph    6 Jun 28 22:17 ready
-rw-------  1 ceph ceph   10 Jun 28 22:17 type
-rw-------  1 ceph ceph    4 Jun 28 22:17 whoami

进一步追踪块设备链接:

bash 复制代码
ls -la /dev/ceph-51f28752-dd94-4636-ad49-4f94adeec1fb/osd-block-4e392de5-7359-44a9-b5d3-2e4ad333bd87

输出显示其指向 /dev/dm-77

复制代码
lrwxrwxrwx 1 root root 8 Jul 17 10:02 /dev/ceph-51f28752-dd94-4636-ad49-4f94adeec1fb/osd-block-4e392de5-7359-44a9-b5d3-2e4ad333bd87 -> ../dm-77

5. 设备映射与 LVM 分析

检查设备映射器信息:

bash 复制代码
dmsetup info /dev/dm-77

输出表明这是一个活跃的 LVM 设备:

复制代码
Name:              ceph--51f28752--dd94--4636--ad49--4f94adeec1fb-osd--block--4e392de5--7359--44a9--b5d3--2e4ad333bd87
State:             ACTIVE
Read Ahead:        256
Tables present:    LIVE
Open count:        0
Event number:      0
Major, minor:      253, 77
Number of targets: 1
UUID: LVM-D48Kd1xr9eXJxf8QOiu6d1PMQH3v50ElpO9ex3rKqF3wo9n21vF32ecPkt1Fl3Xs

通过 ceph-volume 工具确认 OSD 使用的物理设备:

bash 复制代码
ceph-volume lvm list | grep osd.419 -A 50

输出确认 OSD.419 使用的是 /dev/sdbk 作为块设备,/dev/vg_nvme1n1/lv_sdbc 作为数据库设备:

复制代码
===== osd.419 ======

  [block]       /dev/ceph-51f28752-dd94-4636-ad49-4f94adeec1fb/osd-block-4e392de5-7359-44a9-b5d3-2e4ad333bd87

      block device              /dev/ceph-51f28752-dd94-4636-ad49-4f94adeec1fb/osd-block-4e392de5-7359-44a9-b5d3-2e4ad333bd87
      block uuid                pO9ex3-rKqF-3wo9-n21v-F32e-cPkt-1Fl3Xs
      cephx lockbox secret      
      cluster fsid              44599101-c099-4508-90de-5c748ea5b0f2
      cluster name              ceph
      crush device class        None
      db device                 /dev/vg_nvme1n1/lv_sdbc
      db uuid                   7Wengz-0w4M-DkOu-Uyff-FWE3-fW4f-5wiBAg
      encrypted                 0
      osd fsid                  4e392de5-7359-44a9-b5d3-2e4ad333bd87
      osd id                    419
      osdspec affinity          
      type                      block
      vdo                       0
      devices                   /dev/sdbk

  [db]          /dev/vg_nvme1n1/lv_sdbc

6. 设备健康状态检查

系统日志中的 I/O 错误

检查系统日志中的 I/O 错误:

bash 复制代码
dmesg | grep -i error | tail -20

发现多个与 dm-77sdbc 相关的 I/O 错误:

复制代码
[1593796.275701] Buffer I/O error on dev dm-77, logical block 3906468848, async page read
[1593796.738615] Buffer I/O error on dev dm-77, logical block 3906468848, async page read
[1593797.475909] Buffer I/O error on dev dm-77, logical block 0, async page read
[1593798.084174] Buffer I/O error on dev dm-77, logical block 0, async page read
[1593798.576004] Buffer I/O error on dev dm-77, logical block 0, async page read

物理设备健康状态

检查底层物理设备 /dev/sdbk 的 SMART 信息:

bash 复制代码
smartctl -a /dev/sdbk

虽然整体状态为 "PASSED",但发现一些潜在问题指标:

  • Raw_Read_Error_Rate 值较高 (214634404)
  • Reallocated_Sector_Ct 显示有 8 个扇区被重新分配
  • Command_Timeout 值非常高 (4295032833)

直接读取测试

使用 dd 命令尝试从设备读取数据:

bash 复制代码
dd if=/dev/dm-77 of=/dev/null bs=4k count=1

结果确认存在 I/O 错误:

复制代码
dd: error reading '/dev/dm-77': Input/output error
0+0 records in
0+0 records out
0 bytes (0 B) copied, 0.00196238 s, 0.0 kB/s

使用 BlueStore 工具检查块设备标签:

bash 复制代码
ceph-bluestore-tool show-label --dev /dev/dm-77

结果同样显示 I/O 错误:

复制代码
unable to read label for /dev/dm-77: (5) Input/output error
2025-07-17 11:00:23.188 7f6fc31efec0 -1 bluestore(/dev/dm-77) _read_bdev_label failed to read from /dev/dm-77: (5) Input/output error

检查正常osd

bash 复制代码
# ls -lh /dev/ceph-1902944b-03e6-40f6-9e60-155c8eb0867a/osd-block-3a3bc0db-3cf6-40ef-948f-563e971bb455
lrwxrwxrwx 1 root root 8 Jun 29 12:35 /dev/ceph-1902944b-03e6-40f6-9e60-155c8eb0867a/osd-block-3a3bc0db-3cf6-40ef-948f-563e971bb455 -> ../dm-78
bash 复制代码
# dd if=/dev/dm-78 of=/dev/null bs=4k count=1
1+0 records in
1+0 records out
4096 bytes (4.1 kB) copied, 0.0122036 s, 336 kB/s
bash 复制代码
# ceph-bluestore-tool show-label --dev /dev/dm-78
{
    "/dev/dm-78": {
        "osd_uuid": "3a3bc0db-3cf6-40ef-948f-563e971bb455",
        "size": 16000896466944,
        "btime": "2025-04-15 19:48:22.746107",
        "description": "main",
        "bluefs": "1",
        "ceph_fsid": "44599101-c099-4508-90de-5c748ea5b0f2",
        "kv_backend": "rocksdb",
        "magic": "ceph osd volume v026",
        "mkfs_done": "yes",
        "osd_key": "AQB+R/5n9/t/HxAAmxcGbkW30GeHo+gMyYGLtA==",
        "ready": "ready",
        "require_osd_release": "14",
        "whoami": "420"
    }
}

7. 故障结论

通过以上分析,可以得出以下结论:

  1. OSD.419 无法启动是因为其块设备 /dev/dm-77(对应物理设备 /dev/sdbk)存在严重的 I/O 错误
  2. 错误主要发生在逻辑块 0 处,这是关键的超级块位置,导致 BlueStore 无法读取 OSD 的元数据
  3. 物理设备 /dev/sdbk 虽然 SMART 状态为 "PASSED",但有多个指标显示潜在问题
  4. 多次直接读取测试确认设备确实存在物理 I/O 错误

8. 解决方案

基于故障分析,建议采取以下解决措施:

短期解决方案

  1. 将 OSD 标记为 out,确保集群不会尝试向它写入数据:

    bash 复制代码
    ceph osd out 419
  2. 尝试修复 BlueStore(成功率较低):

    bash 复制代码
    ceph-bluestore-tool repair --path /var/lib/ceph/osd/ceph-419
  3. 如果修复失败,完全移除这个 OSD:

    bash 复制代码
    ceph osd purge 419 --yes-i-really-mean-it

长期解决方案

  1. 更换物理硬盘 /dev/sdbk,该硬盘显示有潜在问题

  2. 使用新硬盘创建新的 OSD:

    bash 复制代码
    ceph-volume lvm create --data /dev/NEW_DISK --db /dev/vg_nvme1n1/lv_sdbc
  3. 定期检查所有 OSD 的物理设备健康状态,设置监控预警

9. 经验总结

  1. 在 Ceph 集群中,OSD 故障通常可以追溯到底层物理设备问题
  2. 完整的故障分析应包括:服务状态、日志分析、设备链接追踪、物理设备健康检查和直接 I/O 测试
  3. 即使 SMART 状态显示为 "PASSED",也应关注各项指标的异常值
  4. 在处理 I/O 错误时,通常更换设备是最可靠的长期解决方案
  5. 维护良好的监控系统可以帮助提前发现潜在的硬件问题,避免服务中断
相关推荐
赵成ccc9 小时前
离线部署三节点 Ceph 分布式存储
分布式·ceph
赵成ccc9 小时前
三节点Ceph分布式存储搭建指南
分布式·ceph
免檒9 小时前
windows11下基于docker单机部署ceph集群
ceph·后端·docker·容器
mixboot9 小时前
Ceph集群OSD崩溃恢复
ceph·osd
羌俊恩5 天前
分布式存储之Ceph使用指南--部署篇(未完待续)
分布式·ceph·pg·osd·rados
大咖分享课11 天前
深度剖析:Ceph分布式存储系统架构
分布式·ceph·架构·分布式存储
虚伪的空想家15 天前
rook-ceph配置dashboard代理无法访问
ceph·云原生·k8s·存储·rook
QF_2 个月前
debian搭建ceph记录(接入libvirt)
ceph·debian·kvm·libvirt
斯普信专业组2 个月前
Ceph集群OSD运维手册:基础操作与节点扩缩容实战
运维·ceph