注意
本文档适用于 Ceph 的开发版本。
压缩
从 Kraken 版本开始新增。
Ceph 对象网关支持上传对象的服务器端压缩。
注意
Reef 版本新增了 compress-encrypted 区域组功能,以启用 服务器端加密 时的压缩。
支持的压缩插件包括:
lz4
snappy
zlib
zstd
注意
Ceph 对象网关压缩仅由 RGW 守护进程对 RGW 对象执行,它不同于 BlueStore 压缩(由 OSD 在存储池粒度执行)。通常只启用其中一种。同时启用这两个级别不会导致问题,但应该根据用例做出决定。如果您的集群只提供对象存储,并且运行 RGW 的节点比 OSD 节点有更多的可用 CPU,那么 RGW 级别的压缩可能更具吸引力。在 OSD 级别进行压缩确实意味着在复制后对相同的用户数据进行多次压缩,但在 OSD 数量远多于 RGW 的集群中,这种策略可能会带来更好的性能。
配置
可以通过在区域的放置目标中向命令 radosgw-admin zone placement modify 提供 --compression=<type> 选项,在存储类上启用压缩。
压缩 type 是指写入新对象数据时将使用的压缩插件的名称。每个压缩对象都会记住使用了哪个插件,因此对此设置的任何更改都不会影响 Ceph 解压现有对象的能力,也不需要重新压缩现有对象。
压缩设置适用于使用此放置目标上传到存储桶的所有新对象。通过将 type 设置为空字符串或 none 可以禁用压缩。
例如
radosgw-admin zone placement modify --rgw-zone default \
--placement-id default-placement \
--storage-class STANDARD \
--compression zlib
{
...
"placement_pools": [
{
"key": "default-placement",
"val": {
"index_pool": "default.rgw.buckets.index",
"storage_classes": {
"STANDARD": {
"data_pool": "default.rgw.buckets.data",
"compression_type": "zlib"
}
},
"data_extra_pool": "default.rgw.buckets.non-ec",
"index_type": 0,
}
}
],
...
}
注意
如果您之前没有进行任何 多站点配置,则会为您创建一个 default 区域。
统计信息
运行 radosgw-admin bucket stats 命令可以查看给定存储桶的压缩统计信息
radosgw-admin bucket stats --bucket=<name>
{
...
"usage": {
"rgw.main": {
"size": 1075028,
"size_actual": 1331200,
"size_utilized": 592035,
"size_kb": 1050,
"size_kb_actual": 1300,
"size_kb_utilized": 579,
"num_objects": 104
}
},
...
}
其他命令和 API 将根据其未压缩数据报告对象和存储桶大小。
size_utilized 和 size_kb_utilized 字段分别表示压缩数据的总大小(以字节和千字节为单位)。