v12.1.4 Luminous (RC) 发布

TheAnalyst

这是 Luminous 的第五个发布候选版本,下一个长期稳定版本。我们不得不发布此版本,因为之前的 RC (12.1.3) 中存在一个影响升级的错误。

Ceph Luminous (v12.2.0) 将成为下一个长期稳定版本系列的基础。自 Kraken (v11.2.z) 和 Jewel (v10.2.z) 以来,已经发生了重大变化,并且升级过程并非易事。请仔细阅读这些发行说明。

Kraken 相比的主要变化

  • 常规:

  • RADOS:

    • BlueStore:

    • 纠删码池现在具有 对覆盖的完全支持,允许它们与 RBD 和 CephFS 一起使用。

    • ceph-mgr:

      • 现在有一个新的守护进程,ceph-mgr,它是任何 Ceph 部署的必需部分。虽然在 ceph-mgr 停止运行时 IO 可以继续,但指标将不会刷新,并且某些与指标相关的调用(例如 ceph df)可能会被阻塞。我们建议部署多个 ceph-mgr 实例以提高可靠性。请参阅下面的 升级 说明。
      • ceph-mgr 守护进程包含一个 基于 REST 的管理 API。该 API 仍然是实验性的并且有些有限,但将成为基于 API 的 Ceph 管理的基础。
      • ceph-mgr 还包含一个 Prometheus 导出器 插件,它可以将 Ceph perfcounters 提供给 Prometheus。
      • ceph-mgr 现在有一个 Zabbix 插件。使用 zabbix_sender,它会向 Zabbix 服务器发送 trapper 事件,其中包含 Ceph 集群的高级信息。这使得监控 Ceph 集群的状态并在发生故障时发送通知变得容易。
    • 集群的整体可扩展性得到了提高。我们已经成功测试了具有多达 10,000 个 OSD 的集群。

    • 每个 OSD 现在都可以关联一个 设备类(例如,hdd 或 ssd),允许 CRUSH 规则将数据轻松映射到系统中的设备子集。通常不需要手动编写 CRUSH 规则或手动编辑 CRUSH。

    • 还有一个新的 upmap 异常机制,允许将单个 PG 移动到周围以实现完美分布(这需要 Luminous 客户端)。

    • 每个 OSD 现在根据其底层设备是 HDD 还是 SSD 调整其默认配置。通常不需要手动调整。

    • 原型 mClock QoS 队列算法 现在可用。

    • 现在有一个回退机制,可以防止 OSD 被无法当前处理 IO 的对象或 PG 的请求过载。

    • 有一个简化的 OSD 替换过程,该过程更加健壮。

    • 您可以使用 ceph features 查询所有连接的守护进程和客户端支持的功能和(明显)版本。

    • 您可以配置要允许连接到集群的最旧的 Ceph 客户端版本,通过 ceph osd set-require-min-compat-client,并且 Ceph 将阻止您启用将破坏与这些客户端兼容性的功能。

    • 几个睡眠设置,包括 osd_recovery_sleep、osd_snap_trim_sleep 和 osd_scrub_sleep 已经重新实现以高效工作。(这些在某些情况下用于解决限制后台工作的问题。)

    • crush choose_args 编码已更改为使其与架构无关。

    • 现在期望将池与使用它的应用程序关联。完成升级到 Luminous 后,集群将尝试将现有的池关联到已知的应用程序(即 CephFS、RBD 和 RGW)。正在使用的未与应用程序关联的池将生成健康警告。可以使用新的 ceph osd pool application enable 命令手动关联任何未关联的池。有关详细信息,请参阅文档中的 将池与应用程序关联

    • 添加了新的命令 pg force-recovery 和 pg-force-backfill。使用它们可以提高指定 pg 的恢复或回填优先级,以便在其他任何 pg 之前进行恢复/回填。请注意,这些命令不会中断正在进行的恢复/回填,而只是在其他 pg 之前将指定的 pg 放入队列,以便尽快恢复/回填。新的命令 pg cancel-force-recovery 和 pg cancel-force-backfill 恢复先前强制 pg 的默认恢复/回填优先级。

  • ceph-mon:

    • 添加了新的配置“public bind addr”以支持动态环境,例如 Kubernetes。如果设置,Ceph MON 守护进程可以本地绑定到 IP 地址,并在网络上通告不同的公共地址。
  • RGW:

    • RGW 元数据搜索由 ElasticSearch 提供支持,现在支持通过 RGW 本身服务于最终用户请求,并且还支持自定义元数据字段。创建了一种查询语言和一组 RESTful API,以便用户能够按其元数据搜索对象。还添加了允许控制自定义元数据字段的新 API。
    • RGW 现在支持动态存储桶索引分片。随着存储桶中对象数量的增加,RGW 将自动响应存储桶索引的分片。无需用户干预或存储桶大小容量规划。需要在 ceph.conf 中将rgw dynamic resharding 设置为 true 才能启用此功能。
    • RGW 引入了使用三种选项管理加密密钥的上传对象服务器端加密:自动加密(仅建议用于测试设置)、类似于 Amazon SSE-C 规范的客户提供的密钥,以及通过外部密钥管理服务(Openstack Barbican)类似于 Amazon SSE-KMS 规范。 加密
    • RGW 现在具有类似 AWS 的存储桶策略 API 的初步支持。目前,策略是一种表达一系列新的授权概念的方式。将来它将成为基于 API 的 Ceph 管理的基础。
    • RGW 已经通过使用 rados 命名空间整合了几个元数据索引池。
    • 已添加 S3 对象标记 API;虽然支持获取/放置/删除对象标记以及放置对象 API 中的标记,但尚未支持策略和生命周期中的标记。
    • RGW 多站点现在支持在存储桶级别启用或禁用同步。
  • RBD:

    • RBD 现在完全稳定地支持纠删码池,通过 rbd create 的新 --data-pool 选项。
    • RBD 镜像的 rbd-mirror 守护进程现在是高可用的。我们建议部署多个 rbd-mirror 实例以提高可靠性。
    • RBD 镜像的 rbd-mirror 守护进程应使用每个实例的唯一 Ceph 用户 ID,以支持新的镜像仪表板。
    • 默认的“rbd”池不再在集群创建期间自动创建。此外,在未指定池时 RBD CLI 使用的默认池的名称可以通过新的 rbd default pool = 覆盖。配置选项。
    • 通过新的 rbd trash CLI 命令提供延迟图像删除的初始支持。即使是那些被克隆主动使用的图像,也可以移动到回收站并在以后删除。
    • 新的池级别 rbd mirror pool promote 和 rbd mirror pool demote 命令,用于批量提升/降级池内的所有镜像图像。
    • 镜像现在可以选择性地支持通过 rbd mirroring replay delay = 可配置的复制延迟配置选项。
    • 改进了启用对象映射功能时的丢弃处理。
    • rbd CLI import 和 copy 命令现在检测到稀疏并保留稀疏区域。
    • 图像和快照现在将包含创建时间戳。
    • 指定 RBD 客户端的用户授权功能已简化。使用 RBD 功能配置文件的通用语法为“mon ‘profile rbd’ osd ‘profile rbd[-read-only][ pool={pool-name}[, ...]]’”。有关详细信息,请参阅文档中的“用户管理”。
  • CephFS:

    • 多个活动 MDS 守护进程现在被认为是稳定的。可以在活动的 CephFS 文件系统上向上或向下调整活动 MDS 服务器的数量。
    • CephFS 目录碎片化 现在稳定,并在新的文件系统上默认启用。要在现有的文件系统上启用它,请使用“ceph fs set <fs_name> allow_dirfrags”。大型或非常繁忙的目录会自动分片并(可能)分布到多个 MDS 守护进程上。
    • 可以显式地将目录子树固定到特定的 MDS 守护进程,在自动负载平衡不理想或无效的情况下。
    • 可以使用新的 ceph fs authorize 命令创建具有自动设置的访问给定 CephFS 文件系统的权限的新客户端密钥。
    • cephfs-journal-tool 的“apply”模式已被删除
    • 当在仅包含一个数据池的 CephFS 文件系统上运行“df”时,结果现在反映了该数据池中使用的文件存储空间和可用空间(仅限 fuse 客户端)。
  • 杂项:

    • 发布包现在正在为Debian Stretch 构建。请注意,QA 仅限于 CentOS 和 Ubuntu(xenial 和 trusty)。我们构建的发行版包括

      • CentOS 7 (x86_64 和 aarch64)
      • Debian 8 Jessie (x86_64)
      • Debian 9 Stretch (x86_64)
      • Ubuntu 16.04 Xenial (x86_64 和 aarch64)
      • Ubuntu 14.04 Trusty (x86_64)
    • 可用的 Ceph for FreeBSD 的第一个版本包含一组完整的特性,除了 Bluestore 之外。它将运行构建存储集群所需的一切。对于客户端,所有访问方法都可用,尽管 CephFS 只能通过 Fuse 实现访问。RBD 镜像可以安装在 FreeBSD 系统上通过 rbd-ggate

      Ceph 版本通过常规的 FreeBSD 端口和软件包系统发布。当前版本可用作:net/ceph-devel。一旦 Luminous 进入官方发布,此版本将可用作 net/ceph。未来的开发版本将通过 net/ceph-devel 提供

      有关此端口的更多详细信息,请参见:README.FreeBSD

    • CLI 更改:

      • ceph -s 或 ceph status 命令具有全新的外观。
      • ceph mgr metadata 将转储与每个 mgr 守护进程关联的元数据。
      • ceph versions 或 ceph {osd,mds,mon,mgr} versions 总结了正在运行的守护进程的版本。
      • ceph {osd,mds,mon,mgr} count-metadata类似地,列出了可以通过 ceph {osd,mds,mon,mgr} metadata 命令看到的任何其他守护进程元数据。
      • ceph features 总结了连接的客户端和守护进程的功能和版本。
      • ceph osd require-osd-release取代了旧的 require_RELEASE_osds 标志。
      • ceph osd pg-upmap、ceph osd rm-pg-upmap、ceph osd pg-upmap-items、ceph osd rm-pg-upmap-items 可以显式管理 upmap 项目(请参阅 使用 pg-upmap)。
      • ceph osd getcrushmap 返回 crush map 版本号到 stderr,ceph osd setcrushmap [version] 仅当版本匹配时才会注入更新的 crush map。这允许 crush map 在离线更新后重新注入到集群中,而无需担心破坏正在进行的变化(例如,由新添加的 osd 或其他管理员的更改)。
      • ceph osd create 已被 ceph osd new 替换。这应该被用户界面工具(例如 ceph-disk)隐藏。
      • ceph osd destroy 将标记一个 OSD 已销毁,并删除其 cephx 和 lockbox 密钥。但是,OSD id 和 CRUSH map 条目将保留在原位,允许 id 被替换设备重用,并且数据重新平衡最少。
      • ceph osd purge 将删除集群中 OSD 的所有痕迹,包括其 cephx 加密密钥、dm-crypt lockbox 密钥、OSD id 和 crush map 条目。
      • ceph osd ls-tree将输出给定 CRUSH 名称(如主机或机架名称)下的 OSD id 列表。这对于应用于整个子树的更改很有用。例如,ceph osd down `ceph osd ls-tree rack1`。
      • ceph osd {add,rm}-{noout,noin,nodown,noup} 允许将 noout、noin、nodown 和 noup 标志应用于特定的 OSD。
      • ceph log last [n] 将输出集群日志的最后 n 行。
      • ceph mgr dump 将转储 MgrMap,包括当前活动的 ceph-mgr 守护进程和任何待机守护进程。
      • ceph mgr module ls 将列出活动的 ceph-mgr 模块。
      • ceph mgr module {enable,disable}将启用或禁用指定的 mgr 模块。该模块必须存在于 ceph-mgr 正在运行的主机上配置的 mgr_module_path 中。
      • ceph osd crush swap-bucket将交换层次结构中的两个 CRUSH 存储桶,同时保留存储桶的 ID。这允许替换整个设备子树(例如,用新镜像的 BlueStore OSD 替换整个主机上的 FileStore OSD),而不会破坏相邻设备上的数据分布。
      • ceph osd set-require-min-compat-client配置集群需要支持的最旧的客户端版本。如果更改此设置会违反此设置,其他更改(如 CRUSH 可调参数)将失败。如果当前连接到集群的客户端版本早于指定的版本,则更改此设置也会失败。
      • ceph config-key dump 转储 config-key 条目及其内容。(现有的 ceph config-key list 仅转储密钥名称,而不是值。)
      • ceph config-key list 已弃用,取而代之的是 ceph config-key ls。
      • ceph config-key put 已弃用,取而代之的是 ceph config-key set。
      • ceph auth list 已弃用,取而代之的是 ceph auth ls。
      • ceph osd crush rule list 已弃用,取而代之的是 ceph osd crush rule ls。
      • ceph osd set-{full,nearfull,backfillfull}-ratio 设置集群范围内的各种完整阈值比率(当集群拒绝 IO 时,当集群警告即将达到完整时,当 OSD 将延迟将 PG 重新平衡到自身时,分别)。
      • ceph osd reweightn 将指定多个 OSD 的 reweight 值在一个命令中。这等效于一系列 ceph osd reweight 命令。
      • ceph osd crush {set,rm}-device-class 管理新的 CRUSH 设备类 功能。请注意,手动创建或删除设备类名称通常是不必要的,因为它足够智能,可以自行管理。ceph osd crush class ls 和 ceph osd crush class ls-osd 将输出所有现有的设备类以及给定设备类下的 OSD ID 列表。
      • ceph osd crush rule create-replicated 替换了旧的 ceph osd crush rule create-simple 命令以创建复制池的 CRUSH 规则。值得注意的是,它接受一个用于目标设备类的 class 参数(例如,ssd 或 hdd)。
      • ceph mon feature ls 将列出 MonMap 中记录的监视器功能。ceph mon feature set 将设置一个可选功能(目前尚不存在这些功能)。
      • ceph tellhelp 现在将返回用法摘要。
      • ceph fs authorize 创建一个具有自动设置的访问给定 CephFS 文件系统的权限的新客户端密钥。
      • ceph health 结构化输出(JSON 或 XML)不再包含描述时间同步状态的“timechecks”部分。此信息现在可通过“ceph time-sync-status”命令获得。
      • ceph health 结构化输出中某些额外的字段,如果监视器磁盘空间不足(这重复了正常健康警告消息中的信息),现在已消失。
      • ceph -w 输出默认情况下不包含审核日志条目。添加一个 --watch-channel=audit 或 --watch-channel=* 以查看它们。
      • 新的 “ceph -w” 行为 - “ceph -w” 的输出不再包含 I/O 速率、可用空间、pg 信息等,因为这些信息不再被记录到中央日志(“ceph -w” 显示的是中央日志)。可以通过运行 ceph pg stat 获取相同的信息;或者,可以使用 ceph osd pool stats 确定每个池的 I/O 速率。虽然这些命令不像 ceph -w 那样自动更新,但它们可以通过提供 --format=选项来返回格式化输出。

