news 2026/9/24 13:46:39

Ceph Kraken(v11.x)发布详解:BlueStore 新后端、AsyncMessenger 与 Jewel 升级路径

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ceph Kraken(v11.x)发布详解:BlueStore 新后端、AsyncMessenger 与 Jewel 升级路径
  • 存储
  • 分布式文件系统
  • 对象存储
  • 后端
  • 高可用

【免费下载链接】ceph

Ceph is a distributed object, block, and file storage platform

项目地址:https://gitcode.com/gh_mirrors/ce/ceph
点击查看免费下载

本文以 Ceph 官方发布说明 doc/releases/kraken.rst 为主体,结合当前仓库源码,系统梳理 Kraken 系列(v11.0.2 / v11.2.0 / v11.2.1)的核心技术变更:全新 BlueStore 存储后端、默认启用的 AsyncMessenger、新引入的 ceph-mgr 守护进程、EC 池覆盖写等实验特性,并给出从 Jewel 升级到 Kraken 的完整前置条件、操作顺序与新配置项速查表,帮助运维与开发人员安全评估、部署和升级该版本。

Kraken 是 Ceph 的第 11 个稳定版本系列,代号源自北欧传说中形似头足纲生物的传奇海怪。本文覆盖该系列的三个版本:作为开发检查点发布的 v11.0.2、作为首个稳定版的 v11.2.0,以及作为系列收尾补丁版的 v11.2.1。阅读本文后,你将掌握 Kraken 相比 Jewel 的架构级变化、BlueStore 的启用与创建方法、升级前的 CRUSH/标志位检查,以及一批影响运维行为的新配置参数。

Kraken 系列版本总览

Kraken 系列共包含三个公开发布版本,各自定位如下:

版本定位核心内容
v11.0.2开发检查点(development checkpoint)首次引入 ceph-mgr 守护进程;BlueStore 大量改进;RGW 引入 sync modules、multipart copy-part 与基于 ElasticSearch 的元数据检索(技术预览)
v11.2.0首个稳定版(stable)稳定磁盘格式的 BlueStore;EC 覆盖写实验支持;默认 AsyncMessenger;OSD 故障快速检测;ceph-mgr 基础架构落地
v11.2.1系列补丁版(bugfix)Kraken 系列最后一个版本,跨所有组件的大规模缺陷修复;Luminous 稳定后 Kraken 即宣告 EOL

v11.2.0 稳定版会持续通过缺陷修复与 backport 得到维护,直到下一个稳定版 Luminous(v12.2.z)在 2017 年春季发布。v11.2.1 是 Kraken 的第一个补丁版,官方建议所有 v11.2.x 用户升级;完整逐条变更记录见 doc/changelog/v11.2.1.txt(仓库内保留的完整变更日志)。

v11.2.1 关键行为变化与安全操作

误定向操作(misdirected op)默认不再返回 ENXIO

在早期版本中,若客户端把操作发送到了错误的 OSD,OSD 会直接回复ENXIO(设备不存在),理由是“客户端或 OSD 显然存在 bug,应该把错误尽可能明显地暴露出来”。但这一行为对上层应用不友好:使用 librbd 的虚拟机原本只会收到EIO并转为只读,现在则会看到 IO 阻塞/挂起。

v11.2.1 起,只有显式开启osd_enxio_on_misdirected_op配置项(默认关闭)时才回复ENXIO。从当前仓库源码可以印证 OSD 对误定向操作的统一处理路径位于 OSDService::handle_misdirected_op:该函数先做各类断言与 EC PG 场景下的目标重算(EC 场景下 PG 分裂可能导致误判,此时直接丢弃、由客户端重发),最终通过clog->warn()记录一条“misdirected op”告警日志而非直接返回错误。PrimaryLogPG在 PrimaryLogPG.cc 中识别误定向场景并回调到该处理函数。

删除 OSD 前必须先将其从 CRUSH map 移除

