Nautilus 中的新特性:CephFS 改进

batrick

Nautilus 中继续改进 CephFS 文件系统。与 Ceph 的其他部分一样,我们一直在投入大量开发时间来提高易用性和稳定性。以下章节将详细介绍这些工作。

MDS 稳定性

在过去两个版本中,MDS 稳定性一直是开发人员的重点。我们最近发现的一个问题是,具有非常大缓存(64GB+)的 MDS 在某些恢复事件期间会挂起。例如,当 MDS 尝试减小其缓存大小以遵守“mds_cache_memory_limit”时,会要求客户端释放一些其功能。为此,MDS 计算要删除的功能的期望比例,并要求每个客户端执行此操作。但是,大型 MDS 可能有数千万个功能,并且单个长时间运行的客户端可能有数百万个。一次性处理所有释放消息会导致 MDS 无法执行实际工作,甚至导致监视器用备用 MDS 替换它。

我们从两个方向解决了这个问题

  • MDS 现在限制了从客户端召回功能的速度,以便突然减小缓存大小(由于配置更改)或大型客户端缓存不会使 MDS 变得不稳定。此行为由以下新的配置变量控制:mds_recall_max_capsmds_recall_max_decay_ratemds_recall_max_decay_thresholdmds_recall_global_max_decay_thresholdmds_recall_warning_thresholdmds_recall_warning_decay_rate。默认值经过精心选择;我们预计管理员不需要更改它们。每个选项的描述都记录了其功能。
  • MDS 现在限制了单个客户端可以拥有的功能数量。这由新的 mds_max_caps_per_client 配置变量控制。MDS 将从超出此限制的客户端召回功能,直到它回到限制以下。客户端的版本无关紧要。

还在客户端本身内进行工作,使其能够主动释放不再使用的功能。

CephFS 的用户应该期望在操作非常大的缓存时,MDS 的行为更加可预测。此外,MDS 将不再容忍客户端持有数百万个 caps,这会在恢复事件或大型 MDS 缓存大小更改期间导致自身的问题。

NFS-Ganesha 网关集群

Ganesha 是一个用户空间 NFS 服务器,它导出本地文件系统和替代存储解决方案。其中一个长期存在的导出类型允许导出 CephFS 文件系统。这会将 Ceph 文件系统暴露给 NFS 客户端,这可能是出于许多原因,包括存储集群隔离、安全性和遗留应用程序。

Ceph 的 Nautilus 版本使 NFS-Ganesha 成为集群中的一等公民,其生命周期由 Ceph 从头到尾管理。与 Rook operator 和 Kubernetes 结合使用,Ceph 创建 NFS-Ganesha 守护程序的集群来导出 Ceph 文件系统。

集群中的每个 Ganesha 守护程序都配置为以主动-主动方式导出相同的文件系统。这意味着多个 NFS 服务器可以通过负载均衡将客户端请求分配到相同的 CephFS 文件系统。在 Nautilus 之前,由于故障转移可能导致 NFS 客户端状态丢失,这种配置是不安全的。

我们继续努力使设置这些集群尽可能地一键完成。我们预计许多用户界面更改将在未来几个月回移植到 Nautilus。与此同时,Jeff Layton 的上一篇博文中提供了一个动手演示。

待机重放的更改

CephFS 中配置“待机重放”守护程序机制已被重构。待机重放守护程序实时跟踪活动 MDS 的日志,从而在活动 MDS 崩溃时实现非常快的故障转移。在 Nautilus 之前,需要使用 mds_standby_replay 选项配置守护程序,以便 MDS 可以作为待机重放运行。监视器将从这些 MDS 守护程序接收信标,指示它们能够以待机重放方式运行,然后将分配给它们排名以供使用(如果可用)。

这与其他的的文件系统配置不一致,通常是通过 ceph fs 命令套件更改的;配置 MDS 以影响监视器会反转决策过程。相反,让 operator 指示哪些文件系统应该具有待机重放守护程序会更简单。此外,仅对某些排名拥有待机重放守护程序没有意义。

新的文件系统设置 allow_standby_replay 配置文件系统以允许待机重放。只要有待机守护程序可用,监视器就会将它们分配给文件系统上可用的排名进行跟踪。

待机重放守护程序计入文件系统的期望待机计数,该计数由文件系统设置“standby_count_wanted”配置。请务必配置此设置以跟踪对“max_mds”的更改,以便有足够的待机。使用待机重放守护程序,建议将其设置为至少“max_mds+1”。因此,一个普通的待机守护程序将可用于替换待机重放守护程序。

最后,存在允许 operator 指定要跟踪哪些文件系统、排名或命名的 MDS 的配置选项。这些配置选项是“mds_standby_for_*”。这些选项在 Nautilus 中已被弃用,以便所有 MDS 都得到统一和平等对待。

新的 cephfs-shell 工具

CephFS 有两个主要的访问向量:ceph-fuse 客户端和 Linux 内核驱动程序。现在有一个新的 cephfs-shell 工具,由 我们的 Outreachy 实习生 Pavani Rajula 在 2018 年夏天用 Python 编写。该工具允许用户通过自定义 shell 对文件系统执行简单的操作。例如

CephFS:~/>>> mkdir foo
CephFS:~/>>> put /etc/hosts foo/hosts
CephFS:~/>>> cat foo/hosts
127.0.0.1 localhost

# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
CephFS:~/>>>

请记住,cephfs-shell 是 alpha 质量的软件,可能存在错误。我们定期将修复程序回移植到 Nautilus,并且社区对改进的建议非常受欢迎(在 ceph-users 邮件列表中)。

阻止较旧的客户端

此外,在 Mimic v13.2.2+ 中,CephFS 现在允许集群管理员阻止较旧的客户端挂载文件系统。这对于阻止以某种方式表现不佳的版本(例如,未释放功能)很有帮助。

这是使用新的文件系统设置完成的

ceph fs set tank min_compat_client mimic

完成此操作后,MDS 将阻止并驱逐较旧的客户端,并防止它们将来连接。