问题处理--ceph集群osd数据盘故障,进行数据盘更换操作

【问题背景】
当前环境
集群信息: 一个3个mon节点,10个osd节点的ceph集群。
每个osd节点上有16块1.8T的数据盘和4块ssd的journal盘。osd磁盘做RAID0,WB模式。
ceph版本: Jewel
 
【问题现象】
ceph状态告警,告警内容是osd节点node-115上的osd.197 down。
通过下面命令定位故障osd
ceph -s 
ceph osd tree |grep down 
 
osd.197 down后触发数据均衡,ceph状态一直为health warnning中。
 
【问题原因】
 
 
定位到了是node-115节点上的osd故障后,登陆到node-115节点查看系统日志
dmesg -T | grep -i err
 
可以看到 磁盘sdk1 报错信息如下,

  

通过storcli工具确定故障磁盘槽位信息EID:Slt 是 0:11 ,华为服务器也可以参考 这篇文章来根据盘符确定槽位信息 
strocli64 /c0 show all |more
 
【解决方案】

 下一步进行osd磁盘更换,更换步骤:

1. 移除故障的osd

注:如果有多个osd故障,建议每次只踢一个osd,等待数据平衡完成再踢下一个,保证数据不丢失。依次将故障osd踢出ceph集群。

 1.1 检查ceph集群状态及副本数,集群状态正常后再执行步骤1.2。

#ceph -s (集群状态为OK)

#ceph osd dump | grep "replicated size" (检查所有pool是否为3副本)

 1.2 执行以下命令移除故障OSD,其中{$X}为osd id。(命令执行时确认成功后再执行下一条)

ceph osd out {$X}

systemctl stop ceph-osd@{$X} #把 OSD 踢出集群后,它可能仍在运行,就是说其状态为 up 且 out 。删除前要先停止 OSD 进程

ceph osd crush rm osd.{$X}

ceph auth del osd.{$X}

ceph osd rm {$X}

2.检查ceph集群状态

2.1 故障OSD移除后执行ceph -s检查集群状态是否ok;正常后再进行后续操作。

2.2 卸载原OSD挂载点信息。

#df -h #确认osd挂载点

#umount  /var/lib/ceph/osd/ceph-{$X}

