v9.1.0 Infernalis release candidate 发布

sage

这是第一个 Infernalis release candidate。自 Hammer 以来已经进行了一些重大更改,升级过程并非易事。请仔细阅读。

获取 RELEASE CANDIDATE

v9.1.0 包已推送到开发版本仓库

http://download.ceph.com/rpm-testing http://download.ceph.com/debian-testing

更多信息,请参阅

https://docs.ceph.net.cn/docs/master/install/get-packages/

或者使用 ceph-deploy 通过以下方式安装

ceph-deploy install --testing HOST

已知问题

  • librbd 和 librados ABI 兼容性已破坏。请小心在客户端机器上安装此 RC(例如,运行 qemu 的机器)。它将在最终的 v9.2.0 版本中修复。

自 HAMMER 以来的主要变化

  • 常规:
    • Ceph 守护程序现在通过 systemd 管理(Ubuntu Trusty 除外,它仍然使用 upstart)。
    • Ceph 守护进程以 ‘ceph’ 用户而不是 root 身份运行。
    • 在 Red Hat 发行版上,还有一个 SELinux 策略。
  • RADOS:
    • RADOS 缓存层现在可以将写操作代理到基础层,从而无需强制将对象迁移到缓存中即可处理写操作。
    • SHEC 纠删编码支持不再被标记为实验性。SHEC 通过额外的存储空间换取更快的修复速度。
    • 现在有一个统一的队列(因此具有优先级)的客户端 IO、恢复、擦洗和快照修剪。
    • 对低级修复工具(ceph-objectstore-tool)进行了许多改进。
    • 内部 ObjectStore API 已得到显著清理,以便于新的存储后端,例如 NewStore。
  • RGW:
    • Swift API 现在支持对象过期。
    • 有很多 Swift API 兼容性改进。
  • RBD:
    • rbd du 命令显示实际使用情况(在启用 object-map 时快速)。
    • object-map 功能已经进行了许多稳定性改进。
    • object-map 和 exclusive-lock 功能可以动态启用或禁用。
    • 现在可以存储用户元数据并设置与单个镜像关联的持久 librbd 选项。
    • 新的 deep-flatten 功能允许展平克隆及其所有快照。(以前无法展平快照。)
    • export-diff 命令现在更快(它使用 aio)。还有一个新的 fast-diff 功能。
    • 可以使用后缀指定单位的 --size 参数(例如,--size 64G)。
    • 有一个新的 rbd status 命令,目前显示谁打开/映射了镜像。
  • CephFS:
    • 现在可以重命名快照。
    • 在管理、诊断和检查和修复工具方面进行了持续改进。
    • 客户端缓存状态的缓存和撤销因未使用的 inode 而显著改进。
    • ceph-fuse 客户端在 32 位主机上的行为更好。

发行版兼容性

我们决定停止支持许多较旧的发行版,以便我们可以迁移到较新的编译器工具链(例如,C++11)。虽然仍然可以在较旧的发行版上构建 Ceph,方法是安装回移植的开发工具,但我们不会为 ceph.com 构建和发布发行包。

特别是,

  • CentOS 7 或更高版本;我们已停止支持 CentOS 6(以及其他 RHEL 6 衍生版本,例如 Scientific Linux 6)。
  • Debian Jessie 8.x 或更高版本;Debian Wheezy 7.x 的 g++ 对 C++11 的支持不完整(并且没有 systemd)。
  • Ubuntu Trusty 14.04 或更高版本;Ubuntu Precise 12.04 已不再受支持。
  • Fedora 22 或更高版本。

从 FIREFLY 升级

无法直接从 Firefly v0.80.z 升级。所有集群必须先升级到 Hammer v0.94.4 或更高版本的 v0.94.z 版本;然后才能升级到 Infernalis 9.2.z。

请注意,v0.94.4 尚未发布,但您可以使用以下命令从 gitbuilder 升级到测试版本:

ceph-deploy install --dev hammer HOST

