12.2.7 Luminous 发布
这是 Luminous v12.2.x 长期稳定版系列的第七个错误修复版本。此版本包含对 v12.2.6 和 v12.2.5 版本中回归问题的多项修复。我们建议所有用户升级到 v12.2.7。
| 注意 | v12.2.6 版本存在严重的已知回归问题。尽管 v12.2.6 未正式发布,但如果您仍安装了此版本,请参阅下面的升级过程。 |
|---|---|
| 注意 | v12.2.5 版本存在纠删码池的潜在数据损坏问题。如果您使用纠删码运行了 v12.2.5,请参阅下文。 |
从 v12.2.6 升级 ¶
v12.2.6 包含 BlueStore OSD 优化功能的不完整回溯,该功能避免同时维护每个对象的校验和和内部 BlueStore 校验和。由于意外遗漏了一个关键的后续补丁,v12.2.6 会损坏(无法更新)某些对象的存储的每个对象校验和值。这可能导致在尝试读取这些对象时出现 EIO 错误。
如果您的集群仅使用 FileStore,则无需采取特殊措施。此问题仅影响具有 BlueStore 的集群。
如果您的集群只有 BlueStore OSD(没有 FileStore),则应启用以下 OSD 选项
osd skip data digest = true
这将避免在 PG 的主 OSD 是 BlueStore 时设置和开始忽略完整对象摘要。
如果您的集群混合了 BlueStore 和 FileStore OSD,则应启用以下 OSD 选项
osd distrust data digest = true
这将避免在所有情况下设置和开始忽略完整对象摘要。这会削弱 FileStore 的数据完整性检查(尽管这些检查始终只是临时性的)。
如果您的集群包含 BlueStore OSD 且受到影响,深度清理将针对受影响的对象生成有关 CRC 不匹配的错误。目前,修复操作不知道如何纠正它们(因为所有副本与预期校验和不匹配,因此不知道如何进行)。这些警告是无害的,因为 IO 不受影响,并且副本都仍然同步。随着时间的推移,当这些对象被修改时,受影响对象的数量可能会自行下降(可能降为零)。我们希望在 v12.2.8 中包含一个清理改进功能,以清理任何剩余的对象。
此外,请参阅下面的说明,这些说明适用于 v12.2.5 和 v12.2.6。
从 v12.2.5 或 v12.2.6 升级 ¶
如果您将 v12.2.5 或 v12.2.6 与纠删码池结合使用,则在某些工作负载下存在很小的数据损坏风险。具体来说,当满足以下条件时:
- 正在使用纠删码池
- 池正忙于成功的写入
- 池也正忙于导致 librados 用户错误结果的更新。RGW 垃圾回收是这种情况最常见的例子(它会对不总是存在的对象发送删除操作)。
- 一些 OSD 相当繁忙。一个已知的此类负载示例是 FileStore 拆分,尽管原则上集群上的任何负载也可能触发此行为。
- 一个或多个 OSD 重启。
这种组合可能导致 OSD 崩溃,并可能使 PG 处于无法对等的状态。
值得注意的是,升级集群涉及 OSD 重启,因此可能会增加遇到此错误的风险。因此,对于具有纠删码池的集群,我们建议采用以下升级过程以最大程度地降低风险
安装 v12.2.7 包。
暂时暂停对集群的 IO
ceph osd pause
重启所有 OSD 并等待所有 PG 变为活动状态。
恢复 IO
ceph osd unpause
这将导致 OSD 重启期间出现可用性中断。如果这是不可接受的,一个更危险的替代方法是在升级期间禁用 RGW 垃圾回收(这些 rados 操作的主要已知原因):
1. 在 ceph.conf 中设置 ``rgw_enable_gc_threads = false``
2. 重启所有 radosgw 守护进程
3. 升级并重启所有 OSD
4. 从 ceph.conf 中删除 ``rgw_enable_gc_threads = false``
5. 重启所有 radosgw 守护进程
从其他版本升级 ¶
如果您的集群未运行 v12.2.5 或 v12.2.6,则上述问题均不适用于您,您应正常升级。
v12.2.7 更改日志 ¶
- mon/AuthMonitor: 改进错误消息 (issue#21765, pr#22963, Douglas Fuller)
- osd/PG: 不要盲目地滚动到 log.head (issue#24597, pr#22976, Sage Weil)
- osd/PrimaryLogPG: 从客户端重建 attrs (issue#24768, pr#22962, Sage Weil)
- osd: 解决 12.2.6 中的数据摘要问题(版本 2) (issue#24922, pr#23055, Sage Weil)
- rgw: rgw_cache_expiry_interval 后缓存中的对象永不刷新 (issue#24346, pr#22369, Casey Bodley, Matt Benjamin)
v12.2.6 中的值得注意的更改 ¶
| 注意 | 这是一个有严重已知回归问题的损坏版本。请勿安装。下面的发行说明用于跟踪属于 12.2.6(以及 12.2.7)的修复程序。 |
|---|
身份验证:
- 在 12.2.4 及更早版本中,未检查密钥环 caps 的有效性,因此 caps 字符串可以是任何内容。从 12.2.6 开始,caps 字符串经过验证,向“ceph auth add”等提供带有无效 caps 字符串的密钥环将导致错误。
- CVE 2018-1128: auth: cephx 授权器易受重放攻击 (issue#24836, Sage Weil)
- CVE 2018-1129: auth: cephx 签名检查较弱 (issue#24837, Sage Weil)
- CVE 2018-10861: mon: 对池操作的 auth 检查不正确 (issue#24838, Jason Dillaman)
config-key 接口可以存储任意二进制 blob,但 JSON 只能表示可打印字符串。如果存在二进制 blob,则“ceph config-key dump”命令将把它们显示为类似
<<< binary blob of length N >>>的内容。
v12.2.6 更改日志 ¶
- build/ops: build-integration-branch 脚本 (issue#24003, pr#21919, Nathan Cutler, Kefu Chai, Sage Weil)
- cephfs-journal-tool: 在销毁日志之前等待 prezero ops (issue#20549, pr#21874, “Yan, Zheng”)
- cephfs: MDSMonitor: 清理和保护 fsmap 访问 (issue#23762, pr#21732, Patrick Donnelly)
- cephfs: MDSMonitor: 在多文件系统设置中分配 standby-replay 守护进程后崩溃 (issue#23762, issue#23658, pr#22603, “Yan, Zheng”)
- cephfs: MDSMonitor: 修复 mds health 以错误格式打印 (issue#23582, pr#21447, Patrick Donnelly)
- cephfs: MDSMonitor: 从待处理初始化新的 Filesystem epoch (issue#23764, pr#21512, Patrick Donnelly)
- ceph-fuse: readdir 结果中缺少 dentries (issue#23894, pr#22119, “Yan, Zheng”)
- ceph-fuse: 返回正确的退出代码 (issue#23665, pr#21495, Patrick Donnelly)
- ceph-fuse: 剪切 ceph-fuse -V 输出 (issue#23248, pr#21600, Jos Collin)
- ceph_test_rados_api_aio: 修复 full pool 和 osdmap 的竞争条件 (issue#23917, issue#23876, pr#21778, Sage Weil)
- ceph-volume: 报错 on 需要 ceph.conf 才能运行的命令 (issue#23941, pr#22746, Andrew Schoen)
- ceph-volume: 失败的 ceph-osd –mkfs 命令不会停止 OSD 创建过程 (issue#23874, pr#21746, Alfredo Deza)
- client: 添加 ceph_ll_sync_inode (issue#23291, pr#21109, Jeff Layton)
- client: 添加客户端选项描述 (issue#22933, pr#21589, Patrick Donnelly)
- client: 锚定 dentries 以进行修剪,使 cap 遍历安全 (issue#24137, pr#22201, Patrick Donnelly)
- client: 当 inode 包含 TX 缓冲区头时避免释放 inode (issue#23837, pr#22168, Guan yunfei, “Yan, Zheng”, Jason Dillaman)
- client: 脏 caps 可能永远没有机会刷新 (issue#22546, pr#21278, dongdong tao)
- client: 修复撤销非 auth caps 的问题 (issue#24172, pr#22221, “Yan, Zheng”)
- client: 修复请求 send_to_auth 从未真正使用的问题 (issue#23541, pr#21354, Zhi Zhang)
- client: 修复 gid_count 检查 (issue#23652, pr#21596, Jos Collin)
- client: 在等待不稳定请求之前在 _fsync 中刷新 mdlog (issue#23714, pr#21542, Jeff Layton)
- client: 如果 MDS 会话被驱逐,umount 挂起 (issue#10915, pr#22018, Rishabh Dave)
- client: 在持有 cap 引用时避免发送 mds 请求 (issue#24369, pr#22354, “Yan, Zheng”)
- cmake: 修复 Bionic 上的 cepfs java 绑定构建 (issue#23458, issue#24012, pr#21872, Kefu Chai, Shengjing Zhu)
- cmake/modules/BuildRocksDB.cmake: 为 rocksdb 启用压缩 (issue#24025, pr#22215, Kefu Chai)
- common: ARMv8 功能检测中断,导致非法指令崩溃 (issue#23464, pr#22567, Adam Kupczyk)
- common: 修复 BoundedKeyCounter const_pointer_iterator (issue#22139, pr#21083, Casey Bodley)
- common: 修复 rados bench write JSON 输出中的拼写错误 (issue#24199, pr#22391, Sandor Zeestraten)
- common: 部分恢复 95fc248 以使 get_process_name 工作 (issue#24123, pr#22290, Mykola Golub)
- core: 删除带有活动通知延迟操作的池可能导致段错误 (issue#23966, pr#22143, Kefu Chai, Jason Dillaman)
- core: mon/MgrMonitor: 将“unresponsive”消息更改为信息级别 (issue#24222, pr#22331, Sage Weil)
- core: Wip scrub omap (issue#24366, pr#22375, xie xingguo, David Zafman)
- crush: 修复 crush device_class_clone for unpopulated/empty weight-sets (issue#23386, pr#22381, Sage Weil)
- crush, osd: 在应用 pg upmaps 时正确处理多个父级 (issue#23921, pr#22115, xiexingguo)
- doc: 修复 ceph-fuse 中的 -d 描述 (issue#23214, pr#21616, Jos Collin)
- doc: 更新 ceph-fuse 文档 (issue#23084, pr#21603, Jos Collin)
- fuse: 连接 fuse_ll_access (issue#23509, pr#21475, Jeff Layton)
- kceph: 在被驱逐的客户端上 umount 永远阻塞 (issue#24053, issue#24054, pr#22208, Yan, Zheng, “Yan, Zheng”)
- librbd: 如果禁用了写回缓存,则在完成时将 IO 提交为 safe (issue#23516, pr#22370, Jason Dillaman)
- librbd: 防止 watcher 在有未完成操作时取消注册 (issue#23955, pr#21938, Jason Dillaman)
- lvm: 当 osd creation 失败时记录异常 (issue#24456, pr#22641, Andrew Schoen)
- mds: 避免连续两次调用 rejoin_gather_finish() (issue#24047, pr#22171, “Yan, Zheng”)
- mds: 当明确设置配额时向相关客户端广播配额 (issue#24133, pr#22271, Zhi Zhang)
- mds: 故障转移时崩溃 (issue#23518, pr#21900, “Yan, Zheng”)
- mds: 当 mds 处于“starting”状态时不要发现 inode/dirfrag (issue#23812, pr#21990, “Yan, Zheng”)
- mds: 修复多 MDS 之间偶尔出现的 dir rstat 不一致问题 (issue#23538, pr#21617, “Yan, Zheng”, Zhi Zhang)
- mds: 修复一些内存泄漏 (issue#24289, pr#22310, “Yan, Zheng”)
- mds: 修复 rejoin 期间不健康的 heartbeat (issue#23530, pr#21366, dongdong tao)
- mds: 处理导入会话竞争 (issue#24072, issue#24087, pr#21989, Patrick Donnelly)
- mds: 在 MClientCaps 中包含目录 inode 的 nfiles/nsubdirs (issue#23855, pr#22118, “Yan, Zheng”)
- mds: 如果等待 dirfragtreelock 则踢出 rdlock (issue#23919, pr#21901, Patrick Donnelly)
- mds: 使 rstat.rctime 遵循 inodes’ ctime (issue#23380, pr#21448, “Yan, Zheng”)
- mds: 如果会话的预分配 inos 与 inotable 不匹配,则标记为损坏 (issue#23452, pr#21372, “Yan, Zheng”)
- mds: 标记新根 inode dirty (issue#23960, pr#21922, Patrick Donnelly)
- mds: mds 关闭修复和优化 (issue#23602, pr#21346, “Yan, Zheng”)
- mds: 杂项负载均衡器修复 (issue#21745, pr#21412, “Yan, Zheng”, Jianyu Li)
- mds: 在 MDCache::shutdown_pass() 中正确检查 auth subtree count (issue#23813, pr#21844, “Yan, Zheng”)
- mds: 正确 dirty journal replay 打开的 sessions (issue#23625, pr#21441, “Yan, Zheng”)
- mds: 在 scrub 修复某些内容后正确修剪日志段 (issue#23880, pr#21840, “Yan, Zheng”)
- mds: 当没有 purge queue item 实际执行时设置 could_consume 为 false (issue#24073, pr#22176, Xuehan Xu)
- mds: 在关闭期间修剪日志以清理元数据 (issue#23923, pr#21899, Patrick Donnelly)
- mds: CDir::_omap_fetched 中的 underwater dentry check 存在竞争条件 (issue#23032, pr#21187, Yan, Zheng)
- mg_read() 调用参数错误 (issue#23596, pr#21382, Nathan Cutler)
- mgr/influx: 仅在第一次出现点号 (.) 时拆分字符串 (issue#23996, pr#21965, Wido den Hollander)
- mgr: Module ‘balancer’ failed: 找不到 bucket -14 (issue#24167, pr#22308, Sage Weil)
- mon: 添加 ‘ceph osd pool get erasure allow_ec_overwrites’ 命令 (issue#23487, pr#21378, Mykola Golub)
- mon: 为 rocksdb 启用 level_compaction_dynamic_level_bytes (issue#24361, pr#22360, Kefu Chai)
- mon: 优雅地处理错误的快照删除请求 (issue#18746, pr#21717, Paul Emmerich)
- mon: 集群更改时 MON CPU 使用率高 (issue#23713, pr#21968, Sage Weil, Xiaoxi CHEN)
- mon/MDSMonitor: 不要向集群日志发送冗余的 MDS health 消息 (issue#24308, pr#22558, Sage Weil)
- msg/async/AsyncConnection: 修复 process_connection 中的 FPE (issue#23618, pr#21376, Brad Hubbard)
- os/bluestore: 更改与内核错误列表相关的 allow_eio 策略 (issue#23333, pr#21405, Radoslaw Zarzynski)
- os/bluestore/bluefs_types: 使 block_mask 为 64 位 (issue#23840, pr#21740, Sage Weil)
- os/bluestore: 修复 KernelDevice 中超过最大 IO 队列深度的问题 (issue#23246, pr#21407, Radoslaw Zarzynski)
- os/bluestore: 修复 SharedBlobSet refcounting race (issue#24319, pr#22650, Sage Weil)
- os/bluestore: 简化并修复 SharedBlob::put() (issue#24211, pr#22351, Sage Weil)
- osdc/Objecter: 修复 _finish_command 中的递归锁定 (issue#23940, pr#21939, Sage Weil)
- osdc/Objecter: 防止 linger op callback 被双重调用 (issue#23872, pr#21752, Jason Dillaman)
- osd: 不要在空快照集上崩溃 (issue#23851, pr#21638, Mykola Golub, Igor Fedotov)
- osd: 即使抢占以较小的块重新启动,也不要驱逐 (issue#22881, issue#23909, issue#23646, pr#22044, Sage Weil, fang yuxiang, Jianpeng Ma, kungf, xie xingguo, David Zafman)
- osd/ECBackend: 仅在完成恢复读取时检查所需的 shards (issue#23195, pr#21911, Josh Durgin, Kefu Chai)
- osd: 增加默认硬 pg limit (issue#24243, pr#22592, Josh Durgin)
- osd/OSDMap: 在应用 pg upmaps 之前检查集群拓扑是否更改 (issue#23878, pr#21818, xiexingguo)
- osd/PG: 修复 DeferRecovery vs AllReplicasRecovered race (issue#23860, pr#21964, Sage Weil)
- osd/PG: 修复 Incomplete::react(AdvMap&) 中的 uninit read (issue#23980, pr#21993, Sage Weil)
- osd/PrimaryLogPG: 避免 flush 与 write 冲突时出现无限循环 (issue#23664, pr#21764, Sage Weil)
- osd: 在启动 wq 线程之前向 OSDService 发布 osdmap (issue#21977, pr#21737, Sage Weil)
- osd: 警告具有太多 omap 条目的对象 (issue#23784, pr#21518, Brad Hubbard)
- qa: 禁用编译 env_librados_test 时的 -Werror (issue#23786, pr#21655, Kefu Chai)
- qa: 修复 test_lifecycle 的黑名单检查 (issue#23975, pr#21921, Patrick Donnelly)
- qa: 删除 racy/buggy test_purge_queue_op_rate (issue#23829, pr#21841, Patrick Donnelly)
- qa/suites/rbd/basic/msgr-failures: 删除 many.yaml (issue#23789, pr#22128, Sage Weil)
- qa: 等待更长时间让 osd 刷新 pg stats (issue#24321, pr#22296, Kefu Chai)
- qa/workunits/mon/test_mon_config_key.py 在 master 上失败 (issue#23622, pr#21368, Sage Weil)
- qa/workunits/rbd: 调整 import_export 测试以处理多个单元 (issue#24733, pr#22911, Jason Dillaman)
- qa/workunits/rbd: mirror disconnect test 中潜在的竞争条件 (issue#23938, pr#21869, Mykola Golub)
- radosgw-admin sync status 改进 (issue#20473, pr#21908, lvshanchun, Casey Bodley)
- rbd: 改进 ‘import-diff’ 损坏输入错误消息 (issue#18844, issue#23038, pr#21316, PCzhangPC, songweibin, Jason Dillaman)
- rbd-mirror: 确保远程降级在本地重放 (issue#24009, pr#22142, Jason Dillaman)
- rbd-nbd 可能会在 logging thread 中死锁 (issue#23143, pr#21705, Sage Weil)
- rbd: python bindings 修复和改进 (issue#23609, pr#21725, Ricardo Dias)
- rbd: [rbd-mirror] bootstrap 后 image replayer 的 asok hook 未重新注册 (issue#23888, pr#21726, Jason Dillaman)
- rbd: [rbd-mirror] local tag predecessor mirror uuid 被错误地替换为 remote (issue#23876, pr#21741, Jason Dillaman)
- rbd: [rbd-mirror] 运行 asok ‘flush’ 命令时潜在的死锁 (issue#24141, pr#22180, Mykola Golub)
- rbd: [rbd-mirror] PoolReplayer 关闭期间潜在的竞争条件 (issue#24008, pr#22172, Jason Dillaman)
- rgw: 为 fetch_remote_obj 添加缓冲过滤器以进行压缩 (issue#23547, pr#21758, Casey Bodley)
- rgw: 添加可配置的 AWS 兼容无效 range get 行为 (issue#24317, pr#22302, Matt Benjamin)
- rgw: 如果获取用户统计信息时 admin rest api 不应返回错误 (issue#23821, pr#21661, Zhang Shaowen)
- rgw: 允许删除 swift acls (issue#22897, pr#22465, Marcus Watts)
- rgw: aws4 auth 支持 PutBucketRequestPayment (issue#23803, pr#21660, Casey Bodley)
- rgw: beast frontend 可以侦听多个端点 (issue#22779, pr#21568, Casey Bodley)
- rgw: 存储桶被删除后,存储桶生命周期仍然存在 (issue#19632, pr#22551, Wei Qiaomiao)
- rgw: 如果未设置参数,请勿修改电子邮件 (issue#24142, pr#22352, Volker Theile)
- rgw: 如果不是当前期间,则不反映期间 (issue#22844, pr#21735, Tianshan Qu)
- rgw: es module: 正确设置压缩类型 (issue#22758, pr#21736, Abhishek Lekshmanan)
- rgw_file: 直接删除时有条件地取消链接句柄 (issue#23299, pr#21438, Matt Benjamin)
- rgw: 修复 bi_list 以在跳过条目时重置 is_truncated 标志 (issue#22721, pr#21669, Orit Wasserman)
- rgw: 修复在压缩时没有 ‘x-amz-copy-source-range’ 的 ‘copy part’ (issue#23196, pr#22438, fang yuxiang)
- rgw: 修复 GET with ?torrent 的错误处理 (issue#23506, pr#21674, Casey Bodley)
- rgw: 修复使用 libcurl 和空 header value 的问题 (issue#23663, pr#21738, Casey Bodley)
- rgw:lc: RGWPutLC 在缺少 tag 时返回 ERR_MALFORMED_XML
in… (issue#21377, pr#19884, Shasha Lu) - rgw: 使 implicit_tenants 向后兼容 (issue#24348, pr#22363, Marcus Watts)
- rgw: 错误命名的 S3 操作 (issue#24061, pr#21917, xiangxiang)
- rgw: 将所有 pool creation 移到 rgw_init_ioctx 中 (issue#23480, pr#21675, Casey Bodley)
- rgw: radosgw-admin 不应对只读命令使用元数据缓存 (issue#23468, pr#21437, Orit Wasserman)
- rgw: 在协程关闭错误时提高日志级别 (issue#23974, pr#21792, Casey Bodley)
- rgw: 如果 max_keys 无法正确转换,则返回 EINVAL (issue#23586, pr#21435, yuliyang)
- rgw: rgw_statfs 应报告正确的 stats (issue#22202, pr#21724, Supriti Singh)
- rgw: trim 元数据值内的所有空格 (issue#23301, pr#22177, Orit Wasserman)
- slow mon ops from osd_failure (issue#24322, pr#22568, Sage Weil)
- luminous/jewel 文档未渲染目录 (issue#23780, pr#21502, Alfredo Deza)
- test/librados: 增加 pgp_num 以及 pg_num (issue#23763, pr#21556, Kefu Chai)
- test/rgw: 修复 bucket checkpoints (issue#24212, pr#22541, Casey Bodley)
- tests: filestore journal replay 不保护 omap 操作 (issue#22920, pr#21547, Sage Weil)
- tools: ceph-disk: 将日志写入 /var/log/ceph 而不是 /var/run/ceph (issue#24041, pr#21870, Kefu Chai)
- tools: ceph-fuse: getgroups 失败导致异常 (issue#23446, pr#21687, Jeff Layton)