Jewel 引入的缺陷(tracker #19119)破坏了如下场景的映射行为:一个仍存在于 CRUSH map 中的outOSD 被osd rm直接删除时,可能引发“misdirected op”等错误。v11.2.1 修复了该缺陷,但修复本身引入了同类风险——因为客户端与 OSD 的行为可能不一致。因此官方要求删除 OSD 时必须严格按以下顺序执行:

ceph osd crush rm osd.123 ceph osd rm osd.123

即:先crush rm将其从 CRUSH map 中移除,再osd rm删除。

快照裁剪(snap trimmer)的并发控制

v11.2.1 显著改善了对快照裁剪任务的控制与节流:

  • osd max trimming pgs(默认 2):限制单个 OSD 上同时处于快照裁剪状态的 PG 数量。当前仓库中该配置项由 OSD.cc 动态接管:变更时调用service.snap_reserver.set_max(...)调整快照预留资源,支持在线调整而无需重启 OSD。
  • osd snap trim sleep(默认 0):恢复该选项的安全使用,非零时在每次向底层系统派发裁剪操作之间插入指定秒数的延迟。实现位于 OSD::get_osd_snap_trim_sleep,并根据磁盘介质类型细分出osd_snap_trim_sleep_hddosd_snap_trim_sleep_ssdosd_snap_trim_sleep_hybrid三个变体。

v11.2.0 自 Jewel 以来的重大变更

RADOS 层

  • BlueStore 新后端:磁盘格式已稳定并通过故障与压力测试,但仍标记为实验性,官方鼓励在非生产集群和非关键数据集上试用(详见下文 BlueStore 专题)。
  • EC 池覆盖写(实验性):RADOS 对纠删码池的实验性覆盖写支持。由于磁盘格式与实现尚未定稿,必须通过特殊池选项显式开启;一旦开启,该集群将被永久禁止升级到未来版本,务必在测试集群上评估。
  • 默认启用 AsyncMessengerms type = async):替代传统 SimpleMessenger。最显著的区别是网络连接改用固定大小线程池,而不是 SimpleMessenger 的“每 socket 两个线程”。
  • OSD 故障快速检测:部分 OSD 故障现在几乎可以立即被感知,不再需要等待默认 20 秒的心跳超时(heartbeat timeout)到期。这避免了“主机仍在、ceph-osd 进程已退出”场景下 IO 长时间阻塞。
  • 新 ceph-mgr 守护进程:默认与 monitor 共置,基础设施已就位(当前仓库的守护进程实现见 src/mgr),可对接外部监控/管理系统。
  • OSDMap 编码体积缩小;OSD 在恢复或再平衡期间会暂停发起新的 scrub(详见下文升级注意事项)。

RGW 层

  • 新增用于 ElasticSearch 元数据索引的新 zone 类型(sync modules)。
  • 支持 S3 multipart 对象的 copy-part API。
  • 支持对已有 bucket 进行 reshard(注意:reshard 期间要求该 bucket 的所有 IO(尤其是写)保持静默)。
  • 支持对象级数据压缩。
  • Civetweb 升级到 1.8。
  • 支持 Swift 静态网站 API(S3 静态网站支持此前已加入)。
  • 新增 S3 bucket lifecycle API(当前仅支持对象过期)。
  • LDAP 认证实现支持自定义搜索过滤器。
  • RGW NFS 网关支持 NFSv3;并创建了 librgw 的 Python 绑定。

RBD 层

  • RBD 镜像可存储在使用新(实验性)覆盖写支持的 EC RADOS 池中。镜像必须用新的 rbd CLI 选项--data-pool <ec pool>创建,以指定存放数据对象的 EC 池;直接在一个 EC 池上创建镜像不会成功,因为镜像的底层元数据仅支持副本池:
rbd create --data-pool <ec_pool> <image_name> --size <size>
  • rbd-mirror 守护进程现在支持将动态镜像 feature 更新与镜像 metadata 键值对从主镜像复制到非主镜像。
  • 镜像快照数量可配置上限限制。
  • rbd Python API 支持异步 IO 操作。

CephFS 层

  • libcephfs 函数定义变更,以支持正确的 uid/gid 控制,库版本号相应提升。
  • standby replay MDS 在执行删除类工作负载时内存占用更低。
  • Scrub 现在可修复 backtrace,并将发现的问题填充到damage ls
  • cephfs-data-scan新增pg_files子命令,可识别受损坏或丢失 RADOS PG 影响的文件。
  • 修复了“failing to respond to cache pressure”误报告警。

BlueStore 专题:直接管理裸设备的新存储后端

BlueStore 是 Kraken 最受关注的新特性。与依赖 XFS 文件系统把对象存为文件的 FileStore 不同,BlueStore 直接管理底层块设备,实现了专为 Ceph OSD 工作负载设计的类文件系统磁盘结构。当前仓库中其实现位于 src/os/bluestore(核心为BlueStore.cc,配套 BlueFS 用于管理 RocksDB 元数据与 WAL)。

关键特性:

  • 全量数据校验和:写入磁盘的所有数据带校验和,所有读取默认进行校验和验证。
  • 内联压缩:可通过池属性按池启用,或通过客户端 hint 按对象启用。
  • 高效日志(journal):与 FileStore 将所有数据写入日志设备不同,BlueStore 只记录元数据以及(某些场景下的)小写入,因此日志的体积与吞吐要求大幅降低。日志可与数据共置在同一设备,也可放到更小的高性能设备(如 SSD/NVMe);BlueStore 日志默认仅 512 MB。

