Ceph OSD为DOWN时修复

本文介绍了解决 Ceph 存储集群中 OSD 处于 down 状态的方法,包括重启服务、重新格式化磁盘及加入集群的过程,并提供了一些实用的 shell 脚本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文所使用Ceph版本为luminous(不同版本删除OSD基本操作相同),当出现Ceph OSD为down的情况时,可以通过以下方法解决(假设ceph-admin节点OSD.1 Down,该OSD对应磁盘为/dev/sdb):

1.首先尝试能否重启ceph-osd服务

近期在维护ceph集群时,发现一些新的情况:

(1)ceph osd down掉之后(这里假设osd.1 down),去到对应的机器上使用systemctl | grep ceph 命令查看ceph进程时,发现ceph-osd@1.service仍然显示active,此时通过systemctl restart ceph-osd@1.service可以解决这个问题(这也许是ceph的一个bug?并没有严格考证过),可能需要等待一段时间服务才会重启成功(大约几分钟)。

{最近发现有时这种情况下简单重启一下进程不能解决问题,这时可以尝试以下步骤重新开启osd进程:

ceph osd out osd.1

systemctl stop ceph-osd@1.service

ceph-osd -i 1          //执行完这一条命令后需要等待比较长的时间

如果执行成功,应提示如下信息:

[root@a-08 ~]# ceph-osd -i 1
starting osd.1 at - osd_data /var/lib/ceph/osd/ceph-1 /home/nvme/ceph/ceph-1/journal
2020-01-04 12:04:32.815 7f2cc6e82b80 -1 osd.1 69155 log_to_monitors {default=true}
如果执行失败并且提示如下信息:

osd.1 init authentication failed: (1) Operation not permitted

解决方法:

ceph auth del osd.1

ceph auth add osd.1 osd 'allow *' mon 'allow profile osd' -i /var/lib/ceph/osd/ceph-1/keyring

ceph osd out osd.1

systemctl stop ceph-osd@1.service

ceph-osd -i 1

问题应该得到解决

}

(2)如果ceph.conf配置文件中的cluster network字段配置错误会导致所有的osd服务down掉。

(3)ceph health detail提示slow ops, oldest one blocked for 109179 sec, daemons [osd.1,osd.2,osd.3] have slow ops,此时需要进入osd所对应机器上重启ceph-osd进程,但如果使用systemctl restart ceph-osd@1.service重启会导致ceph-osd开始自动重启,过一段时间之后就会导致ceph-osd进程状态为failed,无法重启服务(后来尝试重启几次机器之后发现集群状态恢复正常,但是这种方法可能会导致数据丢失)。经过几次尝试,发现提示这种情况的slow ops时,需要首先使用systemctl stop ceph-osd@1.service命令使ceph-osd@1.service进程停止后,再使用systemctl start ceph-osd@1.service才不会发生上述问题(执行完systemctl stop 命令后,不要马上重新执行systemctl start,需要等待集群状态趋于稳定后再执行systemctl start命令,可以通过ceph -w查看ceph集群实时状态,如果集群信息连续多行显示相同的信息,则说明集群状态已经处于稳定,此时可以执行systemctl start命令使osd重新启动)。如果重启这个进程之后ceph集群并未达到健康状态,则继续按此方法重启ceph health detail中有问题的osd。(如果ceph health detail中只是提示slow ops和monitorID,并没有具体的osd编号时,重启相应的monitor进程即可)

(4)有可能是硬件故障导致ceph osd down掉(概率比较低,但我确实遇到过),需要确认非硬件故障之后再尝试方法2(发生硬件故障之后是无法执行方法2的)。

2.如果重启无望,可采用以下步骤重新格式化硬盘并将其加入ceph集群中(以下步骤会将硬盘中的所有数据抹除)

步骤1.停止相应OSD服务

           此步骤需要在Down掉的OSD所在节点上操作,

           输入命令:

           systemctl stop ceph-osd@1.service

步骤2.取消OSD挂载

           安装OSD时,会将osd.1挂载至/var/lib/ceph/osd/ceph-1,因此,删除OSD时,需要首先取消OSD挂载,

           输入命令:

           umount /var/lib/ceph/osd/ceph-1

步骤3. 设置OSD为OUT

           输入命令:

           ceph osd out osd.1

步骤4.删除OSD

           输入命令:

           ceph osd crush remove osd.1(如果未配置Crush Map则不需要执行这一行命令)

           ceph auth del osd.1

           ceph osd rm 1

步骤5.清空已删除磁盘中的内容

          输入命令:

          wipefs -af /dev/sdb

          完成此项操作后,重启该OSD所在节点的机器

          重启完成后,需要zap该磁盘,输入命令如下:

           ceph-volume lvm zap /dev/sdb

          如果zap成功,会提示以下信息:

            --> Zapping: /dev/sdb
            Running command: /usr/sbin/cryptsetup status /dev/mapper/
            stdout: /dev/mapper/ is inactive.
            Running command: /usr/sbin/wipefs --all /dev/sdb
            Running command: /bin/dd if=/dev/zero of=/dev/sdb bs=1M count=10
            stderr: 10+0 records in
            10+0 records out
            stderr: 10485760 bytes (10 MB) copied, 0.0195807 s, 536 MB/s
            --> Zapping successful for: /dev/sdb

步骤6.重新安装OSD

           输入命令:

           ceph-deploy osd create  --bluestore  ceph-admin --data /dev/sdb

步骤7.查看OSD TREE

           输入命令:

           ceph osd tree

           此时应该看到OSD为UP的情况

附:

如果不清楚osd编号与盘符的对应关系,可以通过以下命令查看(ceph在安装osd时,会向磁盘中写入一些信息,其中就包括osd编号、集群ID等):