v0.94.4 Hammer 点版本将在 v9.2.0 Infernalis 之前发布。

从 HAMMER 升级

  • 对于所有支持 systemd 的发行版(CentOS 7、Fedora、Debian Jessie 8.x、OpenSUSE),Ceph 守护程序现在使用本机 systemd 文件管理,而不是旧的 sysvinit 脚本。例如,

    systemctl start ceph.target # 启动所有守护程序 systemctl status ceph-osd@12 # 检查 osd.12 的状态

    尚未使用 systemd 的主要发行版是 Ubuntu trusty 14.04。(下一个 Ubuntu LTS,16.04,将使用 systemd 代替 upstart。)

  • Ceph 守护进程现在默认以用户和组 ceph 身份运行。ceph 用户具有 Fedora 和 Debian 分配的静态 UID(也用于 RHEL/CentOS 和 Ubuntu 等衍生发行版)。在 SUSE 上,ceph 用户在创建用户时将获得动态分配的 UID。

    如果您的系统已经有 ceph 用户,升级软件包将导致问题。我们建议您先删除或重命名现有的 ‘ceph’ 用户,然后再升级。

    在升级时,管理员有两个选择

    1. 将以下行添加到所有主机的 ceph.conf

      setuser match path = /var/lib/ceph/$type/$cluster-$id

      如果守护程序的数据目录仍然由 root 拥有,这将使 Ceph 守护程序以 root 身份运行(即,不放弃权限并切换到用户 ceph)。新部署的守护程序将使用由用户 ceph 拥有的数据创建,并将以减少的权限运行,但升级的守护程序将继续以 root 身份运行。

    2. 修复升级过程中的数据所有权。这是首选选项,但工作量更大。每个主机的过程将是

      1. 升级 ceph 包。这将创建 ceph 用户和组。例如

        ceph-deploy install --stable infernalis HOST

      2. 停止守护程序。

        service ceph stop # fedora, centos, rhel, debian stop ceph-all # ubuntu

      3. 修复所有权

        chown -R ceph:ceph /var/lib/ceph

      4. 重新启动守护程序。

        start ceph-all # ubuntu systemctl start ceph.target # debian, centos, fedora, rhel

  • 实验性 KeyValueStore OSD 后端的磁盘格式已更改。在升级使用它的任何测试集群之前,您需要删除任何使用该后端的 OSD。

升级说明

  • 当池配额达到时,librados 操作现在会无限期地阻塞,就像集群已满时一样。(以前它们会返回 -ENOSPC)。默认情况下,完全填满的集群或池现在将阻塞。如果您的 librados 应用程序可以优雅地处理 ENOSPC 或 EDQUOT 错误,则可以使用新的 librados OPERATION_FULL_TRY 标志来获取错误返回值。

值得注意的更改

