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