BlueStore 磁盘格式预期会继续演进,但 OSD 会在升级时提供迁移到新格式的支持。

注意:BlueStore 在 Kraken 中仍标记为“experimental”。官方建议用于概念验证与测试环境,或可容忍数据丢失的场景。虽然在测试环境中表现稳定,但代码较新、缺陷不可避免;社区希望通过 Kraken 部署的反馈,在下一个大版本 Luminous 中将其标记为稳定(并设为默认)。

启用 BlueStore 需在 ceph.conf 中加入:

enable experimental unrecoverable data corrupting features = bluestore

创建 BlueStore OSD 时,向 ceph-disk 或 ceph-deploy 传入--bluestore选项即可。

从 Jewel 升级到 Kraken 的完整指南

从 11.1.0 候选版升级

BlueStore 在 11.1.0 之后发生了磁盘格式变更,任何用 11.1.0 创建的 BlueStore OSD 都必须销毁并重建。

从 Jewel 10.2.z 升级

升级前置条件与顺序如下:

  1. 必须先升级到 Jewel 10.2.z:所有集群必须先升级到 Jewel 10.2.z,才能升级到 Kraken 11.2.z(或之后的 Luminous 12.2.z)。
  2. 必须设置sortbitwise标志:升级到 Kraken 前,Jewel 集群必须已设置该标志。最新的 Jewel(10.2.8+)在未设置时会发出健康告警,因此通常已设置;若未设置,Kraken OSD 将拒绝启动并在日志中打印错误。
  3. 升级顺序:OSD、Monitor、MDS 可按任意顺序升级;RGW 守护进程应最后升级。
  4. ceph-mgr 自动创建:升级时,新的 ceph-mgr 实例会自动与各 monitor 一同创建(Jewel→Kraken 与 Jewel→Luminous 均如此,Luminous 之后的升级则不一定)。若不想让 ceph-mgr 与 ceph-mon 共置,可自行创建新的 ceph-mgr 实例并销毁自动创建的实例。

升级注意事项与新配置选项速查

以下为升级到 Kraken 后需要注意的行为变化与新增配置项(均来自原发布说明,并可在 src/common/options/global.yaml.in 中核对部分参数定义):

