注意

本文档适用于 Ceph 的开发版本。

Bobtail

Bobtail 是 Ceph 的第二个稳定版本。它以墨鱼(order Sepiolida)的近亲——短尾鱿鱼(bobtail squid)命名。

v0.56.7 “bobtail”

此 Bobtail 更新修复了 radosgw 的一系列错误(包括多重删除引起的易触发崩溃)、XFS 在断电时可能导致的数据损坏问题,以及几个 OSD 问题,包括一个会影响老集群的内存“泄漏”。

值得注意的更改

  • ceph-fuse: 在 fork() 之后创建 finisher 标志

  • debian: 修复 prerm/postinst 钩子;升级时不要重启守护进程

  • librados: 修复异步 aio 完成唤醒(表现为 rbd 挂起)

  • librados: 修复 osd 满然后不满时挂起的问题

  • librados: 修复 aio 完成引用计数的锁定问题

  • librbd python bindings: 修复 stripe_unit, stripe_count

  • librbd: 使镜像创建默认可配置

  • mon: 修复 mon 命令中 mds id 的验证问题

  • osd: 避免在对等操作期间过度进行磁盘更新

  • osd: 避免在擦洗时过度使用内存

  • osd: 避免在擦洗时心跳失败/自杀

  • osd: 其他次要错误修复

  • osd: 使用 fdatasync 而不是 sync_file_range(可能避免 xfs 断电损坏)

  • rgw: 列出对象时正确转义前缀

  • rgw: 修复复制属性

  • rgw: 修复多重删除时的崩溃问题

  • rgw: 修复使用 ops log socket 时的锁定/崩溃问题

  • rgw: 修复 usage logging

  • rgw: 处理深层 uri 资源

有关更详细的信息,请参阅完整的 变更日志

v0.56.6 “bobtail”

值得注意的更改

  • rgw: 修复垃圾回收

  • rpm: 修复软件包依赖项

有关更详细的信息,请参阅完整的 变更日志

v0.56.5 “bobtail”

升级

  • ceph-disk[-prepare,-activate] 的行为在各个方面都发生了变化。应该没有任何兼容性问题,但 chef 用户应该注意。

值得注意的更改

  • mon: 修复仲裁功能集记录(对 argonaut -> bobtail -> cuttlefish mon 升级很重要)

  • osd: 次要对等操作错误修复

  • osd: 修复池重命名时的一些错误

  • osd: 修复偶尔损坏的 pg 统计信息

  • osd: 修复连接损坏的 v0.56[.0] 客户端时的行为

  • rbd: 导入时避免 FIEMAP ioctl(在某些内核上已损坏)

  • librbd: 修复了几个请求/回复顺序错误

  • librbd: 仅在需要时在新镜像上设置 STRIPINGV2 功能

  • librbd: 新的异步 flush 方法以解决 qemu 挂起(也需要 QEMU 更新)

  • librbd: 对 flatten 的一些修复

  • ceph-disk: 支持 dm-crypt

  • ceph-disk: 许多向后移植允许使用 ceph-deploy, chef 进行 bobtail 部署

  • sysvinit: 首次失败时不要停止启动守护进程

  • udev: 修复基于 redhat 的发行版的规则

  • raring 的构建修复

有关更详细的信息,请参阅完整的 变更日志

v0.56.4 “bobtail”

升级

  • 修复了 'ceph osd tree --format=json' 输出的语法。

  • MDS 磁盘格式已从先前版本 v0.57 更改。特别是,升级到 v0.56.4 是安全的,但如果使用 MDS for CephFS,则不能从 v0.56.4 升级到 v0.57;必须直接升级到 v0.58(或更高版本)。

