ceph 故障处理记录

本文记录了在ceph环境中遇到的各种故障及处理方法,包括mon无法启动、OSD故障如'FAILED assert(0 == "unexpected error")'、unfound object问题及OSD superblock错误。针对mon故障,通过monmap工具进行修复;对于OSD问题,通过删除垃圾数据、标记unfound object和修复superblock来解决;MDS故障则涉及mds_wipe_ino_prealloc配置调整和重新构建mds二进制文件。

mon故障

mon无法启动

  • 现象描述

因为某些原因,导致ceph-mon无法启动。ceph-mon 无法启动,原因可能是mointor level db 损坏,数据的丢失等。在OS 正常的情况下(osd运行正常),只是ceph-mon 无法启动。
这种情况下,剔除节点然后再 加入,会导致数据的2次均衡,如果数据量大,耗时比较久。所以,可以通过重建ceph-mon的方式来实现

  • 处理

1,在当前节点,停掉ceph-mon,导出monmap,然后通过monmaptool工具手动修改 monmap,修改完 再导入到 剩余的mon map里,最后通过ceph mon dump验证是否删除成功

ceph-mon -i {mon-id} --extract-monmap {map-path}
# for example,
ceph-mon -i a --extract-monmap /tmp/monmap

monmaptool {map-path} --rm {mon-id}
#for example
monmaptool /tmp/monmap --rm b

ceph-mon -i {mon-id} --inject-monmap {map-path}
# for example,
ceph-mon -i a --inject-monmap /tmp/monmap

2,删除成功后,开始重新添加 ,通过ceph-mon leader 导出 现有的monmap

ceph -m 10.10.10.62 mon getmap -o monmap

3,在/data/目录生成ceph-mon 目录,mon-id 是5个字符串,

ceph-mon -i wsgws --mkfs --monmap monmap

4,将新的ceph-mon 加入monmap

ceph mon add wsgws 10.10.10.61:6789

4,重启 ezs3-agent 会将 新的mon加入到 ceph.conf

OSD故障

FAILED assert(0 == "unexpected error")

  • 现象描述

ceph 0.67版本,osd的日志中有 如下报错

    -3> 2017-10-18 16:44:55.36
### Ceph 日志配置与查看方法 #### 配置 Ceph 日志 Ceph 的日志可以通过多种方式进行配置,主要包括调整 `log_level` 和指定日志存储位置。 1. **设置日志级别 (`log_level`)** - Ceph 提供了不同的日志级别来控制日志的详细程度。默认情况下,日志级别为 `info` 或更低。 - 可以通过修改配置文件或者动态更改运行中的守护进程的日志级别来进行调整。 ```bash ceph tell mon.* injectargs '--debug_ms=5' ``` 上述命令将所有监视器 (MON) 守护进程的消息服务调试级别设置为 5[^2]。 2. **持久化内存中的日志** - 使用 `ceph daemon type.id log dump` 命令可以将内存中的日志写入到日志文件中,而不受当前日志级别的限制[^1]。 ```bash ceph daemon osd.0 log dump ``` 3. **配置日志路径** - 默认情况下,Ceph 将日志保存在 `/var/log/ceph/` 下。可以在 `ceph.conf` 文件中自定义日志路径: ```ini [global] log file = /custom/path/to/logs/$name.log ``` 这样可以将不同类型的守护进程(如 MON、OSD)的日志分别存放到指定目录下[^3]。 4. **归档旧日志** - 当需要清理或归档旧日志时,可以调用内部函数 `reopen_logs()` 来重新打开新的日志文件并关闭旧文件[^4]。 #### 查看 Ceph 日志 以下是几种常见的查看 Ceph 日志的方法: 1. **直接读取日志文件** - 如果知道具体的日志文件名,可以直接使用工具如 `cat`, `less` 或者 `tail` 来查看日志内容。 ```bash tail -f /var/log/ceph/osd.0.log ``` 2. **查询特定守护进程的日志** - 利用 `ceph daemon` 命令获取某个具体守护进程的实时日志输出。 ```bash ceph daemon osd.0 config show | grep log_file ``` 此外还可以结合其他参数进一步过滤所需信息。 3. **处理 SSD 故障场景下的日志提取** - 对于因硬件故障导致无法正常访问的情况,比如 SSD 中的日志磁盘损坏,则需先停止受影响的 OSD 并手动触发日志落地操作。 ```bash systemctl stop ceph-osd@{osd-id} ceph-osd -i {osd-id} --flush-journal ``` 同时建议启用 `noout` 标记避免集群自动尝试恢复而引发额外负载[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值