暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

删除pool引发的osd节点宕机

奋斗的cepher 2019-07-30
203

写在前面

最近好忙,整理环境,大批池子排队上线...

最近在环境中遇到一个情况,有一个2PB的存储池在测试完成后进行上线前的处理,主要是清除测试数据、扩容和修改配置,一顿操作后,居然宕机了

环境描述

先别怕,设备不会随便宕机,先看下这个环境:

  • 1、处理器为单路8核16线程Xeon Silver 4110

  • 2、内存64GB,swap为32GB

  • 3、每个节点有36个osd,每个osd单独的一块8T HDD

  • 4、一共5个节点,radosgw和mon、mgr均分布在9台不同的设备上

  • 5、仅使用对象存储,策略为EC 3+2

低配的环境,光是节点上36个8T的osd全部跑起来就够呛。。。

操作实录

首先,要求将测试时候写入的接近四千万个对象删除,然后将另外4台一样的节点加入到集群中,扩容完成后,指定策略为EC 6+2

考虑到删除这么多的对象要很长时间,业务催得紧,急着要上线,省时间的方案是

  • 1、备份s3用户的key,保持业务接入配置不改变

  • 2、删掉全部池子,这样的话新加入的osd避免了数据重分布

  • 3、扩容+++

  • 4、重建池子,重建用户并修改配置

然鹅,操作到第二步就翻车了。

使用下面的命令删除所有的池子,结果半分钟不到全部osd节点连不上,一会就全部宕机了

for x in sudo ceph osd pool ls;do sudo ceph osd pool delete $x $x --yes-i-really-really-mean-it;done

为什么呢

首先这些节点的配置很低,尤其是内存,仅有64GB,要跑38个8T的osd本身已经捉襟见肘,正常运行时内存使用已经过半(通过参数限制了osd使用的内存最大使用量,但是这个限制不能压得太低,否则性能很差),系统本身的运行也需要有足够的内存和cpu资源

其次是计算资源cpu太少,主频低核数也少,平均一个osd都分不到0.5个core,用EC就更加不够用

最后swap实在不太够,多分点的话系统卡点还好,太少用完就没机会了,只能宕机

当执行上述删除所有存储池的命令后,集群所有的osd收到更新,清除其管辖的全部pg及数据,这个操作非常耗性能,实际观察到这种处理下osd平均需要120%左右的cpu资源及数GB的内存,这就是说单节点上所有osd同时作业直接把节点的全部资源用尽,不宕机才怪

怎么处理

联系机房的同事手动重启机器,然后在系统启动后立马连上,执行systemctl stop ceph-osd.target
停掉全部的osd,再检查系统中有哪些osd,手动systemctl start ceph-osd@x.service
启动osd,像这种机器配置,起8个后负载就明显比较大了,所以要慢慢来~

总结

出于成本考虑,不少环境的节点机器配置会比较低,盘又多,这种场景风险还是比较高的,不出故障还好,一旦有osd挂掉,数据恢复引发的高负载容易危及系统安全,像本篇这种情况,处理集群问题的时候一定要慎重


文章转载自奋斗的cepher,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论