注意
本文档适用于 Ceph 的开发版本。
Tentacle
Tentacle 是 Ceph 的第 20 个稳定版本。
v20.2.0 Tentacle
发布日期
2025 年 11 月 18 日
亮点
有关这些项目的更多详细信息,请参阅以下部分。
CephFS
现在可以配置目录,使其目录条目名称不区分大小写或规范化。
当集群不健康时修改 FS 设置变量
max_mds,现在需要用户传递确认标志(--yes-i-really-mean-it)。对于默认情况(即
mode == 0),CephFS FUSE 客户端现在为fallocate返回EOPNOTSUPP(操作不支持)。
仪表盘
增加了对 NVMe/TCP 网关组和多个命名空间、多集群管理、OAuth 2.0 集成以及增强的 RGW/SMB 功能的支持,包括多站点自动化、分层、策略、生命周期、通知和精细复制。
集成的 SMB 支持
Ceph 集群现在提供一个 SMB Manager 模块,其工作方式类似于现有的 NFS 子系统。新的 SMB 支持允许 Ceph 集群自动创建连接到 CephFS 的 Samba 支持的 SMB 文件共享。
smb模块可以配置基本的 Active Directory 域或独立的身份验证。Ceph 集群可以托管一个或多个虚拟 SMB 集群,这些集群可以使用 Samba 的 CTDB 技术实现真正的集群化。smb模块需要一个启用 cephadm 的 Ceph 集群,并部署由samba-container项目提供的容器镜像。Ceph 仪表盘可用于配置 SMB 集群和共享。会自动部署一个新的cephfs-proxy守护程序,以提高 Samba 连接到 CephFS 时的可扩展性和内存使用率。
MGR
用户现在能够强制禁用始终开启的模块。
restful和zabbix模块(自 2020 年以来已弃用)已被正式移除。
RADOS
FastEC:为纠删码池添加了期待已久的性能和空间放大优化。
BlueStore:改进了压缩和新的、更快的 WAL(预写日志)。
数据可用性评分:用户现在可以跟踪集群中每个池的数据可用性评分。
OMAP:所有组件都已切换到更快的 OMAP 迭代接口,这改进了 RGW 存储桶列表和 scrub 操作。
Crimson
SeaStore 技术预览:SeaStore 对象存储现在可以与 Crimson-OSD 一起部署,主要用于早期测试和实验。鼓励社区提供反馈,以帮助未来的改进。
RBD
新的实时迁移功能:RBD 镜像现在可以从另一个 Ceph 集群(原生格式)或从各种外部来源/格式即时导入。
现在支持在 Ceph 集群之间镜像时重新映射 RBD 命名空间。
添加或改进了几个与组和组快照信息相关的命令,
rbd device map命令现在默认为msgr2。
RGW
增加了对 S3
GetObjectAttributes的支持。为了与 AWS S3 兼容,
LastModified时间戳现在截断到秒。请注意,在升级过程中,用户可能会因此观察到这些时间戳向后移动。存储桶重新分片现在在其开始阻止写入操作之前完成了大部分处理。这应该会显著减少重新分片对大存储桶的客户端可见影响。
RGW:Squid 中引入的用户帐户功能为 IAM API 和策略提供了第一类支持。我们初步的 STS 支持基于租户,并且只向管理员公开了一些 IAM API。现在不推荐使用这种租户级 IAM 功能,转而使用帐户。虽然我们将继续支持租户功能本身用于命名空间隔离,但以下功能将不早于 V 版本移除
租户级 IAM API,包括 CreateRole、PutRolePolicy 和 PutUserPolicy,
在 IAM 策略文档中使用租户名称而不是帐户,
在没有跨帐户策略评估的情况下解释 IAM 策略,
S3 API 对跨租户名称的支持,例如 Bucket=’tenant:bucketname’
STS Lite 和 sts:GetSessionToken。
Cephadm
一个新的 cephadm 管理的
mgmt-gateway服务为 Ceph 管理端点(例如仪表盘和监控堆栈)提供了一个单一的、以 TLS 终止的入口点。该网关实现为基于 nginx 的反向代理,位于 Prometheus、Grafana 和 Alertmanager 的前面,因此用户不再需要直接连接到这些守护程序或知道它们在哪个主机上运行。当与新的oauth2-proxy服务结合使用时,该服务使用 OpenID Connect (OIDC) / OAuth 2.0 协议与外部身份提供程序集成,网关可以为 Ceph 仪表盘和监控堆栈的其余部分实施集中式身份验证和单点登录 (SSO)。Ceph 仪表盘和基于 Prometheus 的监控堆栈的高可用性现在通过 cephadm 管理的
mgmt-gateway提供。nginx 高可用性机制允许 mgmt-gateway 检测仪表盘、Prometheus、Grafana 和 Alertmanager 的健康实例,相应地路由流量,并透明地处理管理器故障转移。当部署了虚拟 IP 和多个mgmt-gateway实例时,这种架构即使在守护程序或主机故障期间也能保持管理访问可用。一个新的
certmgrcephadm 子系统集中管理 cephadm 管理的服务的证书生命周期。certmgr 充当 cephadm 签名的证书的集群内部根 CA,它还可以使用用户提供的证书,并跟踪每个证书是如何配置的。它标准化了 RGW 和 mgmt-gateway 等服务的 HTTPS 配置,自动化了 cephadm 签名证书的续订和轮换,并在证书无效、即将过期或配置错误时发出健康警告。使用 certmgr,cephadm 签名的证书在所有 cephadm 管理的服务中都可用,开箱即用提供了安全的默认设置。
CephFS
现在可以配置目录,使其目录条目名称不区分大小写或规范化。这是一种可继承的配置,使其适用于整个目录树。
有关更多信息,请参阅 CephFS 目录条目名称规范化和大小写折叠。
现在可以通过使用配置选项
mgr/volumes/pause_purging来暂停异步清除已删除子卷的线程。现在可以通过使用配置选项
mgr/volumes/pause_cloning来暂停异步克隆子卷快照的线程。当集群不健康时修改设置
max_mds,现在需要用户传递确认标志(--yes-i-really-mean-it)。添加此功能是为了提醒用户,修改max_mds可能对故障排除或恢复工作没有帮助。相反,它可能会使集群进一步不稳定。对于默认情况(即
mode == 0),CephFS FUSE 客户端现在为fallocate返回EOPNOTSUPP(操作不支持),因为 CephFS 不支持磁盘空间预留。唯一支持的标志是FALLOC_FL_KEEP_SIZE和FALLOC_FL_PUNCH_HOLE。ceph fs subvolume snapshot getpath命令现在允许用户获取子卷快照的路径。如果快照不存在,则返回ENOENT。ceph fs volume create命令现在允许用户传递元数据和数据池名称以用于创建卷。如果未传递其中任何一个,或者如果其中任何一个是空池,则命令将中止。CephFS 卷的池命名空间名称格式已从
fsvolumens__<subvol-name>更改为fsvolumens__<subvol-grp-name>_<subvol-name>,以避免当位于不同子卷组中的两个子卷具有相同名称时发生命名空间冲突。即使存在命名空间冲突,也没有安全问题,因为 MDS auth cap 仅限于子卷路径。现在,通过此更改,命名空间已完全隔离。如果传递给命令
ceph fs subvolume info的子卷名称是克隆,则输出现在还将包含一个“source”字段,告知用户源快照的名称以及源快照所在的卷、子卷组和子卷的名称。对于使用 Tentacle 或更早版本创建的克隆,此字段的值将为N/A。常规子卷没有源子卷,因此无论版本如何,它们的输出都不会包含“source”字段。
Crimson / SeaStore
Crimson 项目持续取得进展,Squid 版本标志着 Crimson 的第一个技术预览版。Tentacle 版本引入了大量改进和新功能,增强了 Crimson-OSD 和 SeaStore 对象存储的稳健性、性能和可用性。在此版本中,SeaStore 现在可以与 Crimson-OSD 一起部署!强烈鼓励早期测试和实验,我们将非常感谢社区提供的任何初步反馈,以帮助指导未来的改进。请查看 Tentacle 的 Crimson 项目更新博客文章,其中我们重点介绍了最新版本中包含的一些工作,使我们更接近于在未来完全取代现有的 Classical OSD:https://ceph.net.cn/en/news/blog/2025/crimson-T-release/
如果您是 Crimson 项目的新手,请访问项目页面以获取更多信息和资源:https://ceph.net.cn/en/news/crimson
仪表盘
现在增加了对 NVMe/TCP 网关组和多个命名空间、多集群管理、OAuth 2.0 集成以及增强的 RGW/SMB 功能的支持,包括多站点自动化、分层、策略、生命周期、通知和精细复制。
MGR
Ceph Manager 的始终开启的模块/插件现在可以强制禁用。这在某些情况下是必要的,即当我们希望防止 Ceph 服务关闭或降级时,管理器被模块命令淹没。
mgr/restful,mgr/zabbix:这两个模块自 2020 年以来已被弃用,现在最终被移除。它们在过去几年中没有得到积极维护,并开始在依赖链中出现漏洞(例如:CVE-2023-46136)。restful模块的替代品是dashboard模块,它提供了更丰富、维护更好的 RESTful API。至于zabbix模块,还有其他监控解决方案,例如prometheus,这是 Ceph 用户社区中最广泛采用的解决方案。
RADOS
为纠删码池添加了期待已久的性能和空间放大优化(FastEC),包括部分读取和部分写入。
纠删码 I/O 代码的新实现提供了实质性的性能改进和一些容量改进。新代码旨在优化将纠删码与块存储 (RBD) 和文件存储 (CephFS) 结合使用时的性能,但也将对对象存储 (RGW) 有益,尤其是在使用较小对象时。必须在每个池上设置一个新标志
allow_ec_optimizations才能切换到使用新代码。一旦 OSD 和 Monitor 守护程序更新后,现有池就可以升级。无需更新客户端。纠删码池的默认插件已从 Jerasure 更改为 ISA-L。在 Tentacle 或更高版本上创建的集群在创建新池时将使用 ISA-L 作为默认插件。升级到 T 版本的集群将继续使用其现有的默认值。可以通过创建新的纠删码配置文件并在创建新池时选择它来覆盖默认值。建议新池使用 ISA-L,因为 Jerasure 库不再维护。
BlueStore 现在具有更好的压缩和新的、更快的 WAL(预写日志)。
所有组件都已切换到更快的 OMAP 迭代接口,这改进了 RGW 存储桶列表和 scrub 操作。
现在可以在极端情况下绕过
ceph_assert()以帮助灾难恢复。添加了 dencoding 验证的测试改进。
添加了一个新命令
ceph osd pool availability-status,允许用户查看集群中每个池的可用性评分。如果池中的任何 PG 不是active,或者存在未找到的对象,则认为该池不可用。否则,认为该池可用。默认情况下,评分每秒更新一次。可以使用新的配置选项pool_availability_update_interval更改此间隔。默认情况下,该功能处于关闭状态。如果需要,可以使用新的配置选项enable_availability_tracking来打开该功能。添加了另一个命令来清除特定池的可用性状态。ceph osd pool clear-availability-status <pool-name>
此功能处于技术预览阶段。
相关链接
Leader monitor 和拉伸模式状态现在包含在
ceph status输出中。当 CRUSH 规则对数据中心使用多个 take 步骤时,
ceph df命令报告拉伸模式池的MAX AVAIL不正确。PGMap::get_rule_avail错误地仅从一个数据中心计算可用空间。作为一种解决方法,使用take default和choose firstn 0 type datacenter定义 CRUSH 规则。有关详细信息,请参阅 https://tracker.ceph.com/issues/56650#note-6。升级配置了具有多个 take 步骤的 CRUSH 规则的集群可能会导致数据洗牌,因为新的 CRUSH 更改可能需要重新分配数据。相比之下,具有单 take 配置的拉伸规则在升级过程中不会导致任何数据移动。
添加了便利函数
librados::AioCompletion::cancel(),其行为与librados::IoCtx::aio_cancel()相同。配置参数
osd_repair_during_recovery已移除。该配置标志过去用于控制是否允许在正在执行恢复的 OSD 上启动操作员发起的“repair scrub”。在此 Ceph 版本中,操作员发起的 scrub 和 repair scrub 永远不会被正在执行的修复阻止。修复了由于 dmclock 的后台清理线程中对项目的处理不当导致的恢复/回填挂起问题。
mClock 调度程序使用的 OSD 的 IOPS 容量现在也会被检查,以确定它是否低于由
osd_mclock_iops_capacity_low_threshold_hdd– 设置为 50 IOPSosd_mclock_iops_capacity_low_threshold_ssd– 设置为 1000 IOPS
定义的已配置阈值。该检查旨在处理测量的 IOPS 不切实际地低的情况。如果检测到这种情况,IOPS 容量将设置为最后一个有效值或配置的默认值,以避免影响集群性能(操作缓慢或停滞)。
文档已更新,包含覆盖 OSD IOPS 容量配置的步骤。
相关链接
pybind/rados:修复
WriteOp.zero()中原始的反转参数顺序offset和length。当 pybind 调用WriteOp.zero()时,传递的参数与rados_write_op_zero不匹配,并且 offset 和 length 被交换,导致意外响应。
RBD
RBD 镜像现在可以从另一个 Ceph 集群即时导入。用于
native格式的迁移源规范已增加了cluster_name和client_name可选字段,用于在解析各自的ceph.conf类似配置文件后连接到源集群。在新 NBD 流(
"type": "nbd")的帮助下,RBD 镜像现在可以从各种外部来源/格式即时导入。支持的精确格式集及其功能取决于 NBD 服务器的功能。在 Ceph 集群之间镜像时,本地和远程 RBD 命名空间不再需要相同(但池名称仍然需要)。使用
rbd mirror pool enable命令的新选项--remote-namespace,现在可以在配置镜像时将本地命名空间与相应池中的任意远程命名空间配对,包括将默认命名空间映射到非默认命名空间,反之亦然。所有生成时间戳的 Python API 现在都返回“aware”
datetime对象,而不是“naive”对象(即,包含时区信息而不是不包含时区信息的对象)。所有时间戳都保留在 UTC 中,但包含timezone.utc使其明确,并避免返回的时间戳被误解的可能性。在 Python 3 中,许多datetime方法将“naive”datetime对象视为本地时间。引入了
rbd group info和rbd group snap info命令,分别显示有关组和组快照的信息。rbd group snap ls输出现在包括组快照 ID。未格式化的 CLI 输出中显示组快照状态的列标题已从STATUS更改为STATE。以前显示为ok的组快照状态现在显示为complete,这更具描述性。在
rbd mirror image status和rbd mirror pool status --verbose输出中,mirror_uuids字段已重命名为mirror_uuid,以强调该值始终是单个 UUID,而不是任何列表。不再允许将属于组的镜像移动到垃圾箱。
rbd trash mv命令现在在这种情况下与rbd rm的行为相同。rbd device map命令现在默认为所有设备类型使用msgr2。-o ms_mode=legacy可以传递以继续将msgr1与 krbd 一起使用。diff-iterate API 系列已扩展为允许从或在非用户类型快照之间进行 diff,这些快照只能通过其 ID 引用。
如果镜像未启用镜像,则获取镜像的镜像模式无效。公共 API -- C++
mirror_image_get_mode()、Crbd_mirror_image_get_mode()和 PythonImage.mirror_image_get_mode()-- 在禁用镜像时将返回EINVAL。如果镜像未启用镜像,则升级镜像无效。公共 API -- C++
mirror_image_promote()、Crbd_mirror_image_promote()和 PythonImage.mirror_image_promote()-- 在未启用镜像时将返回 EINVAL 而不是 ENOENT。如果镜像未启用镜像,则请求对镜像重新同步无效。公共 API -- C++
mirror_image_resync()、Crbd_mirror_image_resync()和 PythonImage.mirror_image_resync()-- 在未启用镜像时将返回 EINVAL 而不是 ENOENT。
RGW
多项修复:Lua 脚本不再无用地针对健康检查运行,S3
CopyPart、PostObject和CompleteMultipartUpload响应返回的ETag值正确加引号。IAM 策略评估现在支持条件
ArnEquals和ArnLike,以及它们的Not和IfExists变体。添加了 BEAST 前端选项
so_reuseport,它有助于通过共享单个 TCP 端口在同一主机上运行多个 RGW 实例。复制策略现在使用
s3:ReplicateObject、s3:ReplicateDelete和s3:ReplicateTags验证目标存储桶的权限。对于源存储桶,支持s3:GetObjectVersionForReplication和s3:GetObject(Version)。在获取源对象时,还会考虑s3:GetObjectAcl、s3:GetObjectLegalHold和s3:GetObjectRetention等操作。标签的复制由s3:GetObject(Version)Tagging权限控制。为 S3
CopyPart、PostObject和CompleteMultipartUpload响应返回的ETag值添加缺少的引号。PutObjectLockConfiguration现在可用于在现有已启用版本控制但未启用对象锁创建的存储桶上启用 S3 对象锁。PutBucketPolicy现在支持x-amz-confirm-remove-self-bucket-access标头。此外,即使当前策略明确拒绝访问,根用户也将始终具有修改存储桶策略的权限。增加了对 S3
PublicAccessBlock配置的RestrictPublicBuckets属性的支持。HeadBucket API 现在仅在 API 请求中明确包含
read-stats查询字符串时才报告X-RGW-Bytes-Used和X-RGW-Object-Count标头。
遥测
遥测中的
basic频道现在捕获ec_optimizations标志,这将使我们能够衡量新 FastEC 改进的功能采用情况。要选择加入遥测,请运行ceph telemetry on。
从 Reef 或 Squid 升级
在开始之前,请确保您的集群稳定且健康,没有 down、recovering、incomplete、undersized 或 backfilling PG。您可以通过在开始之前运行 ceph osd pool set noautoscale 来暂时禁用所有池的 PG 自动缩放器,如果在升级成功确认后需要自动缩放器,则在升级完成后运行 ceph osd pool unset noautoscale。
注意
您可以使用 ceph versions 命令监控升级的每个阶段的进度,该命令将告知您每种类型的守护程序正在运行的 Ceph 版本。
升级 Cephadm 集群
如果您的集群是使用 cephadm 部署的(首次在 Octopus 中引入),则升级过程是完全自动化的。要启动升级,
ceph orch upgrade start --image quay.io/ceph/ceph:v20.2.0
相同的过程用于升级到未来的次要版本。
可以使用以下命令监控升级进度:
ceph orch upgrade status
也可以使用 ceph -s(提供简单的进度条)或更详细地使用以下命令监控升级进度:
ceph -W cephadm
可以使用以下命令暂停或恢复升级:
ceph orch upgrade pause # to pause
ceph orch upgrade resume # to resume
或使用以下命令取消:
ceph orch upgrade stop
请注意,取消升级只是停止该过程。无法降级回 Reef 或 Squid。
升级非 cephadm 集群
注意
如果您的集群正在运行 Reef (18.2.x) 或更高版本,您可以选择首先将其转换为使用 cephadm,以便升级到 Tentacle 自动化(见上文)。有关更多信息,请参阅 https://docs.ceph.net.cn/en/latest/cephadm/adoption/。
如果您的集群正在运行 Reef (18.2.x) 或更高版本,systemd 单元文件名已更改为包含集群 fsid。要查找集群的正确 systemd 单元文件名,请运行以下命令:
systemctl -l | grep <daemon type>
示例
systemctl -l | grep mon | grep activeceph-6ce0347c-314a-11ee-9b52-000af7995d6c@mon.f28-h21-000-r630.service loaded active running Ceph mon.f28-h21-000-r630 for 6ce0347c-314a-11ee-9b52-000af7995d6c
在升级期间设置
noout标志。(可选,但推荐。)ceph osd set noout通过安装新软件包并重新启动 Monitor 守护程序来升级 Monitors。例如,在每个 Monitor 主机上:
systemctl restart ceph-mon.target所有 Monitors 启动后,通过在 mon map 中查找
tentacle字符串来验证 Monitor 升级是否完成。命令ceph mon dump | grep min_mon_release应报告
min_mon_release 20 (tentacle)如果不是,则意味着一个或多个 Monitors 尚未升级和重新启动和/或仲裁不包括所有 Monitors。
通过安装新软件包并重新启动所有 Manager 守护程序来升级
ceph-mgr守护程序。例如,在每个 Manager 主机上:systemctl restart ceph-mgr.target通过检查
ceph -s来验证ceph-mgr守护程序是否正在运行ceph -s... services: mon: 3 daemons, quorum foo,bar,baz mgr: foo(active), standbys: bar, baz ...
通过安装新软件包并重新启动所有 OSD 主机上的
ceph-osd守护程序来升级所有 OSDsystemctl restart ceph-osd.target升级所有 CephFS MDS 守护程序。对于每个 CephFS 文件系统:
禁用 standby_replay
ceph fs set <fs_name> allow_standby_replay false将排名数减少到 1。(如果您计划稍后恢复,请先记下原始 MDS 守护程序数。)
ceph status # ceph fs set <fs_name> max_mds 1通过定期检查状态等待集群停用任何非零排名:
ceph status在适当的主机上使用以下命令使所有 standby MDS 守护程序离线:
systemctl stop ceph-mds@<daemon_name>确认只有一个 MDS 在线并且是您的 FS 的排名 0:
ceph status通过安装新软件包并重新启动守护程序来升级最后剩下的 MDS 守护程序:
systemctl restart ceph-mds.target重新启动所有已离线的 standby MDS 守护程序:
systemctl start ceph-mds.target恢复卷的
max_mds原始值:ceph fs set <fs_name> max_mds <original_max_mds>
通过升级所有主机上的软件包并重新启动守护程序来升级所有
radosgw守护程序:systemctl restart ceph-radosgw.target通过禁止 pre-Tentacle OSD 并启用所有新的 Tentacle-only 功能来完成升级:
ceph osd require-osd-release tentacle如果您在开始时设置了
noout,请务必使用以下命令将其清除:ceph osd unset noout考虑将集群转换为使用 cephadm 部署和编排框架,以简化集群管理和未来的升级。有关将现有集群转换为 cephadm 的更多信息,请参阅 将现有集群转换为 cephadm。
升级后
使用
ceph health验证集群是否健康。考虑启用 遥测模块,将匿名使用统计信息和崩溃信息发送给 Ceph 上游开发人员。要查看将报告的内容而不实际向任何人发送任何信息,请执行以下操作:
ceph telemetry preview-all如果您对报告的数据感到满意,可以选择自动报告高级集群元数据:
ceph telemetry on聚合 Ceph 遥测数据的公共仪表盘位于 https://telemetry-public.ceph.com/。
从 Pre-Reef 版本(如 Quincy)升级
您必须先升级到 Reef (18.2.z) 或 Squid (19.2.z),然后才能升级到 Tentacle。