如何处理因osd full导致的ceph集群停服

osd 什么时候会达到full 状态

  • 问1:osd 什么时候会出现full
  • 答1:默认情况下osd写入达到85% 出现nearfull、达到90% 出现backfillfull、达到95% 出现full。
  • 问2:如何查看osd的写入量
  • 答2:执行命令:ceph osd df tree
  • 问3:如何查看osd默认的这三个值(full_ratio、backfillfull_ratio、nearfull_ratio)
  • 答3:执行命令:ceph osd dump | grep ratio
  • 问4:如何查看某个特定osd这三个值
  • 答4:执行命令:ceph daemon /var/run/ceph/ceph-osd.2.asok config show | grep mon_osd | grep ratio

osd full后会带来什么问题

  • 问1:osd full会带来什么问题
  • 答1:单个osd出现full 会导致整个ceph集群停服(停服意思:不可写不可读)
  • 问2:为何一个osd出现full,整个集群都不可用,(有多个池的情况,其他池也是不能写入)
  • 答2:因为ceph默认三副本,且写入数据是强一致性。在保证数量可靠存储的同时,人为引入的强制性约束(自己瞎掰的理由)

因osd full 导致集群停服的处理思路

  • 第一:先要解除osd full,让集群动起来(就是恢复到可读可写)
  • 第二:要么清理不要的数据、要么扩容(最好是扩容,扩容又分新增osd盘 或者 更换为容量更大的的盘)

实施步骤

第一步、先确定是哪些osd full。

A、若是ceph、rbd相关命令还可用,直接查看使用率
    ceph osd df tree    #找使用率大于95%的

B、若是ceph、rbd相关命令失效。(当时一脸懵逼,连哪些osd满了我都不知道,因为ceph、rbd等皆不可用)我把存储节点全部重启后居然可以使用ceph命令了
    1、去看ceph日志,看故障前记录的日志是哪些osd full(写是一个过程,肯定有日志记录是那个osd full)
        root@pve-ceph04:~# cat /var/log/ceph/ceph.log | grep "backfill full"      #去每一台host上看(没办法只能这样)
        2023-04-20T17:10:00.019267+0800 mon.pve-ceph03 (mon.0) 3712 : cluster [WRN]     osd.0 is backfill full
        2023-04-20T17:10:00.019291+0800 mon.pve-ceph03 (mon.0) 3713 : cluster [WRN]     osd.2 is backfill full

    2、确认这个full的osd在哪个host上(若是之前有记录这个数据,直接查记录,若是没有记录,只去像如下去每台上查询)
        root@pve-ceph02:~# ls /var/lib/ceph/osd/ | grep "ceph-2"      #ceph-2 中的2就是osd的id号
        ceph-2

第二步:临时解除osd full状态

以下是基于ceph命令可用的情况,若是ceph命令不可用了,可能需要重启集群所有节点

方式一:停止对应full osd的进程(有三副本,临时停止full osd,让集群动起来),该方式风险很大
        systemctl stop ceph-osd@2

方式二:将对应full osd的reweight降低,让数据迁移部分到其他osd,(该方式必须要求osd.2进程处于正常运行状态)(见下图所示)
        ceph osd reweight osd.2 0.9

方式三:临时修改对应full osd的ratio值(适用于ceph16及以前版本)(该方式必须要求osd.2进程处于正常运行状态)
        ceph tell osd.2 injectargs '--mon_osd_full_ratio 0.97 --mon_osd_backfillfull_ratio 0.95 --mon_osd_nearfull_ratio 0.9'
        #ceph17版本需要把配置写到配置文件重启osd

file

最终措施:加盘扩容,或者换大盘扩容

方式一:清理数据(没啥说的)

方拾二:加osd扩容(没啥说的)

方式三:没有多余的硬盘接口,换大盘扩容(没亲自测试过)
    #先将osd的标志调整下
    ceph osd set noout
    ceph osd set nobackfill
    ceph osd set norecover

    #然后销毁掉这个osd,拔掉该盘,插入大盘,重建osd

    #完成后关闭标志
    ceph osd unset noout
    ceph osd unset nobackfill
    ceph osd unset norecover

附:介绍了删除pg的处理方式

大佬文章

声明:本文为原创,作者为 辣条①号,转载时请保留本声明及附带文章链接:https://boke.wsfnk.com/archives/1125.html
谢谢你请我吃辣条谢谢你请我吃辣条

如果文章对你有帮助,欢迎点击上方按钮打赏作者

最后编辑于:2023/4/21作者: 辣条①号

现在在做什么? 接下来打算做什么? 你的目标什么? 期限还有多少? 进度如何? 不负遇见,不谈亏欠!

暂无评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

arrow grin ! ? cool roll eek evil razz mrgreen smile oops lol mad twisted wink idea cry shock neutral sad ???

文章目录