3.(可选:如果umount操作hang死,则需要重启服务器,一般不需要重启,根据实际情况判断

注:对于fault硬盘,执行umount后进程会hang死,需重启服务器解决。(可通过ps -aux |grep umount查询是否存在异常进程)

本次操作时就遇到了umount进程hang死的情况。

也无法kill掉这个进程,只能重启物理服务器了。

3.1 重启服务器

#注意,重启服务器前需要设置noout,否则重启会触发ceph集群数据均衡。

(1)检查ceph集群状态是否正常,同时不存在recovery/backfill的数据。

#ceph -s (集群状态为ok)

(2)全局设置noout

ceph osd dump |grep flags (查询集群当前标记)

ceph osd set noout

(3)登录需要重启的存储节点,执行如下命令停止节点中所有的OSD。

#systemctl stop ceph-osd.target

(4)通过ceph命令查询集群的状态,无recovery的数据后再进行重启操作。

#ceph -s 

#ceph osd tree (查询osd的状态)

#ceph osd stat > /tmp/osdmap.log (查询当前集群中osdmap信息并记录)

#reboot #软重启

 注意:本次在重启服务器,服务器在关机的时候hang住了,等了很久发现没起来,登录ipmi控制台查看,hang在关机步骤,决定在ipmi控制台进行硬重启下电操作。

硬重启后,机器仍然无法进入系统,报错如下:

参考下面的博客解决掉了,虽然不是dell服务器,本环境是华为H2288V3服务器同样适用,因为故障盘是做的raid0,该故障盘的缓存还在,需要手动清理下故障盘的缓存。操作步骤参考下面链接。

服务器更换硬盘,启动系统报错:there are offline or missing virtual drivers with preserved cache

ok,服务器重启后,正常。进行下一步操作。

 4更换故障硬盘

4.1 全局设置nodeep-scrub noout

#ceph osd set  nodeep-scrub

#ceph osd set  noout

#ceph health detail (查看存在noout、nodeep-scrub的flag)

4.2 对需要更换的硬盘进行拔除,并更换成新硬盘。联系机房同事,进行磁盘更换。

4.3 登录硬盘故障的存储节点,对更换的新硬盘进行重组RAID0操作;下图为RAID相关参数说明请参考。

 (1 )查询RAID卡的controller_id,例如以下查询到controller_id为0

/opt/MegaRAID/storcli/storcli64  show

 

(2)查询RAID卡是否存在RAID信息保存的缓存数据,例如以下查询到的VD 1为残留信息。我们刚刚已经清理过了,所以本次查看是没有残留信息。

/opt/MegaRAID/storcli/storcli64 /c0 show preservedcache

 

 删除不使用的preservedcache信息。

/opt/MegaRAID/storcli/storcli64 /c0 /v1 delete preservedcache

(3)检查新更换硬盘的状态是否为UGOOD,DG的标识是否为-;(UGOOD意为未进行配置的好盘)

/opt/MegaRAID/storcli/storcli64 /c0 show all |more

 

(4)(可选)如果检查新更换的硬盘状态不为UGOOD,状态为JBOD或则Ubad可通过以下命令进行硬盘状态的重置。

/opt/MegaRAID/storcli/storcli64 /ccontroller_id/eenclosure_id/sslot_id set good

(5)创建RAID0;

/opt/MegaRAID/storcli/storcli64 /ccontroller_id add vd r0  drives=enclosure_id:startid-endid wb

 

/opt/MegaRAID/storcli/storcli64 /c0 add vd r0  drives=0:11 wb

#本环境为了更好的利用到raid卡的cache,所以配置wb模式,经过测试,wb模式性能更高。但是配置wb模式前提是确定raid卡是有电池保护的。

Cache读写模式:

wt:当磁盘子系统接收到所有传输数据后,控制器将给主机返回数据传输完成信号。

wb:控制器Cache收到所有的传输数据后,将给主机返回数据传输完成信号。

awb:在RAID卡无电容或电容损坏的情况下,强制使用“wb”模式。

 

5. 添加新的OSD

注:每次只添加一个OSD,等待数据平衡完成后再添加下一个。

1. 检查待扩容OSD节点的网络是否正常。

#ip a |grep gl    (获取br-storagepub、br-storage网络ip地址)

#ping {IP}        (检查与其他存储节点br-storagepub、br-storage网络通信是否正常)

#telnet {IP} 6800 (检查与其他存储节点6800端口通信是否正常)

#ovs-appctl bond/show ovs-bond0 //检查Bond0的状态是否正常;

#ovs-appctl bond/show ovs-bond1 //检查Bond1的状态是否正常;

2. 检查ceph集群数据recovery和backfill的优先级是否修改过,默认1。

#cat /etc/ceph/ceph.conf |grep "osd_recovery_op_priority|osd_max_backfills"

 

3. 查询待扩容的OSD与日志盘对应关系可使用以下命令

#ceph-disk list

#ls -al /var/lib/ceph/osd/ceph-*/journal |awk '{print $11}' |xargs -n1 ls -al

确认本次添加的osd为node-115上的sdk,对应的journal盘是sdt1

4. 更换后的osd磁盘做分区。

ssh node-115

parted /dev/sdk mklabel gpt

parted /dev/sdk mkpart primary 2048s 100%

(1)对数据盘打标签(本次只更换数据盘,所以操作该步骤)

#sgdisk --typecode=1:4fbd7e29-9d25-41b8-afd0-062c0ceff05d /dev/sdk

(2)日志盘打标签(日志盘不更换的情况下无需操作)

sgdisk --typecode=1:45B0969E-9B03-4F30-B4C6-B4B80CEFF106 /dev/sdt

sgdisk --typecode=2:45B0969E-9B03-4F30-B4C6-B4B80CEFF106 /dev/sdt

sgdisk --typecode=3:45B0969E-9B03-4F30-B4C6-B4B80CEFF106 /dev/sdt

sgdisk --typecode=4:45B0969E-9B03-4F30-B4C6-B4B80CEFF106 /dev/sdt

5. ceph的mon节点添加OSD,即控制节点中添加。

#ceph-deploy --overwrite-conf osd prepare node-115:/dev/sdk1:/dev/sdt1

#ceph-deploy --overwrite-conf osd activate node-115:/dev/sdk1:/dev/sdt1

#watch ceph -s (数据平衡完毕后再扩容下一块osd)

待所有osd扩容后需取消全局设置的noin nodeep-scrub noout。

#ceph -s (无recovery、backfill数据)

#ceph osd unset  nodeep-scrub

#ceph osd unset   noout 

#ceph -s (集群状态ok后扩容工作结束)

原文地址:https://www.cnblogs.com/shanghai1918/p/12835118.html