ceph osd full - osd磁盘满的处理

本文介绍了当Ceph集群中的OSD达到写满状态时的几种处理方法,包括增加磁盘空间、数据再平衡及调整配置文件等。通过这些方法可以有效解决因OSD空间不足导致的问题。

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

ceph一旦有osd写满了,就会进入一种保护状态。所谓osd写满,是指osd空间使用率达到了osd full ratio规定的百分比,例如0.95。这种情况下,ceph不允许用rbd rm等命令删除上面的rbd image以释放空间。如何处理osd full的窘境,参考下面的方法。

方法1
增加磁盘空间。
如果可能,试着删除osd上无用的文件,释放部分磁盘空间。或者向系统添加新的硬盘,部署一个新的osd,ceph将自动平衡数据到新的osd,从而释放full osd上的部分空间。
但是,释放或增加空间的办法,有时候条件不具备,无法施行。尝试下面的方法。

方法2
数据再平衡。命令如下
ceph osd crush reweight <osd> <weight>
这里的调整分为两种情况。
如果osd是处于full状态的osd,设置为更小的weight值。例如原值是1,可以设置为0.8,0.5,0.01。
如果osd是还有空间余量的osd,那么weight设置为更大的值,例如原来是1,现在可以设置为1.5, 2, 10, 100。
weight代表的是osd之间的相对关系,数值可以逐步调整,根据实际效果,多次运行上面的reweight命令。每次调整,通过ceph -w ,df,ceph health detail 等命令,观察数据的分布变化,直到osd从full变成了near full状态。再平衡的方法之所以能够奏效,是因为每个osd的空间利用率并不完全相同,例如某个osd利用率达到95%,认定为full状态,此时其他osd空间占用为92%,93%,等等。再平衡的目标是让 osd full 的空间占用下降一点,低于 full ratio。
有一个要注意的问题,osd的调整以同一个crush ruleset的osd为范围。运行ceph osd tree,调整的osd应当位于同一个root。
解除了osd full,运行rbd rm等命令,删除不用的rbd image释放空间,直到osd可用空间处于警戒线以下。
ceph状态恢复正常之后,再次运行ceph osd crush reweight命令,恢复weight为合理的设置。例如,1TB大小的osd,weight通常设置为1.0。

方法3
还有一个修改ceph配置项的方法,在 /etc/ceph/ceph.conf 的 [global] 分节,例如原来配置
mon osd full ratio = 0.90
修改为更大的值,例如0.98。然后重启ceph服务。但经过博主试验,并未奏效。

参考


### Ceph OSD 中 `ceph-osd --mkjournal` 的使用方法及作用 #### 1. 命令概述 `ceph-osd --mkjournal` 是 Ceph 提供的一个工具,用于初始化或重新创建一个指定 OSD 的 journal 文件。Journal 是 Ceph OSD 数据持久化的关键组件之一,主要用于记录元数据变更的历史日志,从而加速写入操作并提高系统的可靠性[^1]。 #### 2. 使用场景 该命令通常在以下情况下使用: - 修改现有 OSD 的 journal 大小。 - 更改 journal 的存储位置(例如从本地文件迁移到专用 SSD 分区)。 - 初始化新的 OSD 或修复损坏的 journal 文件。 #### 3. 参数说明 执行 `ceph-osd --mkjournal` 时,需要指定目标 OSD 的 ID (`-i`)。以下是完整的命令结构及其参数解释: ```bash ceph-osd -i <osd_id> --mkjournal ``` | 参数 | 描述 | |------------|----------------------------------------------------------------------| | `-i <osd_id>` | 指定目标 OSD 的唯一标识符,通常是整数形式,例如 `0`, `1`, 等等。 | #### 4. 实际应用案例 ##### (1)修改 Journal 大小 如果希望更改已存在的 OSD 的 journal 大小而不需完全重建整个 OSD,则可以按照如下步骤操作: 1. **停止目标 OSD** 关闭对应的目标 OSD 服务以防止数据丢失或混乱。 ```bash systemctl stop ceph-osd@<osd_id>.service ``` 2. **删除旧的 Journal 文件** 移除当前的 journal 文件。 ```bash rm /var/lib/ceph/osd/ceph-<osd_id>/journal ``` 3. **设置新的 Journal 大小** 编辑配置文件 `/etc/ceph/ceph.conf`,将 `osd_journal_size` 设置为目标大小(单位为 MB)。例如: ```ini osd_journal_size = 10240 ``` 4. **重新创建 Journal** 使用 `--mkjournal` 参数重新生成 journal 文件。 ```bash ceph-osd -i <osd_id> --mkjournal ``` 5. **重启 OSD 服务** 启动 OSD 并验证 journal 是否正常工作。 ```bash systemctl start ceph-osd@<osd_id>.service ls -lh /var/lib/ceph/osd/ceph-<osd_id>/journal ``` ##### (2)迁移 Journal 至独立分区 当需要将 journal 移动到单独的高性能 SSD 分区时,可按以下流程操作: 1. **停止目标 OSD** ```bash systemctl stop ceph-osd@<osd_id>.service ``` 2. **刷新 Journal 数据** 确保所有未提交的日志都已同步到主存储中。 ```bash ceph-osd --flush-journal -i <osd_id> ``` 3. **移除原有 Journal 链接** 删除现有的 journal 符号链接。 ```bash rm /var/lib/ceph/osd/ceph-<osd_id>/journal ``` 4. **创建指向新分区的符号链接** 假设新分区位于 `/dev/sdb1`,则可以通过以下命令完成替换: ```bash ln -s /dev/sdb1 /var/lib/ceph/osd/ceph-<osd_id>/journal ``` 5. **重新初始化 Journal** 利用 `--mkjournal` 参数更新 journal 元数据。 ```bash ceph-osd -i <osd_id> --mkjournal ``` 6. **启动 OSD 服务** 最后恢复 OSD 正常运行状态。 ```bash systemctl start ceph-osd@<osd_id>.service ``` #### 5. 注意事项 - 在线上的生产环境中进行任何涉及 journal 的改动之前,请务必做好充分备份,并确认集群处于健康状态。 - 如果计划调整 journal 的存储介质类型(如从 HDD 转向 SSD),应提前规划好分区布局并合理分配资源[^2]。 - 当前版本可能对某些功能有所限制;因此建议始终查阅官方文档获取最新指导信息[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值