与 Jewel 的主要变更

  • RADOS:
    • 我们现在默认使用 AsyncMessenger(ms 类型 = async)而不是旧的 SimpleMessenger。  最明显的区别是,我们现在使用固定大小的线程池进行网络连接(而不是 SimpleMessenger 的每个套接字两个线程)。
    • 现在可以几乎立即检测到一些 OSD 故障,而之前必须等待心跳超时(默认为 20 秒)过期。  这可以防止 IO 在主机仍然启动但 ceph-osd 进程不再运行时被阻止很长时间。
    • 编码的 OSDMap 大小已减小。
    • OSD 现在在恢复或重新平衡进行时会停止擦除。
  • RGW:
    • RGW 现在支持 S3 多部分对象 copy-part API。
    • 现在可以离线重新分片现有的存储桶。离线存储桶重新分片当前需要停止特定存储桶的所有 IO(尤其是写入)。(有关自动在线重新分片,请参见 Luminous 上面的新功能。)
    • RGW 现在支持对象的数据压缩。
    • Civetweb 版本已升级到 1.8
    • 现在支持 Swift 静态网站 API(之前已添加 S3 支持)。
    • 已添加 S3 存储桶生命周期 API。请注意,目前它仅支持对象过期。
    • 已为 LDAP 身份验证实现添加了自定义搜索过滤器支持。
    • 已为 RGW NFS 网关添加了 NFS 版本 3 的支持。
    • 已为 librgw 创建了一个 Python 绑定。
  • RBD:
    • rbd-mirror 守护进程现在支持将动态图像功能更新和从主图像到非主图像的图像元数据键/值对复制。
    • 可以可选地将图像快照的数量限制为可配置的最大值。
    • rbd Python API 现在支持异步 IO 操作。
  • CephFS:
    • libcephfs 函数定义已更改以启用正确的 uid/gid 控制。库版本已增加以反映接口更改。
    • 待机重放 MDS 守护进程现在在执行删除操作的工作负载上消耗更少的内存。
    • Scrub 现在修复回溯,并用发现的错误填充 damage ls。
    • cephfs-data-scan 的新 pg_files 子命令可以识别受损坏或丢失的 RADOS PG 影响的文件。
    • 已修复错误的“未能响应缓存压力”警告。

