6.7. Ceph 对象网关
Ceph 对象网关正确应用 AWS 请求签名
在以前的版本中,Ceph 对象网关没有正确应用用于签名标头的 AWS 请求,并生成以下出错信息:
SignatureDoesNotMatch
在这个版本中,Ceph 对象网关代码已被修复,以正确签署标头。这会导致请求时签名请求成功。
radosgw-admin bucket check
命令不再显示不完整的多部分上传
在以前的版本中,运行 radosgw-admin bucket check
命令显示不完整的多部分上传。这可能会导致站点 admin 混淆,因为输出可能看起来像存储桶索引损坏一样。在这个版本中,命令仅显示错误和孤立对象,并过滤掉不完整的上传。
使用存储桶分片对象不均匀分布 omap 密钥
在版本控制 bucket 中,偶尔删除对象操作无法完全完成。在此状态中,这些对象的 bucket 索引条目的名称和实例字符串为零。当后续重新划分时,空名称和实例字符串会导致将条目重新分片到分片 0。不属于分片 0 的条目最终会结束。这会在分片 0 上划分条目数,且大于其他分片。在这个版本中,在 delete 操作中不再清除名称和实例字符串。如果进行 reshard,则没有完全删除的条目在正确的分片上最终没有结束,且不会强制分片 0。
增加对象网关生命周期处理性能的整体吞吐量
在以前的版本中,由于在给定环境中有多个存储桶或容器增加的对象或存储桶工作负载,对象网关生命周期处理性能会因为缺少并行性而受到限制。在这个版本中,parallelism 在两个维度中,单个对象网关实例可以有多个生命周期处理线程,每个线程都有多个执行生命周期的线程。另外,这个更新改进了将 分片
分配给 worker,从而增加总体吞吐量。
当调用 rgw_parse_bucket_key
时,存储桶租户状态会被正确解释
在以前的版本中,rgw_parse_bucket_key
的一些调用者(如 radosgw-admin bucket stats
)处理循环中的密钥,如果列出了一些租户存储桶,则可能会错误地将未租户的存储桶解释为租户。如果使用非空 rgw_parse_bucket_key
调用 rgw_parse_bucket_key,则在键中没有租户时,它无法正确为 bucket::tenant 分配空值。在 Red Hat Ceph Storage 4.1z1 中,如果没有租户应用并正确解释存储桶租户状态,则存储桶租户成员现在会被清除。
Ceph 对象网关尝试缓存和访问匿名用户信息
在以前的版本中,Ceph 对象网关尝试获取尚未验证的每个请求的匿名用户信息。此未经身份验证的访问导致存储集群中的单个 Ceph OSD 的负载很高。在这个版本中,Ceph 对象网关将尝试获取匿名用户信息,从而降低单个 Ceph OSD 的延迟和负载。
为对象正确报告生命周期过期
在以前的版本中,因为存在前缀规则,可能会为某些对象报告不正确的生命周期过期时间。这是因为,在生成 S3 HEAD 和 GET 请求中使用的过期标头时,生命周期过期规则中的可选前缀限制会被忽略。在 Red Hat Ceph Storage 4.1z1 中,规则前缀现在是与对象的过期标头规则匹配的一部分,并正确报告对象的生命周期过期时间。
rgw.none
bucket stats 中的大量对象
计算统计的代码无法检查,在某些情况下,bucket 索引条目是否引用已存在的对象。这会导致存储桶统计不正确。在这个版本中,添加了代码来检查是否存在,修复存储桶统计。
对有序存储桶列表的调用会卡住
bucket 排序列表操作中的代码错误可能会导致特定情况下,此操作会停留在循环中,且永远不会完成。在这个版本中,这个代码 bug 已被修复,因此调用一个排序的存储桶列表可以如预期完成。
生命周期处理会忽略 NoncurrentVersionExpiration
中的 NoncurrentDays
假设在并行生命周期处理期间包含对象的修改时间被错误初始化的变量。这会导致存储桶中的非当前过期规则的对象版本在预期的过期时间前过期。在这个版本中,modificaction 时间(mtime
)会被正确初始化,并传播到生命周期的处理队列。这会导致在正确时间段内进行非当前过期。
有些对象的部分被错误地添加到垃圾回收中
使用 Ceph 对象网关读取对象时,如果这些对象的部分值超过一半,如 rgw_gc_obj_min_wait
选项定义,则它们的 tail 对象被添加到垃圾回收列表中。垃圾回收列表中的这些 tail 对象已被删除,从而导致数据丢失。在这个版本中,垃圾回收功能会禁用删除对象的垃圾回收。因此,使用需要很长时间的 Ceph 对象网关读取对象不会添加到垃圾回收列表中。