值得注意的更改

  • mon: 修复 IPv6 启动时的错误

  • 减少内部日志记录的默认内存使用量(所有守护进程)

  • rgw: 修复存储桶删除

  • rgw: 日志轮换后重新打开日志

  • rgw: 修复多分段上传列表

  • rgw: 复制到自身时不要复制对象

  • osd: 修复带 - 或 _ 的池的 caps 解析

  • osd: 允许在降级、擦洗、恢复时修剪 pg 日志(减少内存消耗)

  • osd: 修复 'journal aio = true' 时潜在的死锁

  • osd: 各种集合创建/删除、重命名、临时集合的修复

  • osd: 各种 PG split 修复

  • osd: deep-scrub omap 键/值数据

  • osd: 修复 journal replay 中的罕见错误

  • osd: 杂项快照跟踪修复

  • osd: 修复池删除时恢复预留中的泄漏

  • osd: 修复连接管理中的错误

  • osd: 修复重新平衡时操作顺序的问题

  • ceph-fuse: 使用正确的单位报告文件系统大小

  • mds: 通过虚拟 xattrs 获取和设置目录布局策略

  • mds: 磁盘格式修订(参见上面的升级说明)

  • mkcephfs, init-ceph: 解决可预测文件名带来的潜在安全问题

有关更详细的信息,请参阅完整的 变更日志

v0.56.3 “bobtail”

此版本包含几个围绕 OSD 稳定性的错误修复。最重要的是,解决了 OSD 在启动后不久无响应(偶尔因内部心跳检查而崩溃)的问题。请升级。

升级

  • 修复了一个错误,即没有 IO 请求的 PG 的 OSDMap epoch 未被记录。如果集群中存在完全空闲的池(例如,CephFS 通常使用的 datametadata 池),并且自上次重新启动 ceph-osd 守护进程以来已经过去了大量的 OSDMap epoch,那么当守护进程重新启动时,这些 map 将被重新处理。如果有很多 map,这个过程可能需要一段时间。一种解决方法是在升级软件包后重新启动守护进程之前,通过 IO “触碰”任何空闲池

    rados bench 10 write -t 1 -b 4096 -p {POOLNAME}
    

    这通常会生成足够的 IO 来触碰池中的每个 PG,而不会生成显著的集群负载,并且还会清理它创建的任何临时对象。

值得注意的更改

  • osd: 启动前刷新对等工作队列

  • osd: 为空闲 PG 保留 osdmap epoch

  • osd: 修复和简化心跳的连接处理

  • osd: 避免在无效管理命令时崩溃

  • mon: 修复监视器选举和命令中的罕见竞争条件

  • mon: 强制 OSD reweights 介于 0 和 1 之间(注意:不是 CRUSH 权重)

  • mon: 近似客户端、恢复带宽日志记录

  • radosgw: 修复了一些 XML 格式以符合 Swift API 不一致性

  • radosgw: 修复 usage accounting 错误;添加修复工具

  • radosgw: 使 fallback URI 可配置(在某些 Web 服务器上是必需的)

  • librbd: 修复中断的 'unprotect' 操作处理

  • mds, ceph-fuse: 允许通过虚拟 xattrs 修改文件和目录布局

有关更详细的信息,请参阅完整的 变更日志

v0.56.2 “bobtail”

此版本包含广泛的错误修复、稳定性改进和一些性能改进。请升级。

升级

  • ‘osd scrub min interval’ 和 ‘osd scrub max interval’ 的含义略有变化。 min interval 以前没有意义,而 max interval 只会在负载足够低时触发擦洗。现在,min interval 选项以旧的 max interval 的方式工作(如果负载低,它会在经过此时间后触发擦洗),而 max interval 将强制擦洗,无论负载如何。默认选项已相应调整。如果您在 ceph.conf 中自定义了这些选项,请在升级时查看它们的值。

  • 默认情况下,通过直接调用 ceph-mon --mkfs 生成的 CRUSH map 现在将副本分布到主机而不是 OSD。正在使用的任何 Ceph 配置工具可能会受到影响,尽管可能是更好的,因为跨主机分布是一种更常见的行为。如果您使用 mkcephfs 创建集群,默认的 CRUSH 规则仍然由初始 ceph.conf 中的主机和/或机架数量推断。

