4.8. RADOS
如果池存储零对象,Ceph 会报告 POOL_APP_NOT_ENABLED
警告
在以前的版本中,如果池为空,如果 RGW 池启用了应用程序标签,Ceph 状态将无法报告池应用程序警告。
在这个版本中,即使池存储了 0 个对象,Ceph 也会报告 POOL_APP_NOT_ENABLED
警告。
在扩展集群的两个站点之间为不均匀的 OSD 权重添加检查
在以前的版本中,扩展集群部署后没有检查相等的 OSD 权重。因此,用户可以使 OSD 权重不相等。
在这个版本中,在扩展集群的两个站点间添加了不均匀的 OSD 权重。集群现在在两个站点之间提供有关不均匀 OSD 权重的警告。
当设置了 norecover
标志时,自动扩展不再运行
在以前的版本中,当设置 norecover
标志时,自动扩展会运行,从而导致创建新 PG,而这些 PG 需要回填。当缺少或降级对象时出现允许 norecover
标志时运行自动扩展,以避免客户端 I/O 无限期挂起。
在这个版本中,当设置了 norecover
标志时,自动扩展不会运行。
ceph config dump
命令输出现在一致
在以前的版本中,没有用户打印格式化的输出的 ceph config dump
命令会显示 localized 选项名称及其值。规范化与本地化选项的示例如下:
Normalized: mgr/dashboard/ssl_server_port Localized: mgr/dashboard/x/ssl_server_port
但是,该命令的用户打印(例如 JSON)版本仅显示规范化选项名称,如上例中所示。在没有 pretty-print 选项的情况下,ceph config dump
命令结果不一致。
在这个版本中,输出一致,在使用 ceph config dump --format TYPE
命令时始终显示 localized 选项名称,TYPE
作为 pretty-print 类型。
MGR 模块每分钟不再占用一个 CPU 内核,CPU 使用量是正常的
在以前的版本中,从放置组 auto-scaler 模块获取 OSDMap 的昂贵调用从 monitor 获取 OSDMap,这会导致 MGR 模块每分钟占用一个 CPU 内核。因此,MGR 守护进程中的 CPU 使用率很高。
在这个版本中,从放置组 auto-scaler 模块进行的 OSD map 调用数量会减少。CPU 用量现在正常。
OSD 父(主机)的正确 CRUSH 位置是确定的
在以前的版本中,当启用 osd_memory_target_autotune
选项时,内存目标会在主机级别应用。这可以通过在自动调整内存时使用主机掩码来完成。但是,应用到内存目标的代码不会决定父主机的 CRUSH 位置,以使更改传播到主机的 OSD。因此,由机器配置观察器托管的 OSD 都不会获得通知,osd_memory_target
对于那些 OSD 集合,osd_memory_target 保持不变。
在这个版本中,OSD 父(主机)的正确 CRUSH 位置取决于主机掩码。这允许更改传播到主机上的 OSD。每当 auto-tuner 应用新的 osd_memory_target
且更改反映时,机器托管的所有 OSD 都会获得通知。
监控在崩溃/关闭测试过程中不再处于选举状态
在以前的版本中,只有进入 stretch_mode
时才会填充 MonitorMap 的 disallowed_leaders
属性。但是,在有些情况下,被 revived 不会立即进入 stretch_mode
实例,因为它们将处于 probing
状态。这会导致跨集群的监控器之间设置的 disallowed_leaders
不匹配。因此,监控器无法选举领导机,选举会卡住,从而导致 Ceph 无响应。
在这个版本中,监控器不必处于 stretch_mode
来填充 disallowed_leaders
属性。监控在崩溃/关闭测试过程中不再处于选举状态。
'error get attr on' 信息不再发生
在以前的版本中,当使用-- op 列表
时,ceph-objectstore-tool
列出 pgmeta 对象,从而导致 "Error get attr on" 信息。
在这个版本中,会跳过 pgmeta 对象,并不再显示错误消息。
分配器中的 LBA 校准不再被使用,因为分配失败,OSD 守护进程不会 assert
在以前的版本中,OSD 守护进程会断言,无法重启,这有时可能会导致数据不可用或数据丢失。如果分配器被分配给 4000 请求并配置了不同的分配单元,则会发生此情况,因为 OSD 守护进程不会 assert。
在这个版本中,分配器中的 LBA 校准不会被使用,OSD 守护进程不会因为分配失败而断言。
使用 "libcephsqlite" 库的 sqlite 数据库不再被破坏,因为简短的读取无法正确为零内存页面失败。
在以前的版本中,"libcephsqlite"无法正确处理简短的读取,这可能会导致 sqlite 数据库崩溃。
在这个版本中,"libcephsqlite"零页可以正确地进行简短的读取,以避免潜在的崩溃。