v12.1.3 Luminous (RC) 发布

TheAnalyst

这是 Luminous 的最终发布候选版本,这是下一个长期稳定版本。

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

Kraken 相比的主要变化

  • 常规:

  • RADOS:

    • BlueStore:

      • ceph-osd 的新的 BlueStore 后端现在稳定,并且是新创建的 OSD 的新默认设置。BlueStore 通过直接管理物理硬盘或固态硬盘,而无需使用 XFS 等中间文件系统来管理每个 OSD 存储的数据。这提供了更高的性能和功能。请参阅 存储设备BlueStore 配置参考
      • BlueStore 支持 所有 Ceph 存储数据的完整数据和元数据校验和
      • BlueStore 支持使用 zlib、snappy 或 LZ4 进行 行内压缩。(Ceph 还支持用于 RGW 压缩 的 zstd,但不建议出于性能原因在 BlueStore 中使用 zstd。)
    • 纠删码池现在对 覆盖 具有完全支持,允许它们与 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 性能计数器提供给 Prometheus。
      • ceph-mgr 现在有一个 Zabbix 插件。使用 zabbix_sender,它将 trapper 事件发送到 Zabbix 服务器,其中包含 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 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 的授权功能的基石,例如 STS 和组策略。 存储桶策略
    • 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 镜像可以通过 rbd-ggate 挂载到 FreeBSD 系统上

      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)包含在结果中。以前 whiteout 仅发生在缓存层池中。在 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,这意味着监视器将选择 CRUSH 地图中第一个类型的复制规则用于复制池。纠删码池具有自动创建的规则,除非在创建池时指定了规则。

  • 我们不再测试 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....” 取代。

