4.3. Ceph 文件系统
MDS 守护进程
现在在每个排队的工作后重置每个线程中的心跳
在以前的版本中,如果线程有大量工作,则线程会长时间保存 mds_lock
。这会导致其他线程被资源不足并长时间卡住,因此 MDS 守护进程将无法报告 heartbeat 以监控,并从集群中启动。
在这个版本中,MDS 守护进程会在每个排队的工作后重置每个线程中的心跳。
Ceph 目录服务器在并发查找和非链接操作过程中不再崩溃
在以前的版本中,断言放置在代码中的错误假设会出现来自 Ceph 客户端的并发查找和未链接操作,从而导致 Ceph 元数据服务器崩溃。
在这个版本中,断言会移到相关的位置,在并发查找和未链接操作过程中被移到相关的位置,从而导致 Ceph 元数据服务器在不崩溃的情况下提供 Ceph 客户端操作。
如果客户端仅在创建后发送 getattr 客户端请求,则副本 MDS 不再卡住
在以前的版本中,如果客户端仅在创建副本 MDS 后发送 getattr 客户端请求,客户端将创建一个指向 #INODE-NUMBER
的路径,因为 CI 节点
还没有链接。副本 MDS 会保持重试,直到 auth MDS flushed the mdlog
和 C_MDS_openc_finish
和 link_primary_inode
以后被命名为 5 秒。
在这个版本中,从 auth MDS 查找 CInode
的副本 MDS 会手动触发 mdslog flush
(如果无法找到它)。
现在,在列出子卷组时会显示用户创建的 Ceph 文件系统子卷组
在以前的版本中,Ceph 文件系统(CephFS)子卷组列表包含 CephFS 内部组,而不是用户创建的 CephFS 子卷组。
在这个版本中,内部组从 CephFS 子卷组列表过滤。因此,现在会显示用户创建的 CephFS 子卷组。
保存的 snap-schedules 从 Ceph 存储重新加载
在以前的版本中,重启 Ceph Manager 会导致保留策略规格丢失,因为它没有保存到 Ceph 存储中。因此,保留会停止工作。
在这个版本中,对 snap-schedules 的所有更改都会保留到 Ceph 存储,因此当重启 Ceph Manager 时,保存的 snap-schedule 都会从 Ceph 存储中重新载入,并使用指定的保留策略规格重启。
用于删除 RADOS 对象的 API 已更新
在以前的版本中,删除 RADOS 对象会导致程序崩溃,并在日志中创建回溯信息。
在这个版本中,API 被更新,以在升级后正确删除 RADOS 对象,且不会在日志中转储堆栈跟踪。
MDS 现在存储所有损坏的 dentry
在以前的版本中,如果 dentry 损坏尚不存在,元数据服务器(MDS)只会为
存储 dentry 损坏。因此,只有第一个损坏的 dentry 才会存储在损坏的表中,而 dirfrag
dirfrag
中的后续损坏才会被忘记。
在这个版本中,MDS 可以正确存储所有损坏的 dentries。
ceph-mds
守护进程在升级过程中不再崩溃
在以前的版本中,Ceph 元数据服务器守护进程(ceph-mds
)会在升级过程中崩溃,因为恢复内节点时元数据服务器中的错误假设。它导致 ceph-mds
在升级过程中按 assert。
在这个版本中,ceph-mds
在内节点恢复过程中进行正确的假设,ceph-mds
不再在升级过程中崩溃。
standby-replay Metadata Server 守护进程将不再会被非预期地被删除
在以前的版本中,Ceph Monitor 会在特定条件下从 MDS 映射中删除 standby-replay Metadata Server (MDS) 守护进程。这会导致 standby-replay MDS 守护进程从元数据服务器集群中删除,这会生成集群警告。
在这个版本中,Ceph Monitor 在考虑从 MDS 映射中删除 MDS 守护进程期间使用的逻辑,现在包含有关包含等级的 standby-replay MDS 守护进程的信息。因此,standby-replay MDS 守护进程不再意外从 MDS 集群中删除。
subvolume snapshot info
命令不再在输出中包含 size
字段
在以前的版本中,子卷快照
命令的输出会返回不正确的 快照大小
。这是因为 snapshot info
命令依赖于 rstats
来跟踪快照大小。rstats
从对应的子卷而不是快照本身跟踪快照的大小。
在这个版本中,snapshot info
命令的输出中删除了 size
字段,直到 rstats
被修复为止。
磁盘完整场景不再损坏配置文件
在以前的版本中,配置文件在没有使用临时文件的情况下直接写入磁盘,这涉及截断现有配置文件并写入配置数据。当磁盘已满时,这会导致空配置文件,因为 truncate 成功,但写入新配置数据失败且 没有空格
错误。另外,它还会导致相应子卷上所有操作都失败。
在这个版本中,配置数据被写入一个临时配置文件,并重命名为原始配置文件,并防止截断原始配置文件。
如果未知消息,请不要中止 MDS
在以前的版本中,如果元数据服务器(MDS)收到没有理解的消息,则元数据服务器(MDS)将中止。因此,任何恶意客户端都会通过向服务器发送一条新类型的消息来使服务器崩溃。除了恶意客户端外,这也意味着,每当存在协议问题时(如新客户端错误地向服务器发送新消息),整个系统也会崩溃,而不是只是新客户端。
在这个版本中,如果从客户端收到未知请求,MDS 不再中止,而是关闭会话、块列表并驱除客户端。这可以防止 MDS 和整个系统不受任何有意攻击,如拒绝任何恶意客户端的服务。
现在,NFS-Ganesha 导出的目录列表可以正常工作
在以前的版本中,Ceph 文件系统(CephFS)元数据服务器(MDS)不会在 CephFS 操作过程中增加目录内节点的更改属性(change_attr
),它只更改目录内节点的 ctime
。因此,当 NFS 内核客户端应该时,其 readdir
缓存不会使其无效。这是因为 CephFS 支持的 NFS Ganesha 服务器有时会报告目录内节点的不正确的更改属性值。因此,NFS 客户端会列出 CephFS 支持的 NFS Ganesha 导出的过时的目录内容。
在这个版本中,CephFS MDS 在操作过程中递增目录内节点的 change 属性,并且 NFS 客户端中的目录列表现在可以按预期工作,供 CephFS 支持的 NFS Ganesha 服务器导出。
CephFS 现在具有正确的目录访问
在以前的版本中,因为 Discretionary Access Control (DAC)管理不正确,目录访问也会被拒绝,即使 UID 为 0。
在这个版本中,即使目录用户、组群的实际权限不适合 UID 0,
也允许目录访问 UID 0。这将通过有效授予超级用户特权,生成正确的 Ceph 文件系统(CephFS)行为,以便对 UID 0 进行访问。