业务上,用户经常大量写,然后大量删,已知 Ceph 删对象的主要是先标记等 GC 才会真正删除数据的。所以如果用户经常大量写伴随大量删,容易导致容量打爆。 解决的方法,主要是两个方面,如果高警时写入的速度已经很快了,再来解决 GC 的问题已经来不及了,最好是跟业务沟通,停掉部分写,以防 Ceph 集群的 OSD 被写满无法读写,其次就是调整 rgw 的 GC 参数,让更多的线程来参与 GC 的过程。 效果可以从下面重启 rgw 时间和 Ceph Pool Available 容量回升的时间看到,调整 GC 参数之后,GC 过程加速。
# gc tune,这是很激进的调参,仅供参考
rgw_gc_obj_min_wait = 30
rgw_gc_max_concurrent_io = 100
rgw_gc_max_trim_chunk = 1000
rgw_log_nonexistent_bucket = true
rgw_enable_usage_log = true