注意
本文档适用于 Ceph 的开发版本。
Emperor
Emperor是Ceph的第5个稳定版本。它以帝王鱿鱼(emperor squid)命名。
v0.72.3 Emperor (pending release)
升级
Monitor的“auth”只读命令现在要求用户具有“rx”权限。这与 dumpling 版本中的行为相同,但在 emperor 和最近的开发版本中,“r”权限就足够了。请注意,此回溯的安全修复将破坏那些使用以下命令但其 monitor 权限中没有“x”位的 mon 密钥。
ceph auth export ceph auth get ceph auth get-key ceph auth print-key ceph auth list
v0.72.2 Emperor
这是 v0.72.x Emperor 系列的第二个错误修复版本。我们修复了 radosgw 中的一个挂起问题,并(再次)修复了混合版本 monitor 的 CLI 兼容性问题。(将来这不再是一个问题。)
升级
“osd pool set …”命令的 JSON 模式略有更改。当 v0.72.1 和 v0.72.2 monitor 守护程序混合运行时,请避免通过 CLI 发出此特定命令。
作为 #6796 修复的一部分,‘ceph osd pool set <pool> <var> <arg>’ 现在将 <arg> 接收为整数而不是字符串。这会影响 ‘hashpspool’ 标志的设置/取消设置:现在必须是 ‘0’ 或 ‘1’,而不是 ‘true’ 或 ‘false’。
变更
mon: ‘osd pool set …’ 语法更改
osd: 添加了对缺失的磁盘上 HEAD 对象的测试
osd: 修复 osd bench 块大小参数
rgw: 修复大型对象 GET 上的挂起
rgw: 修复罕见的 use-after-free
rgw: 各种 DR 错误修复
rgw: 在设置 ACL 时,如果所有者为空则不返回错误
sysvinit, upstart: 防止使用两种 init 系统启动守护程序
有关更多详细信息,请参阅完整的变更日志。
v0.72.1 Emperor
重要提示
从 Dumpling 升级到 Emperor 时,请勿在 monitor 运行不同版本时运行任何“ceph osd pool set”命令。这样做可能会导致无意中更改集群配置设置,从而耗尽 OSD 中的计算资源。
变更
osd: 修复升级错误 #6761
ceph_filestore_tool: 引入了用于修复 #6761 引起的错误的工具
此版本解决了问题 #6761。升级到 Emperor 可能会导致读取开始返回 ENFILE(打开的文件过多)。v0.72.1 修复了该升级问题,并添加了一个工具 ceph_filestore_tool 来修复受此错误影响的 osd 存储。
要修复受此错误影响的集群
将所有 osd 机器升级到 v0.72.1
在每台 osd 机器上安装 ceph-test 包以获取 ceph_filestore_tool
停止所有 osd 进程
要查看所有丢失的对象,请在每个 osd 上运行以下命令,同时停止 osd 并挂载 osd 数据目录
ceph_filestore_tool --list-lost-objects=true --filestore-path=<path-to-osd-filestore> --journal-path=<path-to-osd-journal>
要修复所有丢失的对象,请在每个 osd 上运行以下命令,同时停止 osd 并挂载 osd 数据目录
ceph_filestore_tool --fix-lost-objects=true --list-lost-objects=true --filestore-path=<path-to-osd-filestore> --journal-path=<path-to-osd-journal>
在每个 osd 上修复丢失的对象后,您可以重新启动集群。
请注意,ceph_filestore_tool 会扫描 osd 上的所有对象,可能需要一些时间。
v0.72 Emperor
这是 Ceph 的第五个主要版本,也是采用 3 个月开发周期以来的第四个版本。此版本带来了几项新功能,包括 radosgw 的多数据中心复制、可用性改进,并包含了大量增量性能和内部重构工作,以支持 Firefly 中即将推出的功能。
重要提示
从 Dumpling 升级到 Emperor 时,请勿在 monitor 运行不同版本时运行任何“ceph osd pool set”命令。这样做可能会导致无意中更改集群配置设置,从而耗尽 OSD 中的计算资源。
亮点
common: 改进了 crc32c 性能
librados: 新的示例客户端和类代码
mds: 许多错误修复和稳定性改进
mon: 当 pool pg_num 值不合理时发出健康警告
mon: 按 pool 分组的性能统计信息
osd, librados: 新的对象复制原语
osd: 改进了与后端文件系统的交互以减少延迟
osd: 进行了大量内部重构以支持正在进行的纠删码和分层支持
rgw: 桶配额
rgw: 改进了 CORS 支持
rgw: 性能改进
rgw: 针对 Keystone 验证 S3 令牌
与核心 Ceph 一致,Emperor 版本还带来了
radosgw-agent: 支持多数据中心复制以实现灾难恢复
tgt: 通过上游 tgt 改进了对 iSCSI 的支持
这两个包都可以在 ceph.com 上获得。
升级顺序
从 0.67.x Dumpling 升级到此版本没有特定的顺序限制。但是,请勿在 monitor 运行不同版本时运行任何“ceph osd pool set”命令。这样做可能会导致无意中更改集群配置设置,并耗尽 OSD 中的计算资源。
也可以从 0.61.x Cuttlefish 进行滚动升级,但有顺序限制。(这与 Cuttlefish 升级到 Dumpling 的限制相同。)
升级将使用命令行“ceph”实用程序的所有节点上的 ceph-common。
升级所有 monitor(升级 ceph 包,重新启动 ceph-mon 守护程序)。这可以一次一个守护程序或一台主机进行。请注意,由于 cuttlefish 和 dumpling monitor 无法相互通信,所有 monitor 应在相对较短的时间内升级,以尽量减少因不及时故障而降低可用性的风险。
升级所有 osd(升级 ceph 包,重新启动 ceph-osd 守护程序)。这可以一次一个守护程序或一台主机进行。
升级 radosgw(升级 radosgw 包,重新启动 radosgw 守护程序)。
从 v0.71 升级
ceph-fuse 和 radosgw 现在使用与_其他守护程序_(ceph-osd、ceph-mon 等)相同的默认值作为管理套接字和日志文件路径。如果您以非 root 用户身份运行这些守护程序,您可能需要调整 ceph.conf 以禁用这些选项或调整 /var/run/ceph 和 /var/log/ceph 的权限。
从 v0.67 Dumpling 升级
ceph-fuse 和 radosgw 现在使用与_其他守护程序_(ceph-osd、ceph-mon 等)相同的默认值作为管理套接字和日志文件路径。如果您以非 root 用户身份运行这些守护程序,您可能需要调整 ceph.conf 以禁用这些选项或调整 /var/run/ceph 和 /var/log/ceph 的权限。
MDS 现在默认禁用快照,因为它们被认为不稳定。命令‘ceph mds set allow_snaps’将启用它们。
对于在 v0.44 之前(pre-argonaut,2012 年春季)创建并存储 radosgw 数据的集群,已禁用 TMAP 到 OMAP 对象的自动升级。在升级之前,请确保已修改在 pre-argonaut 版本上创建的任何桶(例如,通过 PUT 然后 DELETE 每个桶中的一个对象)。使用 argonaut (v0.48) 或更高版本创建的集群,或者不使用 radosgw 的集群,从未依赖自动转换,并且不受此更改的影响。
librados API 的“tmap”部分的任何直接用户都应注意,自动 tmap -> omap 转换功能已被删除。
大多数使用 K 或 KB(例如,千字节)的输出现在使用小写 k 来匹配官方 SI 约定。任何解析输出并检查大写 K 的脚本都需要修改。
librados::Rados::pool_create_async() 和 librados::Rados::pool_delete_async() 在错误时不会删除对完成对象的引用,调用者需要处理这个问题。这从未真正正确工作过,我们正在泄漏一个对象。
‘ceph osd crush set <id> <weight> <loc..>’ 不再将 osd 添加到指定位置,因为那是 ‘ceph osd crush add’ 的工作。但是,只要 osd 已经存在于 crush map 中,它就会继续正常工作。
OSD 现在强制要求类写入方法不能同时改变对象并返回数据。rbd.assign_bid 方法(唯一的违规者)已被删除。这通过阻止 pre-bobtail librbd 客户端创建新镜像来破坏与它们的兼容性。
librados 现在在同步调用时在 commit 而不是 ack 时返回。这在 OSD 和客户端都崩溃的情况下更安全一些,并且可能从一开始就应该这样运行。用户不太可能注意到,但在某些情况下可能会导致性能降低。关心的人应该切换到使用异步接口,它允许您精确指定安全语义。
C++ librados AioComplete::get_version() 方法错误地返回了一个 int(通常是 32 位)。为了避免破坏库兼容性,添加了一个 get_version64() 方法,它返回完整宽度的值。旧方法已弃用,将在未来版本中删除。使用 C++ librados API 并使用 get_version() 方法的用户应修改其代码,以避免获取从 64 位截断为 32 位的值。
自 v0.71 以来的显著更改
build: 修复 [/usr]/sbin 位置 (Alan Somers)
ceph-fuse, radosgw: 默认启用管理套接字和日志记录
ceph: 当 monitor 关闭时使 -h 正常运行
common: 在可能的情况下缓存 crc32c 值
common: 修复 BSD 上的循环 (Alan Somers)
librados, mon: 能够查询/ping 离线 monitor 状态 (Joao Luis)
librbd python bindings: 修复父镜像名称限制 (Josh Durgin)
mds: 避免在删除截断文件时泄漏对象 (Yan, Zheng)
mds: 修复 F_GETLK (Yan, Zheng)
mds: 修复许多与 stray(未链接)inode 相关的错误 (Yan, Zheng)
mds: 修复许多目录碎片错误 (Yan, Zheng)
mon: 允许对现有 pool 设置/取消设置 HASHPSPOOL 标志 (Joao Luis)
mon: 使 ‘osd pool rename’ 幂等 (Joao Luis)
osd: COPY_GET 在线编码改进 (Greg Farnum)
osd: bloom_filter 可编码性、修复、清理 (Loic Dachary, Sage Weil)
osd: 修复 racing read vs write 的处理 (Samuel Just)
osd: 减少对后端 fs 的阻塞 (Samuel Just)
radosgw-agent: 多区域复制/DR
rgw: 修复/改进 swift COPY 支持 (Yehuda Sadeh)
rgw: 支持 DR 的杂项修复 (Josh Durgin, Yehuda Sadeh)
rgw: 按桶配额 (Yehuda Sadeh)
rpm: 修复 junit 依赖项 (Alan Grosskurth)
自 v0.67 Dumpling 以来的显著更改
build cleanly under clang (Christophe Courtaut)
build: Makefile 重构 (Roald J. van Loon)
build: 修复 [/usr]/sbin 位置 (Alan Somers)
ceph-disk: 修复 journal 预分配
ceph-fuse, radosgw: 默认启用管理套接字和日志记录
ceph-fuse: 修复 readahead vs truncate race 的问题 (Yan, Zheng)
ceph-fuse: 从缓存中修剪已删除的 inode (Yan, Zheng)
ceph-fuse: 使用较新的 fuse api (Jianpeng Ma)
ceph-kvstore-tool: 用于处理 leveldb 的新工具(复制、crc) (Joao Luis)
ceph-post-file: 用于轻松与 ceph 开发人员共享日志或其他文件的新命令
ceph: 改进 CEPH_ARGS 的解析 (Benoit Knecht)
ceph: 当 monitor 关闭时使 -h 正常运行
ceph: 解析 CEPH_ARGS 环境变量
common: bloom_filter 改进、清理
common: 在可能的情况下缓存 crc32c 值
common: 正确的 SI 是 kB 而不是 KB (Dan Mick)
common: 修复 BSD 上的循环 (Alan Somers)
common: 将 SharedPtrRegistry 迁移到使用 boost::shared_ptr<> (Loic Dachary)
common: 杂项可移植性修复 (Noah Watkins)
crc32c: 修复优化的 crc32c 代码(它现在正确检测 arch 支持)
crc32c: 改进了 intel 优化的 crc32c 支持(在我的笔记本电脑上快了约 8 倍!)
crush: 修复名称缓存
doc: 纠删码设计说明 (Loic Dachary)
hadoop: 删除了旧版本的 shim 以避免混淆用户 (Noah Watkins)
librados, mon: 能够查询/ping 离线 monitor 状态 (Joao Luis)
librados: 修复 async aio completion 唤醒
librados: 修复已安装头文件 #includes (Dan Mick)
librados: C++ API 的 get_version64() 方法
librados: hello_world 示例 (Greg Farnum)
librados: 同步调用现在在 commit 时返回(而不是 ack) (Greg Farnum)
librbd python bindings: 修复父镜像名称限制 (Josh Durgin)
librbd, ceph-fuse: 避免一些 ceph-fuse, rbd 缓存停顿的来源
mds: 避免在删除截断文件时泄漏对象 (Yan, Zheng)
mds: 修复 F_GETLK (Yan, Zheng)
mds: 修复 LOOKUPSNAP 错误
mds: 修复堆分析器命令 (Joao Luis)
mds: 修复锁定死锁 (David Disseldorp)
mds: 修复许多与 stray(未链接)inode 相关的错误 (Yan, Zheng)
mds: 修复许多目录碎片错误 (Yan, Zheng)
mds: 修复带有 legacy parent backpointer xattrs 的 mds rejoin (Alexandre Oliva)
mds: 修复 fs 创建期间罕见的重启/故障竞争
mds: 修复当我们落后时 standby-replay (Yan, Zheng)
mds: 修复 stray directory purging (Yan, Zheng)
mds: 通知客户端有关已删除的文件(以便它们可以从缓存中释放) (Yan, Zheng)
mds: 修复集群 mds 的几个错误 (Yan, Zheng)
mon, osd: 改进 osdmap 修剪逻辑 (Samuel Just)
mon, osd: 用于配置分层的初始 CLI
mon: 修复了一些 ‘ceph mon add’ 竞争条件(命令现在是幂等的) (Joao Luis)
mon: 允许对现有 pool 设置/取消设置 HASHPSPOOL 标志 (Joao Luis)
mon: 允许 cap 字符串中的 . 不加引号
mon: 允许调整集群日志 (/var/log/ceph/ceph.log) 的日志级别
mon: 避免在重启时重写完整的 osdmaps (Joao Luis)
mon: 在选举阶段继续发现对等地址信息
mon: 禁止 CephFS 快照,直到执行 ‘ceph mds set allow_new_snaps’ (Greg Farnum)
mon: 不暴露来自 ‘osd crush {add,set} …’ 的未提交状态 (Joao Luis)
mon: 修复 ‘ceph osd crush reweight …’ (Joao Luis)
mon: 修复桶的 ‘osd crush move …’ 命令 (Joao Luis)
mon: 修复字节计数(相差 4 倍) (Dan Mick, Joao Luis)
mon: 修复 paxos 边角情况
mon: 用于支持 EC 的 pool 的 kv 属性 (Loic Dachary)
mon: 使 ‘osd pool rename’ 幂等 (Joao Luis)
mon: 修改 ‘auth add’ 语义以使其更合理 (Joao Luis)
mon: 新的 ‘osd perf’ 命令用于转储最近的性能信息 (Samuel Just)
mon: 新的和改进的 ‘ceph -s’ 或 ‘ceph status’ 命令(更多信息,更易阅读)
mon: 一些 auth check 清理 (Joao Luis)
mon: 跟踪按 pool 分组的统计信息 (Joao Luis)
mon: 警告 pg_num 不良的 pool
mon: 当 mon 数据存储变得非常大时发出警告 (Joao Luis)
monc: 修复小的内存泄漏
新的 wireshark 补丁被拉入树中 (Kevin Jones)
objecter, librados: 根据缓存分层配置重定向请求
objecter: 修复集群未暂停时可能出现的挂起 (Josh Durgin)
osd, librados: 添加新的 COPY_FROM rados 操作
osd, librados: 添加新的 COPY_GET rados 操作(由 COPY_FROM 使用)
osd: ‘osd recover clone overlap limit’ 选项用于限制恢复期间的克隆 (Samuel Just)
osd: COPY_GET 在线编码改进 (Greg Farnum)
osd: 添加 ‘osd heartbeat min healthy ratio’ 可配置项(之前硬编码为 33%)
osd: 添加选项以禁用 pg log debug 代码(会消耗 CPU)
osd: 允许 cap 字符串中的 . 不加引号
osd: 自动检测适当的 xattr 限制 (David Zafman)
osd: 避免在纠删码参考实现中进行额外复制 (Loic Dachary)
osd: 基本缓存池重定向 (Greg Farnum)
osd: 基本白化、脏标志支持(尚未使用)
osd: bloom_filter 可编码性、修复、清理 (Loic Dachary, Sage Weil)
osd: 清理和泛化 copy-from 代码 (Greg Farnum)
osd: cls_hello OSD 类示例
osd: 纠删码文档更新 (Loic Dachary)
osd: 纠删码插件基础设施、测试 (Loic Dachary)
osd: ZFS (zfsonlinux.org) 的实验性支持 (Yan, Zheng)
osd: 修复 RWORDER 标志
osd: 修复慢速请求警告的指数退避 (Loic Dachary)
osd: 修复 racing read vs write 的处理 (Samuel Just)
osd: 修复各种操作返回的版本值 (Greg Farnum)
osd: 广义的临时对象基础设施
osd: 用于 EC 的 ghobject_t 基础设施 (David Zafman)
osd: compatset 支持和存储改进 (David Zafman)
osd: 从其他 OSD 复制对象的基础设施
osd: 仪表化对等状态 (David Zafman)
osd: 杂项 copy-from 改进
osd: 对存储数据进行机会性 crc 检查(默认关闭)
osd: 正确强制执行 rados 类的 RD/WR 标志
osd: 减少对后端 fs 的阻塞 (Samuel Just)
osd: 使用 PGBackend 重构恢复 (Samuel Just)
osd: 删除旧的 magical tmap->omap 转换
osd: 升级时删除旧的 pg log (Samuel Just)
osd: 恢复 xattr 大小限制(修复大型 rgw 上传)
osd: 使用 fdatasync(2) 而不是 fsync(2) 来提高性能 (Sam Just)
pybind: 修复黑名单 nonce (Loic Dachary)
radosgw-agent: 多区域复制/DR
rgw: 在关闭前完成正在进行的请求
rgw: 默认日志级别现在更合理 (Yehuda Sadeh)
rgw: 修复带有 response-* 查询字符串参数的 S3 auth (Sylvain Munaut, Yehuda Sadeh)
rgw: 修复一些小的内存泄漏 (Yehuda Sadeh)
rgw: 修复 acl group check (Yehuda Sadeh)
rgw: 修复 std::list::size() 的低效使用 (Yehuda Sadeh)
rgw: 修复内部缓存的主要 CPU 利用率错误 (Yehuda Sadeh, Mark Nelson)
rgw: 修复写入操作的顺序(防止崩溃时数据丢失) (Yehuda Sadeh)
rgw: 修复 mulitpart 上传的写入顺序 (Yehuda Sadeh)
rgw: 修复各种 CORS 错误 (Yehuda Sadeh)
rgw: 修复/改进 swift COPY 支持 (Yehuda Sadeh)
rgw: 改进帮助输出 (Christophe Courtaut)
rgw: 支持 DR 的杂项修复 (Josh Durgin, Yehuda Sadeh)
rgw: 按桶配额 (Yehuda Sadeh)
rgw: 针对 keystone 验证 S3 令牌 (Roald J. van Loon)
rgw: 支持 keystone 角色的通配符 (Christophe Courtaut)
rpm: 修复 junit 依赖项 (Alan Grosskurth)
sysvinit radosgw: 修复状态返回码 (Danny Al-Gaaf)
sysvinit rbdmap: 修复错误 ‘service rbdmap stop’ (Laurent Barbe)
sysvinit: 添加 condrestart 命令 (Dan van der Ster)
sysvinit: 修复关机顺序 (mons 最后) (Alfredo Deza)
v0.71
此开发版本包含大量新代码和重构,以及许多纠删码和分层支持所需的初步功能。还有几个重要的补丁集改进了 MDS。
升级
MDS 现在默认禁用快照,因为它们被认为不稳定。命令‘ceph mds set allow_snaps’将启用它们。
对于在 v0.44 之前(pre-argonaut,2012 年春季)创建并存储 radosgw 数据的集群,已禁用 TMAP 到 OMAP 对象的自动升级。在升级之前,请确保已修改在 pre-argonaut 版本上创建的任何桶(例如,通过 PUT 然后 DELETE 每个桶中的一个对象)。使用 argonaut (v0.48) 或更高版本创建的集群,或者不使用 radosgw 的集群,从未依赖自动转换,并且不受此更改的影响。
librados API 的“tmap”部分的任何直接用户都应注意,自动 tmap -> omap 转换功能已被删除。
大多数使用 K 或 KB(例如,千字节)的输出现在使用小写 k 来匹配官方 SI 约定。任何解析输出并检查大写 K 的脚本都需要修改。
值得注意的变更
build: Makefile 重构 (Roald J. van Loon)
ceph-disk: 修复 journal 预分配
ceph-fuse: 从缓存中修剪已删除的 inode (Yan, Zheng)
ceph-fuse: 使用较新的 fuse api (Jianpeng Ma)
ceph-kvstore-tool: 用于处理 leveldb 的新工具(复制、crc) (Joao Luis)
common: bloom_filter 改进、清理
common: 正确的 SI 是 kB 而不是 KB (Dan Mick)
common: 杂项可移植性修复 (Noah Watkins)
hadoop: 删除了旧版本的 shim 以避免混淆用户 (Noah Watkins)
librados: 修复已安装头文件 #includes (Dan Mick)
librbd, ceph-fuse: 避免一些 ceph-fuse, rbd 缓存停顿的来源
mds: 修复 LOOKUPSNAP 错误
mds: 修复当我们落后时 standby-replay (Yan, Zheng)
mds: 修复 stray directory purging (Yan, Zheng)
mon: 禁止 CephFS 快照,直到执行 ‘ceph mds set allow_new_snaps’ (Greg Farnum)
mon, osd: 改进 osdmap 修剪逻辑 (Samuel Just)
mon: 用于支持 EC 的 pool 的 kv 属性 (Loic Dachary)
mon: 一些 auth check 清理 (Joao Luis)
mon: 跟踪按 pool 分组的统计信息 (Joao Luis)
mon: 警告 pg_num 不良的 pool
osd: 自动检测适当的 xattr 限制 (David Zafman)
osd: 避免在纠删码参考实现中进行额外复制 (Loic Dachary)
osd: 基本缓存池重定向 (Greg Farnum)
osd: 基本白化、脏标志支持(尚未使用)
osd: 清理和泛化 copy-from 代码 (Greg Farnum)
osd: 纠删码文档更新 (Loic Dachary)
osd: 纠删码插件基础设施、测试 (Loic Dachary)
osd: 修复 RWORDER 标志
osd: 修复慢速请求警告的指数退避 (Loic Dachary)
osd: 广义的临时对象基础设施
osd: 用于 EC 的 ghobject_t 基础设施 (David Zafman)
osd: compatset 支持和存储改进 (David Zafman)
osd: 杂项 copy-from 改进
osd: 对存储数据进行机会性 crc 检查(默认关闭)
osd: 使用 PGBackend 重构恢复 (Samuel Just)
osd: 删除旧的 magical tmap->omap 转换
pybind: 修复黑名单 nonce (Loic Dachary)
rgw: 默认日志级别现在更合理 (Yehuda Sadeh)
rgw: 修复 acl group check (Yehuda Sadeh)
sysvinit: 修复关机顺序 (mons 最后) (Alfredo Deza)
v0.70
升级
librados::Rados::pool_create_async() 和 librados::Rados::pool_delete_async() 在错误时不会删除对完成对象的引用,调用者需要处理这个问题。这从未真正正确工作过,我们正在泄漏一个对象。
‘ceph osd crush set <id> <weight> <loc..>’ 不再将 osd 添加到指定位置,因为那是 ‘ceph osd crush add’ 的工作。但是,只要 osd 已经存在于 crush map 中,它就会继续正常工作。
显著更改
mon: 修复了一些 ‘ceph mon add’ 竞争条件(命令现在是幂等的) (Joao Luis)
crush: 修复名称缓存
rgw: 修复一些小的内存泄漏 (Yehuda Sadeh)
ceph: 改进 CEPH_ARGS 的解析 (Benoit Knecht)
mon: 避免在重启时重写完整的 osdmaps (Joao Luis)
crc32c: 修复优化的 crc32c 代码(它现在正确检测 arch 支持)
mon: 修复 ‘ceph osd crush reweight …’ (Joao Luis)
osd: 恢复 xattr 大小限制(修复大型 rgw 上传)
mds: 修复堆分析器命令 (Joao Luis)
rgw: 修复 std::list::size() 的低效使用 (Yehuda Sadeh)
v0.69
升级
sysvinit /etc/init.d/ceph 脚本默认会在 OSD 启动时更新其 CRUSH 位置。以前,如果 monitor 不可用,此命令会无限期挂起。现在,该步骤将在 10 秒后超时,ceph-osd 守护程序将不会启动。
librados C++ API 的用户应将 get_version() 的用法替换为 get_version64(),因为旧方法只返回 64 位字段的 32 位值。现有的 32 位 get_version() 方法现已弃用。
OSD 现在更严格地要求请求有效负载与其声明的大小匹配。跨 N 字节的写入操作(包含 M 字节数据)现在将被拒绝。没有已知的客户端会这样做,但由于服务器端行为已更改,因此滥用接口的应用程序现在可能会出错。
OSD 现在强制要求类写入方法不能同时改变对象并返回数据。rbd.assign_bid 方法(唯一的违规者)已被删除。这通过阻止 pre-bobtail librbd 客户端创建新镜像来破坏与它们的兼容性。
librados 现在在同步调用时在 commit 而不是 ack 时返回。这在 OSD 和客户端都崩溃的情况下更安全一些,并且可能从一开始就应该这样运行。用户不太可能注意到,但在某些情况下可能会导致性能降低。关心的人应该切换到使用异步接口,它允许您精确指定安全语义。
C++ librados AioComplete::get_version() 方法错误地返回了一个 int(通常是 32 位)。为了避免破坏库兼容性,添加了一个 get_version64() 方法,它返回完整宽度的值。旧方法已弃用,将在未来版本中删除。使用 C++ librados API 并使用 get_version() 方法的用户应修改其代码,以避免获取从 64 位截断为 32 位的值。
Notable Changes
build cleanly under clang (Christophe Courtaut)
common: 将 SharedPtrRegistry 迁移到使用 boost::shared_ptr<> (Loic Dachary)
doc: 纠删码设计说明 (Loic Dachary)
改进了 intel 优化的 crc32c 支持(在我的笔记本电脑上快了约 8 倍!)
librados: C++ API 的 get_version64() 方法
mds: 修复锁定死锁 (David Disseldorp)
mon, osd: 用于配置分层的初始 CLI
mon: 允许 cap 字符串中的 . 不加引号
mon: 在选举阶段继续发现对等地址信息
mon: 修复桶的 ‘osd crush move …’ 命令 (Joao Luis)
mon: 当 mon 数据存储变得非常大时发出警告 (Joao Luis)
objecter, librados: 根据缓存分层配置重定向请求
osd, librados: 添加新的 COPY_FROM rados 操作
osd, librados: 添加新的 COPY_GET rados 操作(由 COPY_FROM 使用)
osd: 添加 ‘osd heartbeat min healthy ratio’ 可配置项(之前硬编码为 33%)
osd: 添加选项以禁用 pg log debug 代码(会消耗 CPU)
osd: 允许 cap 字符串中的 . 不加引号
osd: 修复各种操作返回的版本值 (Greg Farnum)
osd: 从其他 OSD 复制对象的基础设施
osd: 使用 fdatasync(2) 而不是 fsync(2) 来提高性能 (Sam Just)
rgw: 修复内部缓存的主要 CPU 利用率错误 (Yehuda Sadeh, Mark Nelson)
rgw: 修复写入操作的顺序(防止崩溃时数据丢失) (Yehuda Sadeh)
rgw: 修复 mulitpart 上传的写入顺序 (Yehuda Sadeh)
rgw: 修复各种 CORS 错误 (Yehuda Sadeh)
rgw: 改进帮助输出 (Christophe Courtaut)
rgw: 针对 keystone 验证 S3 令牌 (Roald J. van Loon)
rgw: 支持 keystone 角色的通配符 (Christophe Courtaut)
sysvinit radosgw: 修复状态返回码 (Danny Al-Gaaf)
sysvinit rbdmap: 修复错误 ‘service rbdmap stop’ (Laurent Barbe)
v0.68
升级
‘ceph osd crush set <id> <weight> <loc..>’ 不再将 osd 添加到指定位置,因为那是 ‘ceph osd crush add’ 的工作。但是,只要 osd 已经存在于 crush map 中,它就会继续正常工作。
OSD 现在强制要求类写入方法不能同时改变对象并返回数据。rbd.assign_bid 方法(唯一的违规者)已被删除。这通过阻止 pre-bobtail librbd 客户端创建新镜像来破坏与它们的兼容性。
librados 现在在同步调用时在 commit 而不是 ack 时返回。这在 OSD 和客户端都崩溃的情况下更安全一些,并且可能从一开始就应该这样运行。用户不太可能注意到,但在某些情况下可能会导致性能降低。关心的人应该切换到使用异步接口,它允许您精确指定安全语义。
C++ librados AioComplete::get_version() 方法错误地返回了一个 int(通常是 32 位)。为了避免破坏库兼容性,添加了一个 get_version64() 方法,它返回完整宽度的值。旧方法已弃用,将在未来版本中删除。使用 C++ librados API 并使用 get_version() 方法的用户应修改其代码,以避免获取从 64 位截断为 32 位的值。
显著更改
ceph-fuse: 修复 readahead vs truncate race 的问题 (Yan, Zheng)
ceph-post-file: 用于轻松与 ceph 开发人员共享日志或其他文件的新命令
ceph: 解析 CEPH_ARGS 环境变量
librados: 修复 async aio completion 唤醒
librados: hello_world 示例 (Greg Farnum)
librados: 同步调用现在在 commit 时返回(而不是 ack) (Greg Farnum)
mds: 修复带有 legacy parent backpointer xattrs 的 mds rejoin (Alexandre Oliva)
mds: 修复 fs 创建期间罕见的重启/故障竞争
mds: 通知客户端有关已删除的文件(以便它们可以从缓存中释放) (Yan, Zheng)
mds: 修复集群 mds 的几个错误 (Yan, Zheng)
mon: 允许调整集群日志 (/var/log/ceph/ceph.log) 的日志级别
mon: 不暴露来自 ‘osd crush {add,set} …’ 的未提交状态 (Joao Luis)
mon: 修复字节计数(相差 4 倍) (Dan Mick, Joao Luis)
mon: 修复 paxos 边角情况
mon: 修改 ‘auth add’ 语义以使其更合理 (Joao Luis)
mon: 新的 ‘osd perf’ 命令用于转储最近的性能信息 (Samuel Just)
mon: 新的和改进的 ‘ceph -s’ 或 ‘ceph status’ 命令(更多信息,更易阅读)
monc: 修复小的内存泄漏
新的 wireshark 补丁被拉入树中 (Kevin Jones)
objecter: 修复集群未暂停时可能出现的挂起 (Josh Durgin)
osd: ‘osd recover clone overlap limit’ 选项用于限制恢复期间的克隆 (Samuel Just)
osd: cls_hello OSD 类示例
osd: ZFS (zfsonlinux.org) 的实验性支持 (Yan, Zheng)
osd: 仪表化对等状态 (David Zafman)
osd: 正确强制执行 rados 类的 RD/WR 标志
osd: 升级时删除旧的 pg log (Samuel Just)
rgw: 在关闭前完成正在进行的请求
rgw: 修复带有 response-* 查询字符串参数的 S3 auth (Sylvain Munaut, Yehuda Sadeh)
sysvinit: 添加 condrestart 命令 (Dan van der Ster)