• 问题处理--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后扩容工作结束)

  • 相关阅读:
    对于es6新增的async 和 await的使用和理解
    如何实现文本的竖向排版 && js 打印指定区域
    鼠标透过蒙版点击触发下一层事件,上一层点击事件失效
    小程序的弊端以及Taro优点
    服务器端渲染和客户端渲染区别
    使用mobx 示例
    C语言
    C语言
    C语言
    [转]linux tar 解压命令总结
  • 原文地址:https://www.cnblogs.com/shanghai1918/p/12835118.html
Copyright © 2020-2023  润新知