6.7. RADOS
执行两个站点扩展集群的 DR 测试不再会导致 Ceph 变得无响应
在以前的版本中,当执行两个站点扩展集群的 DR 测试时,删除并在集群中添加新 monitor 会导致 ConnectionTracker
类的排名不正确。因此,监控器无法识别 peer_tracker
副本中的自身,永远不会更新其正确的字段,从而导致选择过程中出现死锁,这会导致 Ceph 变得不响应。
在这个版本中,会进行以下修正:
-
在功能
notify_rank_removed ()
中添加了 assert,以将Monmap
提供的预期等级与手动调整的等级进行比较。 -
从每个
Monmap
更新中清除变量removed_ranks
。 -
添加了在执行命令 -
ceph connection scores reset
resetpeer_tracker.rank
时手动重置 peer_tracker.rank 的操作。peer_tracker.rank
与 monitor 的当前等级匹配。 -
添加了
Elector
和ConnectionTracker
类中的函数,以便在升级 monitor 时检查干净的peer_tracker
,包括引导。如果找到 unclean,则peer_tracker
将被清除。 -
在 Red Hat Ceph Storage 中,用户可以在关闭 monitor 前手动删除 monitor 等级,从而导致
Monmap
不一致。因此,在Monitor::notify_new_monmap ()
中,我们阻止函数删除我们的排名或不存在于Monmap
中。
集群现在可以按预期工作,且没有意外停机时间。当执行具有两个站点扩展集群的 DR 测试时,集群不再变得无响应。
等级从 live_pinging
和 dead_pinging
集中删除,以缓解不一致的连接分数问题
在以前的版本中,当连续删除两个监视器时,如果排名大小等于 Paxos 的大小,则 monitor 会面临一个条件,且不会从 dead_pinging
集合中删除等级。因此,等级保留在 dead_pinging
集合中,这会导致问题,如启用扩展集群模式时不一致的连接分数。
在这个版本中,添加了一个删除最高等级 monitor 的情况,即当排名等于 Paxos 的大小时,从 live_pinging
和 dead_pinging
集合中删除排名。该监控器处于健康状态,并设置干净的 live_pinging
和 dead_pinging
。
Prometheus 指标现在根据请求反映所有 Ceph Monitor 的正确 Ceph 版本
在以前的版本中,当监控器升级时,Prometheus 指标报告 Ceph Monitor 不匹配的 Ceph 版本。因此,需要重启活跃的 Ceph Manager 守护进程来解决这个问题。
在这个版本中,当 MON 选举结束时,Ceph Monitor 会在 mgr
中使用 mon
元数据明确发送带有元数据的更新请求。
ceph daemon heap status
命令显示堆状态
在以前的版本中,由于无法通过 ceph daemon
命令获取堆信息失败,ceph daemon heap stats
命令会返回空输出,而不是返回 Ceph 守护进程的当前堆使用量。这是因为 ceph::osd_cmds::heap ()
混淆 stderr
和 stdout
概念,这会导致输出差异。
在这个版本中,ceph daemon heap stats
命令返回与使用 ceph tell
命令获取的 Ceph 守护进程的堆使用量信息。
使用 ceph orch apply mon <num> 命令时,Ceph Monitor
不再崩溃
在以前的版本中,当使用 ceph orch apply mon <num
> 命令减少集群中的 monitor 时,监控器会在 ceph-adm
中关闭前删除,从而导致 monitor 崩溃。
在这个版本中,将所有代码路径添加了一个完整性检查,以检查对等等级是否大于或等于 monitor 映射中的等级大小。如果条件满足,则跳过导致 monitor 崩溃的某些操作。对等等级最终会在 monitor 映射的下一版本中解析自己。在关闭前,监控器从 monitor 映射中删除时不再崩溃。
最终用户现在可以从 Ceph 集群日志中看到 scrub 或 deep-scrub 启动
的消息
在以前的版本中,由于 Ceph 集群日志中缺少 scrub 或 deep-scrub 启动的消息,最终用户无法通过日志知道已为 PG 启动了清理。
在这个版本中,清理或深度清理 启动
信息被重新加入。现在,在清理或深度清理进程启动时,Ceph 集群日志会为 PG 显示相关的消息。
Ceph Manager 故障切换过程中没有断言
在以前的版本中,当激活 Ceph Manager 时,它会接收之前活跃管理器发送的多个 service_map
版本。当新激活的管理器收到带有更高版本的映射时,代码中的检查会导致断言失败。
在这个版本中,管理器中处理初始服务映射的检查已被放宽,在 Ceph 管理器故障切换过程中没有断言。
在升级集群后,用户可以删除克隆的对象
在以前的版本中,在将集群从 Red Hat Ceph Storage 4 升级到 Red Hat Ceph Storage 5 后,删除之前版本中创建的对象快照会离开克隆,且无法删除。这是因为 SnapMapper
键被错误地转换。
在这个版本中,更新了 SnapMapper
的传统规格,以匹配新的密钥格式。早期版本的 Ceph 中的克隆对象现在可以在升级后轻松删除。
对于小型的写,不再会发生 RocksDB 错误
BlueStore 对于 HDD 采用了一种延迟小型写的策略,在 RocksDB 中存储数据。从 RocksDB 清理延迟数据是一个后台进程,它不与 BlueFS 同步。
在这个版本中,延迟重播不再覆盖 BlueFS 数据,且不会发生一些 RocksDB 错误,例如:
-
osd_superblock
崩溃。 - CURRENT 不会以换行符结尾。
-
.sst
文件校验和错误。
不要写延迟数据,因为写入位置可能包含正确的对象或为空。不可能以这种方式破坏对象数据。BlueFS 是唯一可以分配此空间的实体。
可以通过脱机和在线修剪删除 PG 日志条目损坏
在以前的版本中,在低级 PG 分割操作期间,PG 日志 dups 条目的修剪会无法被 PG 自动扩展器使用,超过人为 operator 的频率。使 dups 修剪导致 PG 日志的内存增长造成大量内存增长,因为 OSD 内存不足时会导致 OSD 崩溃。重启 OSD 不会解决此问题,因为 PG 日志存储在磁盘上,并在启动时重新加载到 RAM。
在这个版本中,离线(使用 ceph-objectstore-tool
命令)和在线(带有 OSD)进行修剪可能会移除 PG Log 的损坏的 dups 条目,该条目会阻塞修建机制并导致内存增长。实施了调试功能,它将 dups 条目的数量输出到 OSD 的日志,以帮助调查未来。