从 Jewel 或 Kraken 升级

  1. 确保已启用 sortbitwise 标志

    # ceph osd set sortbitwise

  2. 确保您的集群稳定且健康(没有 down 或 recovering 的 OSD)。(可选,但推荐。)

  3. 在升级监视器时,请勿创建任何新的 erasure-code 池。

  4. 可以使用 ceph versions 命令监控每个阶段的升级进度,该命令将告诉您每个类型守护进程正在运行的 ceph 版本。

  5. 在升级期间设置 noout 标志。(可选但推荐。)

    # ceph osd set noout

  6. 通过安装新软件包并重新启动监视器守护进程来升级监视器。请注意,与之前的版本不同,ceph-mon 守护进程必须首先升级

    # systemctl restart ceph-mon.target

    一旦所有监视器都启动,通过查找 mon map 中的 luminous feature string 来验证监视器升级是否完成。例如

    # ceph mon feature ls

    应该在 current monmap (epoch NNN) persistent: [kraken,luminous] required: [kraken,luminous] 下包含 luminous

    在持久功能中

  7. 添加或重新启动 ceph-mgr 守护进程。如果您是从 kraken 升级,请升级软件包并使用以下命令重新启动 ceph-mgr 守护进程:

    # systemctl restart ceph-mgr.target

    如果您是从 kraken 升级,您可能已经部署了 ceph-mgr 守护进程。如果没有,或者如果您是从 jewel 升级,可以使用 ceph-deploy 或 ceph-ansible 等工具部署新的守护进程。例如

    # ceph-deploy mgr create HOST

    通过检查 ceph -s 来验证 ceph-mgr 守护进程是否正在运行

    # ceph -s

    ... services: mon: 3 daemons, quorum foo,bar,baz mgr: foo(active), standbys: bar, baz ...

  8. 通过安装新软件包并在所有主机上重新启动 ceph-osd 守护进程来升级所有 OSD

    # systemctl restart ceph-osd.target

    可以使用新的 ceph versions 或 ceph osd versions 命令来监控 OSD 升级进度

    # ceph osd versions { "ceph version 12.2.0 (...) luminous (stable)": 12, "ceph version 10.2.6 (...)": 3, }

  9. 通过升级软件包并在所有主机上重新启动守护进程来升级所有 CephFS 守护进程

    # systemctl restart ceph-mds.target

  10. 通过升级软件包并在所有主机上重新启动守护程序来升级所有 radosgw 守护程序

    # systemctl restart radosgw.target

  11. 通过禁止 pre-luminous OSD 来完成升级

    # ceph osd require-osd-release luminous

    如果您在开始时设置了 noout,请务必使用以下命令清除它:

    # ceph osd unset noout

  12. 使用 ceph health 验证集群是否健康。

