视紧迫程度不同,OSD 将本地存储空间的使用情况分为4个等级:
等级名称 | 含义 |
---|---|
Nearfull | 产生告警,除此之外,无任何影响 |
Backfillfull | 产生告警,拒绝通过backfill 的方式迁入或者继续迁入本OSD |
Full | 产生告警,所有使用该OSD的存储池,对应客户端的写入操作将被有条件禁止 |
Failsafefull | 产生告警,所有使用该OSD的存储池,对应客户端的写入操作将被无条件禁止 |
每个OSD通过定时器周期性地已检测自身的空间使用率和状态,并上报至Monitor,如果OSD有Full状态,那么 会将对应的存储池标记为Full,从而阻止该存储池承载的所有客户端的写操作,但是写入操作携带了CEPH_OSD_FLAG_FULL_FORCE
和 CEPH_OSD_FLAG_FULL_TRY
标识除外。
引入 Backfillfull 的这个等级的意义在于,有些数据迁移,例如数据恢复或者自动平衡过程中以Backfill的方式进行的PG整体数据迁移,是集群内部自动触发的,它们并不受存储池的 Full 标记影响。
进一步地,如果 Full 设置得过高(默认为OSD管理的主要存储设备裸容量的95%),由于从OSD上报空间使用统计和状态,到 Monitor 真正将对应的存储池标记为Full 并阻止客户端写入有滞后,所以仍然存在在此期间客户端继续产生大量写请求将OSD彻底写满的可能,此时 FailsafeFull 可以作为防止产生OSD永久性地变成只读这类灾难性后果的最后一道屏障。