注意:在找到生成它们的更省时的方法之前,这些说明有些简略。

  • 构建:现在支持 C++11
  • 构建:许多 cmake 改进
  • 构建:OSX 构建修复(Yan, Zheng)
  • 构建:删除 rest-bench
  • ceph-disk:许多修复(Loic Dachary)
  • ceph-disk:支持多路径设备(Loic Dachary)
  • ceph-fuse:在 32 位主机上表现良好(Yan, Zheng)
  • ceph-objectstore-tool:许多改进(David Zafman)
  • 通用:bufferlist 性能调整(Piotr Dalek, Sage Weil)
  • 通用:使互斥锁更高效
  • 通用:一些异步压缩基础设施(Haomai Wang)
  • librados:添加 FULL_TRY 和 FULL_FORCE 标志,用于处理完全填满的集群或池(Sage Weil)
  • librados:修复通知完成竞态条件(#13114 Sage Weil)
  • librados, libcephfs:随机化客户端 nonce(Josh Durgin)
  • librados:pybind:修复二进制 omap 值(Robin H. Johnson)
  • librbd:修复大于缓存大小的读取(Lu Shi)
  • librbd:元数据过滤器修复(Haomai Wang)
  • librbd:尽可能使用 write_full(Zhiqiang Wang)
  • mds:避免在驱逐会话之前发出 cap 警告(John Spray)
  • mds:修复日志对象中的预期孔洞(#13167 Yan, Zheng)
  • mds:修复删除池上的 SnapServer 崩溃(John Spray)
  • mds:许多修复(Yan, Zheng, John Spray, Greg Farnum)
  • mon:添加 MonitorDBStore 上的缓存(Kefu Chai)
  • mon:‘ceph osd metadata’ 可以转储所有 osd(Haomai Wang)
  • mon:检测 kv 后端故障(Sage Weil)
  • mon:修复新池的 CRUSH 映射测试(Sage Weil)
  • mon:修复 min_last_epoch_clean 跟踪(Kefu Chai)
  • mon:各种缩放修复(Sage Weil)
  • mon:简化会话处理,修复内存泄漏(Sage Weil)
  • mon:升级必须通过 hammer(Sage Weil)
  • msg/async:许多修复(Haomai Wang)
  • osd:缓存 proxy-write 支持(Zhiqiang Wang, Samuel Just)
  • osd:基于写入近度配置提升(Zhiqiang Wang)
  • osd:不要发送重复的 MMonGetOSDMap 请求(Sage Weil, Kefu Chai)
  • osd:erasure-code:修复 SHEC 浮点错误(#12936 Loic Dachary)
  • osd:erasure-code:更新到 ISA-L 2.14(Yuan Zhou)
  • osd:修复 hitset 对象命名以使用 GMT(Kefu Chai)
  • osd:修复各种内存泄漏(Sage Weil)
  • osd:修复 FileStore 中 peek_queue 锁定(Xinze Chi)
  • osd:修复提升与完全缓存层(Samuel Just)
  • osd:修复 pg 仍在激活时重新排队(#13116 Samuel Just)
  • osd:修复 scrub stat 错误(Sage Weil, Samuel Just)
  • osd:强制提升 EC 无法处理的操作(Zhiqiang Wang)
  • osd:改进具有大内存页面的机器上的行为(Steve Capper)
  • osd:将多个 setattr 调用合并到一个 setattrs 调用中(Xinxin Shu)
  • osd:newstore 原型(Sage Weil)
  • osd:ObjectStore 内部 API 重构(Sage Weil)
  • osd:SHEC 不再是实验性的
  • osd:限制驱逐操作(Yunchuan Wen)
  • osd:升级必须通过 hammer(Sage Weil)
  • osd:使用 SEEK_HOLE / SEEK_DATA 进行稀疏复制(Xinxin Shu)
  • rbd:rbd-replay-prep 和 rbd-replay 改进(Jason Dillaman)
  • rgw:通过管理套接字公开不健康的 worker 数量(Guang Yang)
  • rgw:修复 Content-Type 标头的拼写(Robin H. Johnson)
  • rgw:修复从 Swift DLO 获取对象时 X-Object-Manifest 的解码(Radslow Rzarzynski)
  • rgw:修复 sysvinit 脚本
  • rgw:修复具有多个实例的 sysvinit 脚本(Sage Weil, Pavan Rallabhandi)
  • rgw:改进过时桶处理(Radoslaw Rzarzynski)
  • rgw:将日志记录到 /var/log/ceph 而不是 /var/log/radosgw
  • rgw:重构 X-Trans-Id 标头以符合 Swift API(Radoslaw Rzarzynski)
  • rgw:s3 encoding-type 用于获取桶(Jeff Weber)
  • rgw:在 ceph.conf 中设置每个用户的最大桶数(Vikhyat Umrao)
  • rgw:支持 Swift 过期 API(Radoslaw Rzarzynski, Yehuda Sadeh)
  • rgw:user rm 是幂等的(Orit Wasserman)
  • selinux 策略(Boris Ranto, Milan Broz)
  • systemd:许多修复(Sage Weil, Owen Synge, Boris Ranto, Dan van der Ster)
  • systemd:守护进程现在以用户 ceph 身份运行