Pacific 中的新特性:CephFS 更新
Ceph 文件系统 (CephFS) 是 Ceph 的文件存储解决方案。Pacific 为 CephFS 带来了许多令人兴奋的更新,重点在于易用性、性能以及与 Kubernetes CSI 等其他平台的集成。让我们来谈谈其中一些改进。
多文件系统支持 ¶
CephFS 在几个版本中已经有了多文件系统的实验性支持。它们甚至在某些恢复操作中经常是必需的。在 Pacific 中,团队增加了客户端访问的测试和易用性。该功能现在被认为是稳定可靠的,可以在生产环境中使用。
在升级到 Pacific 的现有 Ceph 集群上,仍然需要启用该功能标志
$ ceph fs flag set enable_multiple true
之后,推荐的方法是通过 volume API 创建更多文件系统
$ ceph fs volume create <fs_name> [<placement>]
文件系统及其池在一个操作中创建,使用 Ceph 推荐的默认设置。最后,MDS 会根据 <placement> 规范由 cephadm(或后端部署技术)自动部署。
MDS 自动伸缩器 ¶
Ceph 项目的一个更大主题是,通过简化管理来提高易用性。新的 MDS 自动伸缩器插件 根据文件系统的需求自动部署 MDS。它可以响应 max_mds 或 standby_count_wanted 设置的变化来部署 MDS。要启用,请使用
$ ceph mgr module enable mds_autoscaler
CephFS 监控:cephfs-top ¶
cephfs-top 工具 提供了一个 CephFS 文件系统上活动会话的视图。这提供了一个关于客户端正在做什么的视图,而仅从 MDS 性能统计信息(可通过 admin socket 访问)中很难或不可能了解。特别是,客户端的缓存命中率(缓存效率)、读/写/元数据延迟以及 I/O 吞吐量/大小现在都通过此工具显示。
目前正在进行工作以改进该工具。它目前是开发预览质量。
计划快照 ¶
现在可以使用一个新的管理器模块来安排 Ceph 文件系统上的快照。必须通过以下方式启用它
$ ceph mgr module enable snap_schedule
然后可以设置策略来安排快照,如下所示
$ ceph fs snap-schedule add / 1h $ ceph fs snap-schedule status / {"fs": "a", "subvol": null, "path": "/", "rel_path": "/", "schedule": "1h", "retention": {"h": 12}, "start": "2021-04-21T00:00:00", "created": "2021-04-21T19:42:33", "first": "2021-04-21T20:00:00", "last": "2021-04-21T20:00:00", "last_pruned": null, "created_count": 1, "pruned_count": 0, "active": true}
$ ls /cephfs/.snap scheduled-2021-04-21-20_00_00
还可以配置保留策略,以便按计划删除快照。
NFS 网关集群 ¶
NFS 是一种常用的文件访问协议,仍然很受欢迎。Ceph 现在提供了一种编排和配置 CephFS(以及很快的 RGW)的 NFS 网关集群的方法。Ceph 将 NFS 纳入第一类服务的原因有很多,包括确保缓存一致性、易用性和可用性。
创建 NFS 集群就像
$ ceph nfs cluster create cephfs mynfs
使用名为“mynfs”的 NFS 集群。接下来配置一个或多个导出
$ ceph nfs export create cephfs mycephfs mynfs /mycephfs --path=/
为 mycephfs Ceph 文件系统创建 mynfs 集群中的一个导出。该导出可以在 NFS 客户端上挂载到 /mycephfs。--path 参数允许选择要导出 mycephfs 中的哪个路径。
之后,了解 NFS 网关的 IP/端口
$ ceph nfs cluster info mynfs { "mynfs": [ { "hostname": "XXXX", "ip": [ "192.168.149.18" ], "port": 2049 } ] }
然后在客户端上挂载
$ mount -t nfs 192.168.149.18:/mycephfs /mnt -o port=2049
$ df -h /mnt Filesystem Size Used Avail Use% Mounted on 192.168.149.18:/mycephfs 943G 0 943G 0% /mnt
NFS 集群可以具有多个网关(“active-active”),NFS 客户端通过管理员实施负载分配(通过 HAProxy 和 cephadm 实现高可用性的未来工作正在进行中)。
有关更多信息,请参阅 文档。
多个活动 MDS 清理 ¶
清理文件系统现在可以在多个 rank 处于活动状态时完成(max_mds > 1)。已经进行了更多的错误修复和测试以支持此模式。不再需要将 max_mds 减少到 1 才能进行清理。
清理现在始终定向到 rank 0。当它不具备某些元数据的权威性时,从 rank 0 发送清理操作。例如
$ ceph tell mds.mycephfs:0 scrub start / recursive
请注意,这是使用特定于 MDS 守护程序的 ceph tell 语法 mds.<fs_name>:<rank>。
子树固定策略:临时固定 ¶
子树固定在 Luminous 版本中首次亮相。这允许静态配置文件系统的子树在 MDS rank 之间的分布。静态分区将覆盖 balancer 内部对动态分配子树的任何决定。子树固定因其可靠性和可预测性而广受欢迎。
在 Pacific 中,CephFS 进一步发展了这一功能,添加了一种 定义设置子树上固定策略的机制。这些固定是临时的,因此称为临时固定。子树位于哪里(哪个 rank)由 MDS 集群确定。策略仅控制如何临时固定目录,而不是在哪里。
CephFS 支持两种固定策略:分布式和随机。
分布式策略将直接子目录静态分区到所有 MDS rank。最典型的用例是 /home 目录,您希望在 MDS rank 上均匀分配用户主目录,而无需手动设置固定。要设置此策略,请通过扩展属性更改来完成
$ setfattr -n ceph.dir.pin.distributed -v 1 /cephfs/home
随机策略根据概率临时固定目录。目录是临时固定的时间是在将其加载到 MDS 缓存(现有目录)或创建时确定的。通过以下方式设置此策略
$ setfattr -n ceph.dir.pin.random -v 0.005 /cephfs/home
因此,目录将有 0.5% 的概率成为新的临时固定子树。
这项性能改进让我们感到非常兴奋,我们期待听到用户的反馈。
文件系统镜像:cephfs-mirror ¶
CephFS 支持通过 cephfs-mirror 工具将快照异步复制到远程 CephFS 文件系统。一个镜像模块(管理器插件)提供用于管理目录快照镜像的接口(但不管理 cephfs-mirror 守护程序的生成)。
镜像守护程序需要 Ceph 用户才能访问主集群上的文件系统,这可以通过以下方式完成
镜像守护程序
$ ceph auth get-or-create client.mirror mon ‘profile cephfs-mirror’ mds ‘allow r’ osd ‘allow rw tag cephfs metadata=*, allow r tag cephfs data=*’ mgr ‘allow r’
注意:这将创建传递给镜像守护程序启动的client.mirror 用户。
镜像守护程序可以使用 cephadm(推荐)或通过 systemctl 部署。
要通过 cephadm 部署,请使用
# ceph orch apply cephfs-mirror
或者,通过 systemctl
# systemctl enable --now cephfs-mirror@mirror
镜像模块和接口
镜像模块提供用于管理目录快照镜像的接口,并负责将目录路径分配给镜像守护程序进行同步。
默认情况下禁用镜像模块。要启用镜像,请使用
$ ceph mgr module enable mirroring
镜像模块提供一系列命令来控制目录快照的镜像。在添加目录路径进行快照镜像之前,必须在文件系统上启用镜像。这可以通过以下方式完成
$ ceph fs snapshot mirror enable <fs_name>
启用镜像后,添加对等方到文件系统。对等方是远程文件系统,可以是单独的 Ceph 集群上的文件系统,也可以与主文件系统位于同一集群中。添加对等方最简单的方法是通过 bootstrap。引导对等方是一个两步过程。首先,使用以下命令在远程文件系统上创建一个 bootstrap token
$ ceph fs snapshot mirror peer_bootstrap create <fs_name> <client_entity> <site-name>
例如
$ ceph fs snapshot mirror peer_bootstrap create backup_fs client.mirror_remote site-remote {"token":"eyJmc2lkIjogIjBkZjE3MjE3LWRmY2QtNDAzMC05MDc5LTM2Nzk4NTVkNDJlZiIsICJmaWxlc3lzdGVtIjogImJhY2t1cF9mcyIsICJ1c2VyIjogImNsaWVudC5taXJyb3JfcGVlcl9ib290c3RyYXAiLCAic2l0ZV9uYW1lIjogInNpdGUtcmVtb3RlIiwgImtleSI6ICJBUUFhcDBCZ0xtRmpOeEFBVnNyZXozai9YYUV0T2UrbUJEZlJDZz09IiwgIm1vbl9ob3N0IjogIlt2MjoxOTIuMTY4LjAuNTo0MDkxOCx2MToxOTIuMTY4LjAuNTo0MDkxOV0ifQ=="}
接下来,使用以下命令在主集群中导入 bootstrap token
$ ceph fs snapshot mirror peer_bootstrap import <fs_name> <token>
例如
$ ceph fs snapshot mirror peer_bootstrap import cephfs eyJmc2lkIjogIjBkZjE3MjE3LWRmY2QtNDAzMC05MDc5LTM2Nzk4NTVkNDJlZiIsICJmaWxlc3lzdGVtIjogImJhY2t1cF9mcyIsICJ1c2VyIjogImNsaWVudC5taXJyb3JfcGVlcl9ib290c3RyYXAiLCAic2l0ZV9uYW1lIjogInNpdGUtcmVtb3RlIiwgImtleSI6ICJBUUFhcDBCZ0xtRmpOeEFBVnNyZXozai9YYUV0T2UrbUJEZlJDZz09IiwgIm1vbl9ob3N0IjogIlt2MjoxOTIuMTY4LjAuNTo0MDkxOCx2MToxOTIuMTY4LjAuNTo0MDkxOV0ifQ==
可以使用以下命令列出文件系统对等方
$ ceph fs snapshot mirror peer_list <fs_name>
要添加目录路径进行快照同步,请使用以下命令
$ ceph fs snapshot mirror add <fs_name> <path>
例如
$ ceph fs snapshot mirror add cephfs /d0/d1
注意:一旦添加了目录进行镜像,就无法添加其子目录或祖先目录进行镜像;不支持嵌套镜像。此外,仅允许绝对目录路径。
同样,要停止目录的快照镜像,请使用
$ ceph fs snapshot mirror remove <fs_name> <path>
可以使用以下命令检查目录同步状态
$ ceph fs snapshot mirror daemon status <fs_name>
更多详细信息可以在 CephFS 文档中找到。
Windows 客户端:cephfs-dokan ¶
感谢 Cloudbase Solutions 的 Lucian Petrut 提供的咨询工作,Pacific 还通过 Dokan(类似于 Windows 的 FUSE)为 CephFS 带来了一个 Windows 驱动程序。它使用与 ceph-fuse 相同的用户空间库。启动客户端就像
ceph-dokan.exe -c c:\ceph.conf -l x
新的 cephfs-dokan 客户端正在积极开发中,并且仍在为 Ceph QA 基础设施编写持续集成测试(Windows 镜像尚不可用)。用户应将此视为预览软件。
结论 ¶
Pacific 已经成为 CephFS 最大的版本之一。开发人员一直在努力改进易用性、性能和稳定性。我们希望社区能从这个版本中获得很多价值,并期待在邮件列表中听到您的体验和反馈。尽情享受吧!