值得注意的更改

  • osd: 快照修剪修复

  • osd: 擦洗快照元数据

  • osd: 修复 osdmap 修剪

  • osd: 杂项对等修复

  • osd: 如果内部线程卡住/挂起,停止与对等节点的心跳

  • osd: PG 删除对其他工作负载更友好

  • osd: 修复恢复开始延迟(导致恢复非常慢)

  • osd: 修复显式请求的擦洗调度

  • osd: 修复擦洗间隔配置选项

  • osd: 改进恢复与客户端 io 调整

  • osd: 改进 'slow request' 警告详情以更好地诊断

  • osd: 默认 CRUSH map 现在跨主机分布,而不是 OSD

  • osd: 修复 librbd 客户端在 32 位主机上触发的崩溃

  • librbd: 修复与旧 OSD 通信时的错误处理

  • mon: 修复一些罕见的崩溃

  • ceph command: 轻松调整 CRUSH 可调参数的能力

  • radosgw: 对象复制不复制源 ACL

  • rados command: 修复 omap 命令用法

  • sysvinit script: 在远程主机上正确设置 ulimit -n

  • msgr: 修复消息排队中的窄竞争条件

  • 修复了某些旧发行版(例如 RHEL 5.x)上的编译问题

有关更详细的信息,请参阅完整的 变更日志

v0.56.1 “bobtail”

此版本有两个关键修复。请升级。

升级

  • v0.56 和任何其他版本之间存在协议兼容性问题,现已修复。如果您的 radosgw 或 RBD 客户端正在运行 v0.56,则需要升级它们。如果它们运行的是 v0.56 之前的版本,则可以保持不变。

值得注意的更改

  • osd: 修复 XFS, ext4(或任何其他非 btrfs)的提交顺序,以防止断电或内核恐慌时数据丢失

  • osd: 修复 CALL 操作的兼容性

  • osd: 在加入集群之前处理旧的 osdmaps(修复启动缓慢)

  • osd: 修复几个与恢复相关的崩溃

  • osd: 修复 journal 处于(非默认)aio 模式时的大型 io 请求

  • log: 修复日志记录代码中可能的死锁

有关更详细的信息,请参阅完整的 变更日志

v0.56 “bobtail”

Bobtail 是 Ceph 的第二个稳定版本,以短尾鱿鱼命名:https://en.wikipedia.org/wiki/Bobtail_squid

自 v0.48 “argonaut” 以来的主要功能

  • 对象存储守护进程 (OSD): 改进了线程、小 io 性能和恢复期间的性能

  • 对象存储守护进程 (OSD): 定期对所有存储数据进行“深度”擦洗以检测潜在的磁盘错误

  • RADOS 块设备 (RBD): 支持镜像的写时复制克隆。

  • RADOS 块设备 (RBD): 更好的客户端缓存。

  • RADOS 块设备 (RBD): 建议性镜像锁定

  • Rados 网关 (RGW): 支持高效的使用情况日志记录/抓取(用于计费)

  • Rados 网关 (RGW): 扩展的 S3 和 Swift API 覆盖(例如,POST、多对象删除)

  • Rados 网关 (RGW): 改进了大型对象的条带化

  • Rados 网关 (RGW): OpenStack Keystone 集成

  • Fedora、RHEL/CentOS、OpenSUSE 和 SLES 的 RPM 软件包

  • mkcephfs: 支持自动格式化和挂载 XFS 和 ext4(除了 btrfs)

升级