此处以sdb为例

ceph-volume lvm list /dev/sdb (注:ceph-volume lvm list命令会将所有与ceph相关的磁盘中写入的ceph信息都显示出来)

如果磁盘很多,可以参考以下shell脚本(批量显示磁盘中的ceph集群信息),这个脚本可以显示出每一个磁盘对应的osd编号:

#!/bin/bash
osd=`fdisk -l | grep [^o]sd  | awk '{print $2}' | sed "s/://g" | sort `
echo "Device in Ceph"
for i in $osd
do
  echo $i
  ceph-volume lvm list $i | grep "=====" | awk '{print $2}'
  echo
  echo "==================================================="
  echo
done

<think>好的,我现在需要解决用户提出的问题:Ceph的`ceph -s`命令在执行出现卡顿的情况。首先,我应该回忆Ceph的基本架构和`ceph -s`命令的作用。`ceph -s`是用来查看集群状态的,它会收集各个组件的状态信息,包括MON、OSD、MDS等。如果这个命令卡住,可能的原因有很多,需要逐一排查。 首先,我应该考虑的是MON(监控节点)的问题。因为`ceph -s`需要与MON通信,如果MON节点响应慢或者网络有问题,就会导致命令卡顿。这候需要检查MON节点的日志,看看是否有错误或警告信息。比如,MON之间是否无法正常通信,或者选举出现问题。另外,网络延迟或丢包也可能导致通信不畅,可以用`ping`或者`traceroute`测试MON节点之间的网络状况。 接下来,OSD(对象存储守护进程)的状态也很重要。如果有大量的OSD处于down状态,或者在恢复数据,集群可能处于非健康状态,导致`ceph -s`需要更长间来收集信息。用户需要检查OSD的状态,使用`ceph osd stat`或`ceph osd tree`查看是否有OSD异常。同,检查存储池是否接近满,比如`mon_osd_nearfull_ratio`或`mon_osd_full_ratio`的设置,如果存储池接近这些阈值,可能会影响集群性能。[^1][^3] 然后,集群负载过高也是一个可能的原因。如果集群正在进行数据恢复、重新平衡或者其他后台任务,可能会占用大量资源,导致`ceph -s`响应慢。这候需要查看集群的负载情况,比如使用`ceph -w`实监控集群事件,或者检查OSD的IO使用率、CPU和内存的使用情况。 另外,Ceph配置参数可能也需要调整。比如,`mon_client_ping_timeout`和`mon_lease`的设置,如果超间太短,可能导致命令等待响应。适当增加这些参数的值,可能有助于缓解问题。同,检查认证问题,比如cephx认证是否正常,密钥环是否有效,权限是否正确。[^2] 还有可能的是日志级别设置过高,导致MON节点处理请求记录大量日志,影响性能。可以临调低日志级别,比如使用`ceph tell mon.* injectargs --mon_debug_slow_ping_time 0`来减少日志输出,看看是否有改善。 最后,如果上述方法都无效,可能需要考虑升级Ceph版本,或者联系社区支持。已知的某些版本可能存在性能问题,升级到修复后的版本可能会解决卡顿的问题。[^4] 在排查过程中,应该逐步排除可能性,先从MON和网络开始,再检查OSD和集群负载,最后考虑配置和版本问题。同,查看相关的日志文件,如`/var/log/ceph/ceph-mon.*.log`,寻找错误信息或警告,这能提供直接的线索。</think>### Ceph `ceph -s` 命令卡顿问题解决方案 #### 1. 检查监控节点(MON)状态 - **MON节点通信延迟**:通过`ping`或`traceroute`测试MON节点间网络质量。若网络延迟或丢包严重,需优化网络配置。 - **MON日志分析**:查看MON日志`/var/log/ceph/ceph-mon.*.log`,检查是否存在选举失败或同步异常。例如: ```bash tail -f /var/log/ceph/ceph-mon.$(hostname).log ``` - **MON性能调优**:调整MON超参数(需谨慎): ```bash ceph tell mon.* injectargs --mon_client_ping_timeout=30 ``` #### 2. 排查OSD与存储池状态 - **OSD健康状态**:执行以下命令查看是否有异常OSD: ```bash ceph osd stat ceph osd tree ``` 若存在大量`down`或`recovery`状态,需修复或等待恢复完成。 - **存储池容量阈值**:检查是否接近`mon_osd_nearfull_ratio`或`mon_osd_full_ratio`阈值。若存储池过满,需扩容或删除冗余数据。 #### 3. 集群负载与后台任务 - **实监控集群事件**: ```bash ceph -w # 观察实事件(如数据恢复、PG重平衡) ``` - **资源使用率检查**: ```bash top # 查看CPU/内存使用率 iostat -x # 检查磁盘IO负载 ``` #### 4. 认证与配置问题 - **cephx认证验证**:确认客户端密钥环权限正常: ```bash ceph auth get client.admin # 检查权限是否完整 ``` - **调整MON响应参数**:适当增加超间: ```bash ceph tell mon.* injectargs --mon_lease=30 # 默认值可能为10秒 ``` #### 5. 日志级别与版本问题 - **降低日志级别**:临减少MON日志输出: ```bash ceph tell mon.* injectargs --mon_debug_slow_ping_time=0 ``` - **版本兼容性**:确认Ceph版本是否存在已知性能问题。若版本较旧,升级至稳定版本[^4]。 #### 6. 高级排查工具 - **使用`strace`跟踪命令**: ```bash strace -T ceph -s # 分析系统调用耗 ``` - **检查钟同步**:确保所有节点间一致(NTP服务正常)。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值