配置项 / 命令默认值说明
osd scrub during recoveryfalseOSD 在恢复进行期间不再启动新的 scrub;如需恢复旧行为(不让恢复活动影响 scrub 调度)设为true
mon_dns_srv_nameceph-mon构建 monmap 的 monitor 主机/地址列表可通过 DNS SRV 记录获取,本项定义查询 DNS 时使用的服务名
osd class load list全部内置类允许 OSD 加载的对象类名列表(*表示所有类),默认包含全部现有内置类以保持向后兼容
osd class default list全部内置类客户端仅凭*xclass-readclass-write能力即可调用的类名列表;不在列表中的类需要具名能力(如allow class foo
rgw rest getusage op compatfalse控制 S3 GetUsage API 是否输出用户统计的描述性 JSON。true时输出"stats": { "TotalBytes": 516, "TotalBytesRounded": 1024, "TotalEntries": 1 }false时保持旧式数组[ 516, 1024, 1 ]
osd out .../osd in ...现在会保留 OSD 权重:将 OSD 标记 out 再 in 后,权重与之前相同(此前显式操作会被重置为 1.0,只有 mon 自动标记时才保留)
ceph osd perf列名由fs_commit_latency(ms)/fs_apply_latency(ms)改为commit_latency(ms)/apply_latency(ms),因这些指标并非 filestore 专属
mon_allow_pool_deletefalseMonitor 默认不再允许删除池;需显式设为true才允许删除,作为防误删的额外保护。当前仓库中该选项定义于 global.yaml.in,类型 bool、服务为 mon
mon keyvaluedb = rocksdb若此前手工指定了该选项,需在 mon 数据目录手工添加kv_backend文件以保留设置:echo rocksdb > /var/lib/ceph/mon/ceph-<hostname>/kv_backend。新 monitor 默认使用 rocksdb,但若该文件不存在,既有 monitor 将使用 leveldb;mon keyvaluedb现在只影响创建时的后端选择
osd crush initial weight-1(负值)为新 OSD 指定 CRUSH 权重。此前 0(默认)表示按 OSD 存储容量自动加权;现在 0 表示权重为 0,负值(新默认)表示按容量自动加权。若配置文件中显式写了 0,需改为负值(如 -1)以保持原行为
osd crush location已废弃不再支持,请改用crush location配置项
osd_max_omap_entries_per_request131072(Kraken 时)librados omap get_keys/get_vals 服务端单次响应键数上限
osd_max_omap_bytes_per_request4 MB(Kraken 时)omap 单次响应总字节数上限,防止粗心用户单次请求过量数据(当前仓库默认值已演进,见 global.yaml.in)
恢复优先级计算已更新;升级过程中可能出现不符合直觉的恢复优先级排序(新旧 OSD 使用不同优先级区间),升级完成后集群将使用一致的值

其他需要注意的打包与生态变化:

  • debian 开发包(lib*-dev)不再包含静态库与 libtool 伪库(.la 文件),共享库(.so)照常打包。
  • jerasure 与 shec 插件可在运行时检测 SIMD 指令,不再需要为不同处理器显式配置。jerasure_genericjerasure_sse3jerasure_sse4jerasure_neonshec_genericshec_sse3shec_sse4shec_neon均已废弃,直接使用这些插件会在 mon 日志中看到告警,请改用jerasureshec

v11.2.1 各组件修复要点

v11.2.1 包含跨所有 Ceph 组件的大量缺陷修复,按主题整理如下(完整逐条清单见 doc/changelog/v11.2.1.txt):

  • 构建与打包(build/ops):Ubuntu Xenial 上 ceph-base 缺少 psmisc 依赖;debian 包缺少 logrotate;SELinux 安装时并行 relabel;spec 文件引用不存在的 ceph-create-keys systemd 单元导致 ceph-mon 无法经 preset 启用;systemd 在 ceph-mon 启动失败后重启过快;systemd 调整为先启动 MON 再启动 OSD。
  • ceph-disk:新增fix子命令的 Kraken backport;不支持非ceph集群名的问题;启动时启用目录型 OSD;bluestore 下--setgroup组名错误、prepare组名错误;分区创建与设备节点创建的竞态;list在带 SELinux context 挂载选项时误报挂载错误。
  • CephFS / MDS / client:修复 ceph-fuse 快照测试崩溃、与 MDS 断连后不恢复、两客户端访问同一文件死锁、大规模 cap/inode 下 rejoin 时心跳超时、超大 xattr 导致 MDS 崩溃、非本地 quota 变更需 IO 才可见、readdir提速(跳过无关 dn)、rmfailed命令无输出、文件打开标志内部归一化、handle_client_caps段错误等。
  • librbd / rbd / rbd-mirror / rbd-nbd:允许在不打开父镜像的情况下打开镜像;resize RPC 消息向后兼容;is_exclusive_lock_ownerAPI 应 ping OSD;break lock 时防止自我 blacklist;rbd-mirror 补删快照读错误、漏检镜像重新同步、未修改镜像 failover/failback 导致 split-brain、克隆镜像镜像竞态;rbd-nbd 增加信号处理器并校验内核映射;EC 池不支持覆盖写时拒绝使用。
  • mon / OSD / bluestore / msgr:缓存分层基础池last_force_resend不被尊重;大 quorum 下msg/async忙循环;force_create_pg可能卡在 creating;osd crush move不生效;osd crush set crushmap缺健全性检查;客户端节流器可在线调整;默认不发送 ENXIO(见上文);scrub 请求优先级提升、异步 scrub sleep 实现;bluestore 的 statfs 不把 DB 分区计入可用空间、Allocator 整数截断、onode 深解码;PG 统计发布、pg log split 索引重建等。
  • RGW / multisite:多站点大量修复(large period 解码失败、data sync命令挂起、元数据同步崩溃、SLO 对象 EPERM、zonegroup 更新回退删除、短 zone id 未清理等);Swift API 系列修复(对象过期remove-x-delete、根级特性/crossdomain.xml/info/healthcheck、x-openstack-request-id 头、versioning 禁用等);S3 相关(X-Amz-Expires v4 认证、版本列表缺 VersionIdMarker、压缩对象范围下载内容错误、copy-part 后对象大小错误、lifecycle 线程处理已删除 bucket 等)。
  • 测试与工具:ceph-object-corpus 增加 kraken 对象;radosgw-admin增加object stat命令到 usage;rados/ceph-objectstore-tool等工具修复若干崩溃与返回值问题。

v11.0.2 开发检查点要点

v11.0.2 是 Kraken 的首个开发检查点,标志着:

  • ceph-mgr 首次亮相:提供额外监控能力及外部监控/管理系统接口的新守护进程(当前仓库见 src/mgr),也是后续版本中 dashboard、prometheus 等模块的基座。
  • BlueStore 密集迭代:大量关于 BlueFS(异步 compaction、direct IO、WAL)、bitmap/bit 分配器、2Q 缓存 trim、校验和、压缩、onode 内存占用与编码优化的改动(对应 src/os/bluestore 下的BlueStore.ccBlueFS.ccAllocator.cc等文件)。
  • RGW 新能力:sync modules、multipart copy-part、经 ElasticSearch 的元数据检索(技术预览)。

该版本同时将 AsyncMessenger 设为默认消息后端,并引入 EC 覆盖写的早期实现基础。

源码印证路径速览

以下仓库位置可帮助读者深入验证本文涉及的关键实现:

  • src/os/bluestore:BlueStore/BlueFS 后端实现。
  • src/osd/OSD.cc#L1653-L1706:handle_misdirected_op误定向操作处理(ENXIO 行为的基础)。
  • src/osd/OSD.cc#L3659-L3668:osd_snap_trim_sleep系列选项取值逻辑;OSD.cc#L10089-L10188 为osd_max_trimming_pgs的在线调整入口。
  • src/common/options/global.yaml.in:mon_allow_pool_deleteosd_max_omap_entries_per_requestosd_max_omap_bytes_per_request等配置项的定义与默认值。
  • src/mgr:ceph-mgr 守护进程源码。
  • doc/changelog/v11.2.1.txt:v11.2.1 完整逐条变更日志。

结语

Kraken 是 Ceph 迈向 Luminous 的关键过渡版本:BlueStore 首次以稳定磁盘格式走向用户,AsyncMessenger 成为默认消息框架,ceph-mgr 架构正式落地,EC 覆盖写则开启了纠删码池的新可能。对运维而言,本文给出的升级顺序(先 Jewel 10.2.z、确保sortbitwise、最后升级 RGW)、OSD 删除顺序(先crush rmosd rm)以及新配置项速查表,是安全完成此次升级的实用清单;对开发者而言,上述源码路径则为深入理解这些行为变化提供了起点。

  • 存储
  • 分布式文件系统
  • 对象存储
  • 后端
  • 高可用

【免费下载链接】ceph

Ceph is a distributed object, block, and file storage platform

项目地址:https://gitcode.com/gh_mirrors/ce/ceph
点击查看免费下载
上一篇:SunEditor自定义插件开发:从零开始构建你的专属功能
下一篇:终极bpftrace调试指南:10个快速定位系统问题的实战技巧

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/24 13:46:37

Flask 扩展 OpenID 认证

在构建 Web 应用时,用户身份认证是不可或缺的部分。传统的用户系统需要开发者自行设计注册、登录、会话管理等功能,既费时又容易引发安全隐患。而 OpenID 提供了一种更为便捷和安全的认证机制,通过第三方身份服务(如 Google、Yahoo 等)实现统一登录,极大提升了开发效率和…

作者头像 李华
网站建设 2026/9/24 13:46:31

Flask 扩展 Mail 邮件

Flask 是一个轻量级的 Web 框架,本身并不自带邮件功能。Flask-Mail 是一个官方推荐的扩展,用于在 Flask 应用中轻松集成邮件发送功能。它封装了对邮件协议的底层操作,提供了直观的接口用于构建、发送邮件以及处理相关的配置逻辑。这个扩展可以和常见的邮件服务商(如 Gmail、…

作者头像 李华
网站建设 2026/9/24 13:45:34

Flask Statics 静态文件

在使用 Flask 构建 Web 应用时,静态文件的管理是基础但非常关键的一环。静态文件包括 CSS、JavaScript、图片等资源,这些资源不需要由服务器动态生成,通常直接由浏览器请求加载。掌握如何正确配置和使用静态资源,不仅能够优化页面加载速度,也能提升开发效率和代码组织水平…

作者头像 李华
网站建设 2026/9/24 13:43:12

幼猫猫粮科学选购指南:基于国标与营养成分数据的多维度评测

摘要 幼猫处于快速生长发育期&#xff0c;营养需求远高于成猫。本文依据GB/T 31217-2014《全价宠物食品 猫粮》及农业农村部相关规范&#xff0c;构建了以粗蛋白、粗脂肪、灰分、牛磺酸及原料组成为核心的五维评价体系。以此体系对花千果H3无谷冻干猫粮、星期一无谷牛肉猫粮、雪…

作者头像 李华
网站建设 2026/9/24 13:42:44

HFSS仿真AC耦合电容:从寄生参数到S参数建模全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华