其他值得注意的更改

  • bluestore: os/bluestore: 允许一次在飞行中进行多个 DeferredBatches(issue#20295pr#16769,Nathan Cutler,Sage Weil)
  • bluestore: os/bluestore: clear result in BlueRocksEnv::getChildren(issue#20857pr#16683,liuchang0812)
  • bluestore: os/bluestore: default journal media to store media if bluefs is disabled(pr#16844,xie xingguo)
  • bluestore: os/bluestore: _do_remove: dirty shard individually as each blob is unshared(issue#20849pr#16822,Sage Weil)
  • bluestore: os/bluestore: fix dirty_range on _do_clone_range(issue#20810pr#16738,Sage Weil)
  • bluestore: os/bluestore: space between func and contents(pr#16804,xie xingguo)
  • build/ops: Clean up make check for persistent test nodes (like arm64)(pr#16773,Dan Mick)
  • build/ops: rpm,deb: fix ceph-volume(issue#20915pr#16832,Sage Weil)
  • build/ops: sync luminous tag back to master(pr#16758,Jenkins Build Slave User)
  • common: avoid statically allocating configuration options(issue#20869pr#16735,Jason Dillaman)
  • common: ceph: wait for maps before doing ‘ceph tell ... help’(issue#20113pr#16756,Sage Weil)
  • common: common/buffer: off-by-one error in max iov length blocking(issue#20907pr#16803,Dan Mick)
  • common: common/cmdparse.cc: 移除 dump_cmd_to_json() 中的未使用变量 ‘argnum’ (pr#16862, Luo Kexue)
  • common,rbd,rgw: common/rgw/rbd: 移除一些未使用的变量 (pr#16690, Luo Kexue)
  • core: ceph-disk: dmcrypt 集群必须默认使用 ceph (issue#20893, pr#16776, Loic Dachary)
  • core: ceph-osd: 修复自动检测当前正在运行的 objectstore (issue#20865, pr#16717, Yanhu Cao)
  • core: libradosstriper: 在 WriteCompletionData 中初始化成员变量 m_writeRc (pr#16780, amitkuma)
  • core: 合并 pull request #16755 来自 ivancich/wip-pull-new-dmclock (pr#16922, Gregory Farnum)
  • core: messages: 在 MMDSTableRequest 中初始化成员 (pr#16810, amitkuma)
  • core: messages: 初始化成员变量 (pr#16819, amitkuma)
  • core: messages: 初始化成员变量 (pr#16839, amitkuma)
  • core: messages: 在 MMDSCacheRejoin 中初始化成员变量 (pr#16791, amitkuma)
  • core: osd/mon/mds: 修复 config set tell 命令 (issue#20803, pr#16700, John Spray)
  • core: osd/OSD: 容忍 OSD 启动时任何 ‘set-device-class’ 错误 (pr#16812, xie xingguo)
  • core: osd/PG: 修复丢失的 unfound + delete,当没有缺失对象时 (issue#20904, pr#16809, Josh Durgin)
  • core: osd/PGLog: 避免如果缺失版本损坏时出现无限循环 (pr#16798, Josh Durgin)
  • core: osd/PGLog: 在 _merge_object_divergent_entries 中跳过 ERROR 条目 (issue#20843, pr#16675, Jeegn Chen)
  • core: osd/PG: 在重新启动回填时重置缺失集合 (issue#19191, pr#14053, Josh Durgin)
  • core: 在运行带有 ‘check options’ 的 ceph-osd 命令时打印更多信息 (pr#16678, mychoxin)
  • core,tests: qa: 避免 k=2 m=1 的 map-gap 测试 (issue#20844, pr#16789, Sage Weil)
  • core,tests: qa/suites/rados/basic/tasks/rados_python: POOL_APP_NOT_ENABLED (pr#16827, Sage Weil)
  • core,tests: qa/suites/rados/mgr/tasks/failover: 白名单 (pr#16795, Sage Weil)
  • core,tests: qa/tasks/ceph: 在 rbd pool 上启用 rbd (pr#16794, Sage Weil)
  • core,tests: upgrade/jewel-x: 一些修复 (pr#16830, Sage Weil)
  • crush: 设备类的各种更改/修复 (issue#20845, pr#16805, Kefu Chai, xie xingguo, Sage Weil)
  • crush: 更多类修复 (pr#16837, xie xingguo)
  • doc: 12.1.1 & 12.1.2 发行说明 (pr#16377, Abhishek Lekshmanan)
  • doc: doc/rados/configuration: 文档 bluestore (pr#16765, Sage Weil)
  • doc: doc/release-notes: 修复 bluestore 链接 (pr#16787, Sage Weil)
  • doc: doc/release-notes: 修复链接、格式;添加 crush 设备类文档 (pr#16741, Sage Weil)
  • doc: doc/release-notes: 将发布说明更改排序到正确的部分 (pr#16764, Sage Weil)
  • doc: doc/release-notes: 更新设备类 cli (pr#16851, xie xingguo)
  • doc: 文档 bluestore 压缩设置 (pr#16747, Kefu Chai)
  • doc: 在 rados manpage 中文档 “rados cleanup” (issue#20894, pr#16777, Nathan Cutler)
  • doc: luminous: doc: 更新 rbd-mirroring 文档 (issue#20701, pr#16912, Jason Dillaman)
  • doc: op queue 和 mclock 相关选项 (pr#16662, J. Eric Ivancich)
  • doc: PendingReleaseNotes: 提及强制恢复 (pr#16775, Piotr Dałek)
  • librbd: handle_refresh() 中使用的未初始化变量 (pr#16724, amitkuma)
  • mgr: 正确处理 “module.set_config(.., None)” (pr#16749, Kefu Chai)
  • mon: 添加 bootstrap-rbd auth profile (pr#16633, Jason Dillaman)
  • mon: 健康检查的可扩展输出格式 (pr#16701, John Spray)
  • mon: mon/OSDMonitor: 在执行 ‘osd purge’ 之前对 osd 进行合理性检查 (pr#16838, xie xingguo)
  • mon: 在 ‘osd crush tree’ 输出中显示类;对输出进行排序 (pr#16740, Sage Weil)
  • mon,tests: test: 在 MonClientHelper 中初始化指针 msg (pr#16784, amitkuma)
  • msg: 在 Infiniband 中初始化成员变量 (pr#16781, amitkuma)
  • msg: 移除 RDMAStack 中的未使用变量 perf_counter (pr#16783, amitkuma)
  • msgr: messages: 初始化 MMonGetVersion 中的未初始化成员 (pr#16811, amitkuma)
  • msgr: messages: 初始化 MMonGetVersionReply 中的未初始化成员 (pr#16813, amitkuma)
  • msgr: messages: 初始化 MMonPaxos 中的未初始化成员 (pr#16814, amitkuma)
  • msgr: messages: 初始化 MMonProbe 中的未初始化成员 (pr#16815, amitkuma)
  • msgr: messages: 初始化 module messages 中的未初始化成员 (pr#16817, amitkuma)
  • msgr: messages: 初始化 MOSDAlive 中的未初始化成员 (pr#16816, amitkuma)
  • osd: 检查 journal 是否为旋转式 (pr#16614, Neha Ojha)
  • osd: 在 luminous 之前不要尝试设置设备类 (issue#20850, pr#16706, Josh Durgin)
  • osd: 在启动时初始化 waiting_for_pg_osdmap (issue#20748, pr#16535, Sage Weil)
  • osd: pg: 在强制 pg 恢复周围更加小心地进行锁定 (issue#20808, pr#16712, Greg Farnum)
  • osd: 静默来自 -Wint-in-bool-context 的警告 (pr#16744, Jos Collin)
  • pybind: pybind/rados: 使用新的 API 代替已弃用的 API (pr#16684, Kefu Chai)
  • rbd: 移除 C_OpenComplete 中的未使用成员变量 reopen (pr#16729, amitkuma)
  • rbd: ‘image-meta remove’ 对于缺失的 key 不返回错误 (issue#16990, pr#16393, PCzhangPC)
  • rbd: luminous: librbd: 默认将父读取本地化设置为 false (issue#20941, pr#16899, Jason Dillaman)
  • rbd: luminous: librbd: 移除一致性组 rbd cli 和 API 支持 (pr#16875, Jason Dillaman)
  • rbd: luminous: rbd-ggate: 在 FreeBSD 上通过 GEOM Gate 映射镜像的工具 (pr#16895, Mykola Golub)
  • rbd: luminous: rbd-mirror: 对齐 service_daemon::AttributeType 中 uint64_t 的使用 (pr#16948, James Page)
  • rbd: luminous: rbd-mirror: 简化镜像分配的通知 (issue#15764, pr#16878, Jason Dillaman)
  • rbd: luminous: rbd: 并行化 rbd ls -l (pr#16921, Piotr Dałek)
  • rbd-mirror: 池重放器关闭期间断言失败 (issue#20644, pr#16704, Jason Dillaman)
  • rbd,rgw,tools: tools/rbd, rgw: 移除不可达的返回 (pr#16308, Jos Collin)
  • rbd,tests: luminous: qa/workunits/rbd: 使用命令行选项指定 watcher asok (issue#20954, pr#16946, Mykola Golub)
  • rbd,tests: luminous: test/librbd: 修复 OSD map 刷新时的竞争条件 (issue#20918, pr#16903, Jason Dillaman)
  • rbd,tests: test/librbd/fsx: 在 OP_WRITESAME 和 OP_COMPARE_AND_WRITE 的情况下添加 break (pr#16742, Luo Kexue)
  • rgw: 添加数据通知间隔的单独配置 (pr#16551, fang yuxiang)
  • rgw: 添加对 Swift 的 TempURLs 的前缀支持 (issue#20398, pr#16370, Radoslaw Zarzynski)
  • rgw: 修复 check_bad_index_multipart 中最多 1000 个条目 (issue#20772, pr#16692, Orit Wasserman)
  • rgw: 初始化 RGWUserAdminOpState 中的成员变量 admin_specified (pr#16847, amitkuma)
  • rgw: luminous: rgw_lc: 支持 AWSv4 身份验证 (pr#16914, Abhishek Lekshmanan)
  • rgw: luminous: rgw: 使用命名空间用于 lc_pool 和 roles_pool (issue#20177, issue#20967, pr#16943, Orit Wasserman)
  • rgw: 匹配 StringLike 策略条件中的通配符 (issue#20308, pr#16491, Casey Bodley)
  • rgw: 将 S3 匿名身份验证处理移动到专用引擎 (pr#16485, Radoslaw Zarzynski)
  • rgw: rgw_crypt: 在失败期间记录错误消息 (pr#16726, Abhishek Lekshmanan)
  • rgw: rgw : 修复 RGWCompleteMultipart 中的竞争条件 (issue#20861, pr#16732, Abhishek Varshney)
  • rgw: 不应限制用户未提供时 location_constraint 相同 (pr#16770, Tianshan Qu)
  • rgw,tests: qa/rgw: 禁用生命周期测试,因为存在到期失败 (pr#16760, Casey Bodley)
  • rgw: 在创建用户期间验证租户名称 (pr#16442, Abhishek Lekshmanan)
  • tests: os: 参数不能为负数 (pr#16688, amitkuma)
  • tests: qa/suites: 转义白名单文本中的括号 (pr#16722, Kefu Chai)
  • tests: qa/suites/powercycle: 白名单 thrashing 的健康 (pr#16759, Sage Weil)
  • tests: qa/suites/rados: 更多白名单 (pr#16820, Sage Weil)
  • tests: qa/suites/rados/singleton-nomsgr/all/multi-backfill-reject: 睡眠时间更长 (pr#16739, Sage Weil)
  • tests: qa/suites/upgarde/jewel-x/parallel: 更多白名单 (pr#16849, Sage Weil)
  • tests: qa/tasks/ceph: 调试 osd 设置 (pr#16841, Sage Weil)
  • tests: qa/tasks/ceph: 等待 scrub 更长时间 (pr#16824, Sage Weil)
  • tests: qa: 在 healthy() 中等待 mgr 可用时超时 (pr#16797, Josh Durgin)
  • tests: test: 在 TestMemIoCtxImpl 中初始化指针变量 (pr#16785, amitkuma)
  • tests: test/librados: 在 aio.cc 中初始化成员变量 (pr#16845, amitkuma)
  • tools: Backport: “ceph-volume: 添加功能性 CI 测试 #16919” (pr#16970, Andrew Schoen, Alfredo Deza)
  • tools: ceph-disk: 如果 deactive –once,则不要移除挂载点 (pr#16474, Song Shun)
  • tools: ceph-volume: ceph-volume CLI 工具的初始版本 (pr#16632, Dan Mick, Alfredo Deza)