从 pre-Jewel 版本(如 Hammer)升级

必须先升级到 Jewel (10.2.z),然后再尝试升级到 Luminous。

升级兼容性说明,Kraken 到 Luminous

  • 配置选项 osd pool erasure code stripe width 已被 osd pool erasure code stripe unit 替换,并且赋予了 erasure code profile 设置 stripe_unit 覆盖的权限。有关更多详细信息,请参阅 /rados/operations/erasure-code#erasure-code-profiles。

  • rbd 和 cephfs 可以使用 erasure coding 与 bluestore。这可以通过将 allow_ec_overwrites 设置为 true 来启用。由于这依赖于 bluestore 的校验和来执行深度擦除,因此不允许在 filestore 上存储的池上启用此设置。

  • rados df JSON 输出现在将数字值打印为数字而不是字符串。

  • mon_osd_max_op_age 选项已重命名为 mon_osd_warn_op_age(默认值:32 秒),以表明我们在此年龄生成警告。还有一个新的 mon_osd_err_op_age_ratio,表示为 mon_osd_warn_op_age 的倍数(默认值:128,大约 60 分钟)来控制何时生成错误。

  • 单个 RADOS 对象的默认最大大小已从 100GB 减少到 128MB。100GB 的限制在实践中完全不切实际,而 128MB 的限制略高,但尚属合理。如果您的应用程序直接写入 librados 并使用大于 128MB 的对象,则可能需要调整 osd_max_object_size。

  • rados ls 和 librados 对象列表操作的语义一直有些令人困惑,即“whiteout”对象(在逻辑上不存在,如果您尝试访问它们将返回 ENOENT)包含在结果中。以前 whiteouts 仅发生在缓存层池中。在 luminous 中,逻辑上删除但已快照的对象现在会产生一个 whiteout 对象,因此它们将出现在 rados ls 结果中,即使尝试读取这样的对象也会导致 ENOENT。在这种情况下,可以使用 rados listsnaps 操作来枚举存在的快照。

    这可能看起来有点奇怪,但比拥有一个已删除但已快照的对象完全隐藏且无法从 librados 的对象枚举能力中看到的情况不那么奇怪。Ceph 的未来版本可能会包含一个替代对象枚举接口,使其更自然和高效地枚举所有对象及其快照和克隆元数据。

  • 已弃用的 crush_ruleset 属性已最终删除;请使用 crush_rule 代替 osd pool get ... 和 osd pool set ... 命令。

  • osd pool default crush replicated ruleset 选项已被删除,并替换为 psd pool default crush rule 选项。默认值为 -1,这意味着 mon 将为复制池选择 CRUSH 地图中第一个类型的复制规则。Erasure coded 池的规则在池创建时未指定时会自动创建。

  • 我们不再测试 FileStore ceph-osd 后端与 btrfs 的组合。我们不建议使用 btrfs。如果您正在使用基于 btrfs 的 OSD 并希望升级到 luminous,您需要在 ceph.conf 中添加以下内容:

    enable experimental unrecoverable data corrupting features = btrfs

    该代码已经成熟,不太可能更改,但我们仅继续针对 btrfs 测试 Jewel 稳定分支。我们建议将这些 OSD 移动到 FileStore 与 XFS 或 BlueStore。

  • erasure code profiles 的 ruleset-* 属性已重命名为 crush-*,以 (1) 摆脱过时的“ruleset”术语,并更清楚地说明其目的。还有一个新的可选 crush-device-class 属性,用于指定 erasure coded 池要使用的 CRUSH 设备类。现有的 erasure code profiles 在升级完成时(当运行 ceph osd require-osd-release luminous 命令时)将自动转换,但任何创建 erasure coded 池的配置工具可能需要更新。

  • osd crush tree 的 XML 输出结构略有更改,以更好地匹配 osd tree 输出。顶层结构现在是 nodes 而不是 crush_map_roots。

  • 当将网络分配给公共网络而不是集群网络时,公共网络的网络规范也将用于集群网络。在早期版本中,这会导致集群服务绑定到 0.0.0.0,从而使集群服务比公共服务更公开。仅指定集群网络时,公共服务仍将绑定到 0.0.0.0。

  • 在以前的版本中,如果客户端将 op 发送到错误的 OSD,OSD 将回复 ENXIO。这里的理由是客户端或 OSD 显然存在错误,我们希望尽可能清楚地显示错误。现在,只有在启用 osd_enxio_on_misdirected_op 选项(默认情况下关闭)时,才会发送 ENXIO 回复。这意味着先前会收到 EIO 并进入只读状态的 VM,现在将看到被阻止/挂起的 IO。

  • “journaler allow split entries”配置设置已被删除。

  • “mon_warn_osd_usage_min_max_delta”配置选项已被删除,并且相关的健康警告已被禁用,因为它不能解决正在恢复或 CRUSH 规则未针对集群中的所有设备的集群。

  • librados:

    • omap_get_keys 和 omap_get_vals librados 函数的一些变体已被弃用,以支持 omap_get_vals2 和 omap_get_keys2。新的方法包括一个输出参数,指示是否还有剩余的键需要获取。以前这必须从请求的键数与返回的键数推断出来,但由于 OSD 端对单个 omap 请求可以返回的键或字节数有限制,这会中断。这些限制是在 kraken 中引入的,但默认情况下被禁用(通过设置非常大的限制 1 GB),因为使用新弃用接口的用户无法判断是否应该获取更多键。对于 C++ 接口中的独立调用 (IoCtx::get_omap_{keys,vals}),librados 已更新为在客户端进行循环以通过多次调用 OSD 提供正确的结果。但是,对于用于构建多操作事务的方法,客户端循环不切实际,并且这些方法已被弃用。请注意,在较旧的 librados 版本上使用 IoCtx 方法或任何版本的 librados 上的弃用方法,如果/何时启用新的 OSD 限制,将导致不完整的结果。

    • 原始 librados rados_objects_list_open (C) 和 objects_begin (C++) 对象列表 API,在 Hammer 中已弃用,现已最终删除。使用此接口的用户必须更新其软件以使用 rados_nobjects_list_open (C) 和 nobjects_begin (C++) API 或新的 rados_object_list_begin (C) 和 object_list_begin (C++) API,然后再将客户端 librados 库更新到 Luminous。

      使用最新版本的 librados 和 pre-Hammer OSD 的对象枚举(通过任何 API)不再受支持。请注意,没有内置的 Ceph 服务依赖于通过弃用 API 进行对象枚举,因此可能只有外部 librados 用户受到影响。

      最新的 (推荐的) rados_object_list_begin (C) 和 object_list_begin (C++) API 只能在启用 SORTBITWISE 标志的集群上使用 (Jewel 及更高版本)。(请注意,在升级到 Jewel 之前,需要设置此标志。)

  • CephFS:

    • 在 /etc/fstab 中配置 ceph-fuse 安装时,可以使用 “ceph.” 的新语法=” 在 options 列中,而不是将配置放在 device 列中。旧的语法仍然有效。有关详细信息,请参阅文档页面“在文件系统表中挂载 CephFS”。
    • 没有 ‘p’ 标志的 CephFS 客户端在其身份验证功能字符串中,将不再能够设置配额或任何布局字段。此标志以前仅限制布局中 pool 和 namespace 字段的修改。
    • CephFS 将生成健康警告,如果您拥有的待机守护进程少于它认为您想要的。默认情况下,如果您曾经有过待机守护进程,这将是 1,如果您没有,则为 0。您可以使用 ceph fs setstandby_count_wanted进行自定义。将其设置为零将有效地禁用健康检查。
    • “ceph mds tell ...”命令已被删除。它已被 “ceph tell mds....” 取代。

其他值得注意的更改