有关详细信息,请参阅文档从 Argonaut 升级到 Bobtail

  • Cephx 身份验证现在默认启用(自 v0.55 起)。升级集群而不调整 Ceph 配置可能会阻止系统自行启动。我们建议首先修改配置以指示身份验证已禁用,然后才升级到最新版本

    auth client required = none
    auth service required = none
    auth cluster required = none
    
  • Ceph 守护进程可以在集群在线且正在服务时逐个升级。

  • ceph-osd 守护进程必须在任何 radosgw 守护进程重启之前升级和重启,因为它们依赖于一些新的 ceph-osd 功能。(ceph-monceph-osdceph-mds 守护进程可以按任何顺序升级和重启。)

  • 一旦每个单独的守护进程被升级和重启,它就不能降级。

  • 一旦仲裁中的所有守护进程都已升级,ceph-mon 守护进程集群将迁移到新的内部在线协议。仅升级大多数节点(例如,三分之二)可能会使集群暴露在单个额外故障可能危及可用性的情况下(因为未升级的守护进程无法参与新协议)。我们建议不要在 ceph-mon 升级之间等待很长时间。

  • radosgw 的 ops log 和 usage log 现在默认关闭。如果您需要这些日志(例如,用于计费),则必须明确启用它们。对于 .log 池中所有对象操作的日志记录(请参阅 radosgw-admin log ...

    rgw enable ops log = true
    

    对于聚合带宽使用情况的 usage logging(请参阅 radosgw-admin usage ...

    rgw enable usage log = true
    
  • 在所有 ceph-osd 守护进程升级之前,您不应创建或使用“格式 2”RBD 镜像。请注意,“格式 1”仍然是默认值。您可以使用新的 ceph osd lsceph tell osd.N version 命令仔细检查您的集群。ceph osd ls 将提供集群中所有 OSD ID 的列表,您可以使用它来编写一个简单的 shell 循环来显示所有 OSD 版本字符串

    for i in $(ceph osd ls); do
        ceph tell osd.${i} version
    done
    

兼容性更改

  • ‘ceph osd create [<uuid>]’ 命令现在拒绝不是 UUID 的参数。(以前它会接受一个可选的整数 OSD id。)自 v0.47 以来,正确的语法一直是 ‘ceph osd create [<uuid>]’,但旧的调用约定被默默地忽略了。

  • CRUSH map 根节点现在具有类型 root 而不是类型 pool。这避免了与 RADOS 池混淆,因为它们没有直接关系。任何使用 ceph osd crush ... 命令的脚本或工具可能需要相应调整。

  • ‘ceph osd pool create <poolname> <pgnum>’ 命令现在需要 pgnum 参数。以前这是可选的,默认为 8,这几乎不是一个好数字。

  • 降级模式(当副本数少于所需数量时)现在可以通过 min_size 参数在每个池的基础上进行更多配置。默认情况下,min_size 为 0 时,允许对具有 N - floor(N/2) 个副本的对象进行 I/O,其中 N 是预期的副本总数。Argonaut 行为等同于 min_size = 1,因此如果仍然存在任何完全最新的副本,I/O 始终是可能的。在某些情况下,例如网络分区抖动,min_size = 1 可能会导致整体可用性降低。

  • sysvinit start/stop 脚本现在默认将最大打开文件 ulimit 调整为 16384。在大多数系统上,默认值为 1024,因此这是一个增加并且不会破坏任何东西。但是,如果某些系统具有较高的初始值,则此更改将降低限制。可以通过在 ceph.conf 文件中的适当部分添加条目来显式调整该值。例如

    [global]
            max open files = 32768
    
  • ‘rbd lock list’ 和 ‘rbd showmapped’ 不再使用制表符作为其输出中的分隔符。

  • 创建新池时,PG 数量有一个可配置的限制,以防止用户意外指定一个荒谬的 pg_num。它可以通过监视器上的 'mon max pool pg num' 选项进行调整,默认为 65536(Linux 内核客户端当前支持的最大值)。

  • 与 rados 用户关联的 osd capabilities 语法自 0.48 argonaut 以来发生了变化。新格式在很大程度上向后兼容,但有两个向后不兼容的更改

    • 在一个授权中指定池列表,即 'allow r pool=foo,bar',现在是在单独的授权中完成,即 'allow r pool=foo, allow r pool=bar'。

    • 按池所有者限制池访问('allow r uid=foo')已删除。此功能不太有用,在实践中未使用。

    新格式记录在 ceph-authtool man page 中。

  • ‘rbd cp’ 和 ‘rbd rename’ 使用 rbd 作为默认目标池,无论源镜像在哪个池中。以前它们会默认为与源镜像相同的池。

  • ‘rbd export’ 不再为每个写入的对象打印消息。它只报告百分比完成情况,就像其他长时间运行的操作一样。

  • ‘ceph osd tree’ 现在使用 4 位小数来表示权重,因此输出对人类更友好

  • 几个监视器操作现在是幂等的

    • ceph osd pool create

    • ceph osd pool delete

    • ceph osd pool mksnap

    • ceph osd rm

    • ceph pg <pgid> revert

值得注意的更改

  • auth: 默认启用 cephx

  • auth: 扩展了身份验证设置以提供更大的灵活性

  • auth: 使用 cephx 时对消息进行签名

  • Fedora 18, CentOS/RHEL 6 的构建修复

  • ceph: 新的 'osd ls' 和 'osd tell <osd.N> version' 命令

  • ceph-debugpack: 杂项改进

  • ceph-disk-prepare: 创建并标记 GPT 分区

  • ceph-disk-prepare: 支持外部日志、默认挂载/mkfs 选项等。

  • ceph-fuse/libcephfs: 许多杂项修复、admin socket 调试

  • ceph-fuse: 修复根目录中 .. 的处理

  • ceph-fuse: 许多修复(包括内存泄漏、挂起)

  • ceph-fuse: 用于 /etc/fstab 的挂载助手 (mount.fuse.ceph)

  • ceph.spec: 杂项打包修复

  • common: 线程池大小现在可以在运行时调整

  • config: $pid 现在可作为元变量使用

  • crush: 树类型的默认根现在是 'root' 而不是 'pool'(以避免与 rados 池混淆)

  • crush: 通过可调参数修复 chooseleaf 的重试行为

  • crush: 可调参数已记录;功能位现在存在并强制执行

  • libcephfs: java 包装器

  • librados: 几个错误修复(罕见竞争条件、锁定错误)

  • librados: 一些锁定修复

  • librados: watch/notify 修复,杂项内存泄漏

  • librbd: 'discard' 支持的一些修复

  • librbd: 细粒度条带化功能

  • librbd: 修复内存泄漏

  • librbd: 功能齐全且记录在案的镜像克隆

  • librbd: 镜像(建议性)锁定

  • librbd: 改进的缓存(对象不存在)

  • librbd: 'flatten' 命令用于断开克隆父子关系

  • librbd: 'protect'/'unprotect' 命令用于防止克隆父级被删除

  • librbd: 裁剪超出镜像末尾的请求。

  • librbd: 修复了 qemu 中运行的某些 windows 访客的问题(删除浮点用法)

  • log: 修复内存缓冲行为(仅在崩溃时写入日志消息)

  • mds: 修复中止会话关闭时的 ino 释放、相对 getattr 路径、mds 关闭、其他杂项

  • mds: 杂项修复

  • mkcephfs: 修复默认 keyring、osd data/journal 位置

  • mkcephfs: 支持格式化 xfs, ext4(以及 btrfs)

  • init: 支持自动挂载 xfs 和 ext4 osd 数据目录

  • mon, radosgw, ceph-fuse: 修复内存泄漏

  • mon: 改进的 ENOSPC, fs 错误检查

  • mon: 破坏性较小的 ceph-mon --mkfs 行为

  • mon: 杂项修复

  • mon: 'health detail' 中关于卡住 PG 的信息更丰富

  • mon: 'pg <pgid> query' 中关于恢复和回填的信息

  • mon: 新的 'osd crush create-or-move ...' 命令

  • mon: 新的 'osd crush move ...' 命令允许您重新排列 CRUSH 层次结构

  • mon: 可选地以 json 格式转储 'osd tree'

  • mon: 可配置的最大 osd 数量上限 (mon max osd)

  • mon: 许多错误修复(各种竞争条件导致 ceph-mon 崩溃)

  • mon: 新的磁盘元数据以促进未来的 mon 更改(post-bobtail)

  • mon: 选举错误修复

  • mon: 限制客户端消息(限制内存消耗)

  • mon: 基于 osd 历史记录限制 osd 抖动(限制过载或不稳定的集群上的 osdmap “thrashing”)

  • mon: 'report' 命令用于转储详细的集群状态(例如,用于报告错误)

  • mon: osdmap 标志(如 noup, noin)现在会导致健康警告

  • msgr: 改进的故障处理代码

  • msgr: 许多错误修复

  • osd, mon: 遵守新的 'nobackfill' 和 'norecover' osdmap 标志

  • osd, mon: 当 CRUSH 可调参数在使用时,使用功能位锁定缺少这些参数的客户端

  • osd: 回填预留框架(避免用回填数据淹没新的 osd)

  • osd: 回填目标预留(提高恢复期间的性能)

  • osd: 更好地跟踪最近的慢操作

  • osd: capability 语法改进,错误修复

  • osd: 客户端与恢复 io 优先级划分

  • osd: crush 性能改进

  • osd: 默认日志大小为 5 GB

  • osd: PG “splitting” 的实验性支持(现有池的 pg_num 调整)

  • osd: 修复某些错误路径上的内存泄漏

  • osd: 修复读取时 fs EIO 错误的检测

  • osd: PG 对等和线程的重大重构

  • osd: 许多错误修复

  • osd: 更多/更好的关于正在进行的操作的转储信息

  • osd: 新的 caps 结构(参见兼容性说明)

  • osd: 新的 'deep scrub' 将比较副本之间的对象内容(默认每周一次)

  • osd: 新的 'lock' rados 类用于通用对象锁定

  • osd: 可选的 'min' pg size

  • osd: 恢复预留

  • osd: 擦洗效率改进

  • osd: 修复了几个乱序回复错误

  • osd: 修复了几个罕见的对等情况

  • osd: 一些与请求排队相关的性能改进

  • osd: 如果 journal 是块设备,则使用整个设备

  • osd: 当内核支持 syncfs(2) 时使用它,即使 glibc 不支持

  • osd: 各种乱序操作回复修复

  • rados: 复制、重命名池的能力

  • rados: bench 命令现在会自行清理

  • rados: 'cppool' 命令用于复制 rados 池

  • rados: 'rm' 现在接受要删除的对象列表

  • radosgw: POST 支持

  • radosgw: 用于管理使用情况统计的 REST API

  • radosgw: 修复存储桶统计信息更新中的错误

  • radosgw: 修复 copy-object 与属性的问题

  • radosgw: 修复大型对象的 range header、ETag 引用、GMT 日期、其他兼容性修复

  • radosgw: 改进的垃圾回收框架

  • radosgw: 许多小的修复和清理

  • radosgw: openstack keystone 集成

  • radosgw: 条带化大型(非多分段)对象

  • radosgw: 支持多对象删除

  • radosgw: 支持 swift manifest 对象

  • radosgw: 虚荣存储桶 dns 名称

  • radosgw: 各种 API 兼容性修复

  • rbd: 从 stdin 导入,导出到 stdout

  • rbd: 新的 'ls -l' 选项以查看带元数据的镜像

  • rbd: 为 'rbd map' 使用通用 id 和 keyring 选项

  • rbd: 错误时不发出 usage

  • udev: 修复包含分区的 rbd 镜像的符号链接创建

  • upstart: 所有守护进程类型的工作文件(默认不启用)

  • wireshark: ceph 协议解析器补丁已更新

v0.54

升级

  • 与 rados 用户关联的 osd capabilities 语法自 0.48 argonaut 以来发生了变化。新格式在很大程度上向后兼容,但有两个向后不兼容的更改

    • 在一个授权中指定池列表,即 'allow r pool=foo,bar',现在是在单独的授权中完成,即 'allow r pool=foo, allow r pool=bar'。

    • 按池所有者限制池访问('allow r uid=foo')已删除。此功能不太有用,在实践中未使用。

    新格式记录在 ceph-authtool man page 中。

  • 对新的 osd capability format 解析的错误修复正确地验证了允许的操作。如果现有 rados 用户在升级后遇到权限错误,则其 capabilities 可能配置错误。有关 osd capabilities 的详细信息,请参阅 ceph-authtool man page。

  • ‘rbd lock list’ 和 ‘rbd showmapped’ 不再使用制表符作为其输出中的分隔符。

由 Ceph 基金会为您呈现

Ceph 文档是由非营利性 Ceph 基金会 资助和托管的社区资源。如果您希望支持这项工作和我们的其他努力,请考虑 立即加入