4.4. Ceph 文件系统
现在,当创建快照时,为快照目录更新 mtime 和 change_attr
在以前的版本中,libcephfs
客户端不会更新 mtime,并在创建或删除 snaps 时更改属性。因此,NFS 客户端无法正确列出 CephFS NFS-Ganesha 导出中的 CephFS 快照。
在这个版本中,当快照被创建、删除和重命名时,mtime 和 change_attr 会为快照目录 .snap
更新。正确的 mtime 和 change_attr 确保列出快照不会返回过时的快照条目。
cephfs-top -d [--delay]
选项只接受在 1 到 25 之间的整数值。
在以前的版本中,cephfs-top -d [--delay]
选项无法正常工作,因为添加了几个新的策展方法。新的 curses 方法只接受整数值,因为当从 helper 函数获取浮点值时会抛出异常。
在这个版本中,cephfs-top -d [--delay]
选项只接受在 1 到 25 之间范围的整数值,cephfs-top
实用程序可以正常工作。
在 unlink 完成后创建相同的 dentries 不会使 MDS 守护进程崩溃
在以前的版本中,unlink 和 create 操作之间存在一个 racy 条件。因此,如果因为某种原因导致之前的非链接请求延迟,并且在此期间尝试创建相同的 dentries,则无法通过使 MDS 守护进程或新创建失败,但写入的内容将会丢失。
在这个版本中,用户需要确保等待 unlink 完成,以避免创建同一 dentries 时发生冲突。
在运行 ceph nfs cluster info CLUSTER_ID
命令时,不存在的集群不再显示。
在以前的版本中,当 ceph nfs cluster info CLUSTER_ID
命令运行时,不会检查集群的存在,因此会显示不存在的集群的信息,如 virtual_ip
和 backend
、null 和 empty。
在这个版本中,'ceph nfs cluster info CLUSTER_ID' 命令会检查 集群是否存在,并在查询不存在的集群时抛出错误 ENOENT: 集群。
snap-schedule 模块不再错误地引用 volumes 模块
在以前的版本中,snap-schedule 模块在尝试获取子卷路径时会错误地引用 volumes 模块。由于使用了不正确的 volumes 模块名称和远程方法名称,因此会看到 ImportError
回溯信息。
在这个版本中,未测试且不正确的代码被重新处理,方法通过 snap-schedule CLI 接口方法正确调用。现在,snap-schedule 模块会在尝试添加子卷级别调度时正确解析子卷路径。
整数溢出和 ops_in_flight
值溢出不再发生
在以前的版本中,_calculate_ops
依赖于配置选项 filer_max_purge_ops
,后者也可以随时修改。因此,如果 ops_in_flight
的值设定为 uint64
的功能,则会有一个整数溢出,这会使 ops_in_flight
大于 max_purge_ops
,且无法返回合理的值。
在这个版本中,在 ops_in_flight
中使用 filer_max_purge_ops
被忽略,因为它已在 Filer::_do_purge_range ()
中使用。整数溢出和 ops_in_flight
值溢出不再发生。
无效的 OSD 请求不再提交到 RADOS
在以前的版本中,当第一个 dentry 有足够的元数据且大小大于 max_write_size
时,无效的 OSD 请求将提交到 RADOS。因此,RADOS 将失败,导致 CephFS 变为只读。
在这个版本中,所有 OSD 请求都会填充验证的信息,然后再将其发送到 RADOS,且没有无效的 OSD 请求会导致 CephFS 只读。
MDS 现在处理所有 stray 目录条目。
在以前的版本中,MDS stray 目录处理逻辑中的一个错误会导致 MDS 跳过处理几个 stray 目录条目。因此,MDS 不会处理所有 stray 目录条目,从而导致删除的文件不会释放空间。
在这个版本中,stray 索引指针被修正,以便 MDS 处理所有 stray 目录。
对于附加到 Ceph 文件系统的池的池,池级 snaps 被禁用
在以前的版本中,池级别的 snaps 和 mon-managed snaps 具有自己的 snap ID 命名空间,这会导致 ID 之间的冲突,Ceph Monitor 无法唯一标识 snap,因为它是池级 snap 或 mon-managed snap。因此,在引用 ID 时,错误的 snap 会被删除,这存在于池级 snaps 和 mon-managed snaps 中。
在这个版本中,附加到 Ceph 文件系统的池的池级别 snaps 被禁用,且不会发生池 ID 冲突。因此,当 CephFS snap 被删除时,不会发生不必要的数据丢失。
客户端请求不再在 MDS 和客户端之间无限期地退回
在以前的版本中,CephFS 客户端和 MDS 之间的客户端请求的 Ceph 协议之间存在不匹配。因此,在 CephFS 客户端和 MDS 间通信时,对应的信息会被截断或丢失,客户端请求会在 MDS 和客户端之间无限期退回。
在这个版本中,客户端请求的协议中相应成员的类型通过使它们相同类型和新代码与旧 Ceph 兼容而修正。客户端请求不会无限期地在 MDS 和客户端之间退回,并在重试后停止。
代码 assert 添加到 Ceph Manager 守护进程服务中,以检测元数据崩溃
在以前的版本中,管理器守护进程服务会为运行 Postgres 的工作负载引入与快照相关的元数据崩溃。
在这个版本中,代码 assert 被添加到管理器守护进程服务中,它会在检测到新的崩溃时触发。这可减少损坏的可能性,并允许收集日志不确定原因。
如果在集群升级到 Red Hat Ceph Storage 6.1 后守护进程崩溃,请联系红帽支持以分析和纠正操作。
MDS 守护进程不再会因为会话映射版本不匹配问题而崩溃
在以前的版本中,当 MDS 故障转移发生时,MDS 会话映射日志日志无法正确保留。因此,当新 MDS 尝试重播日志时,sessionmap 日志与 MDCache 中的信息不匹配,或其他日志日志中的信息不匹配,从而导致 MDS 守护进程触发 assert 崩溃。
在这个版本中,尝试强制重播 sessionmap 版本,而不是崩溃 MDS 守护进程会导致因为 sessionmap 版本不匹配的问题导致 MDS 守护进程不会崩溃。
在等待上限撤销时 MDS 不再卡住
在以前的版本中,如果 __setattrx ()
失败,_write ()
将保留 CEPH_CAP_FILE_WR
caps 引用,MDS 将无限期等待上限撤销确认。它还会导致其他客户端请求无限期卡住。
在这个版本中,如果 __setattrx ()
失败,且 MDS 封锁请求没有卡住,则会发布 CEPH_CAP_FILE_WR
caps reference。