7.14. 优化 Ceph 对象网关的垃圾回收
当新数据对象写入到存储集群中时,Ceph 对象网关会立即为这些新对象分配存储。在删除或覆盖存储集群中的数据对象后,Ceph 对象网关将从存储桶索引中删除这些对象。之后一段时间后,Ceph 对象网关会清除用于存储存储群集中对象的空间。从存储集群中清除已删除对象数据的过程称为 Garbage Collection 或 GC。
垃圾回收操作通常在后台运行。您可以将这些操作配置为持续运行,或仅在低活动和轻量工作负载间隔期间运行。默认情况下,Ceph 对象网关持续执行 GC 操作。由于 GC 操作是 Ceph 对象网关操作的一个正常部分,因此大部分时间都存在符合垃圾回收条件的已删除对象。
7.14.1. 查看垃圾回收队列
在从存储集群中清除被删除和覆盖对象前,useradosgw-admin
来查看等待垃圾回收的对象。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- Ceph 对象网关的根级别访问权限.
流程
查看等待垃圾回收的对象队列:
示例
[ceph: root@host01 /]# radosgw-admin gc list
要列出队列中的所有条目,包括未过期条目,请使用 --include-all
选项。
7.14.2. 调整 Garbage Collection 设置
Ceph 对象网关为新的和覆盖的对象立即分配存储。此外,多部分上传的部分也消耗了一些存储。
从 bucket 索引中删除对象后,Ceph 对象网关会清除用于已删除对象的存储空间。类似地,Ceph 对象网关将在多部分上传完成后删除与多部分上传相关的数据,或者上传未激活或未能完成时可配置的时间。从 Red Hat Ceph Storage 集群清除已删除对象数据的过程称为垃圾回收(GC)。
可使用以下命令查看等待垃圾回收的对象:
radosgw-admin gc list
垃圾回收是一种在低负载时持续运行或低负载期间运行的后台活动,具体取决于存储管理员如何配置 Ceph 对象网关。默认情况下,Ceph 对象网关持续执行垃圾收集操作。由于垃圾回收操作是 Ceph 对象网关的常规功能,特别是对象删除操作,因此大多数时间都存在符合垃圾回收条件的对象。
某些工作负载可临时或永久超过垃圾收集活动的速度。对于删除密集型工作负载而言,这尤其适用,其中很多对象都会在短时间内存储,然后将其删除。对于这些类型的工作负载,存储管理员可以使用以下配置参数,相对于其他操作增加垃圾回收操作的优先级:
-
rgw_gc_obj_min_wait
配置选项在清除已删除对象数据前等待最短时间(以秒为单位)。默认值为 2 小时或 7200 秒。对象不会立即清除,因为客户端可能会读取对象。在重重工作负载下,这个设置会消耗过多的存储,或者具有大量删除的对象来进行清除。红帽建议不要在 30 分钟内设置这个值,或设置 1800 秒。 -
rgw_gc_processor_period
配置选项是垃圾回收周期的运行时间。也就是说,连续运行垃圾回收线程之间的时间长度。如果垃圾回收的时间超过这一时间段,Ceph 对象网关不会在再次运行垃圾回收循环前等待。 -
rgw_gc_max_concurrent_io
配置选项指定网关垃圾回收线程在清除已删除数据时使用的最大并发 IO 操作数。在删除重度工作负载时,请考虑将此设置增加到更多并发 IO 操作。 -
rgw_gc_max_trim_chunk
配置选项指定要在单个操作中从垃圾收集器日志中移除的最大密钥数。在删除重量操作时,请考虑增加密钥的最大数量,以便在每次垃圾收集操作期间清除更多对象。
从 Red Hat Ceph Storage 4.1 开始,从垃圾回收日志中卸载索引对象的 OMAP 有助于降低垃圾回收活动对存储集群的性能影响。在 Ceph 对象网关中添加了一些新配置参数来调优垃圾回收队列,如下所示:
-
rgw_gc_max_deferred_entries_size
配置选项设置垃圾回收队列中延迟条目的最大大小。 -
rgw_gc_max_queue_size
配置选项设置用于垃圾回收的最大队列大小。这个值不应大于osd_max_object_size
减rgw_gc_max_deferred_entries_size
减 1 KB。 -
rgw_gc_max_deferred
配置选项设置垃圾回收队列中存储的最大延迟条目数。
这些垃圾回收配置参数适用于 Red Hat Ceph Storage 5 及更高版本。
在测试中,存储群集使用均匀均衡的删除写入工作负载(如 50% 删除和 50% 的写入操作),该存储群集占用了 11 小时。这是因为 Ceph 对象网关垃圾回收无法与删除操作同步。如果发生这种情况,集群状态将切换到 HEALTH_ERR
状态。对并行垃圾回收可调项的主动设置会显著延迟存储群集的测试,可能对很多工作负载有用。典型的实际存储集群工作负载可能无法导致存储集群主要因为垃圾回收而填满。
7.14.3. 为删除密集型工作负载调整垃圾回收
有些工作负载可能会临时或永久超过垃圾收集活动的速度。对于删除密集型工作负载而言,这尤其适用,其中很多对象都会在短时间内存储,然后将其删除。对于这些类型的工作负载,请考虑增加垃圾回收操作相对于其他操作的优先级。如有关于 Ceph 对象网关粘合的其他问题,请联系红帽支持团队。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 对存储集群中所有节点的根级别访问权限。
流程
将
rgw_gc_max_concurrent_io 的
值设置为20
,将rgw_gc_max_trim_chunk
的值设置为64
:示例
[ceph: root@host01 /]# ceph config set client.rgw rgw_gc_max_concurrent_io 20 [ceph: root@host01 /]# ceph config set client.rgw rgw_gc_max_trim_chunk 64
- 重新启动 Ceph 对象网关,以允许更改的设置生效。
- 在 GC 活动期间监控存储集群,以验证增加的值不会影响性能。
切勿修改正在运行的集群中的 rgw_gc_max_objs
选项的值。您应该仅在部署 RGW 节点前更改此值。