CEPH 文件系统简介

Ceph 文件系统或CephFS是一个符合 POSIX 的文件系统,构建在 Ceph 的分布式对象存储RADOS之上。CephFS 致力于为各种应用程序(包括共享主目录、HPC 暂存空间和分布式工作流共享存储等传统用例)提供最先进的、多用途、高可用性和高性能文件存储。

CephFS 通过使用一些新颖的架构选择来实现这些目标。值得注意的是,文件元数据与文件数据存储在单独的 RADOS 池中,并通过可调整大小的元数据服务器集群或MDS提供服务,该集群可以扩展以支持更高吞吐量的元数据工作负载。文件系统的客户端可以直接访问 RADOS 以读取和写入文件数据块。出于这个原因,工作负载可能会随着底层 RADOS 对象存储的大小而线性扩展;也就是说,没有网关或代理为客户端调解数据 I/O。

对数据的访问是通过 MDS 集群来协调的,MDS 集群作为由客户端和 MDS 共同维护的分布式元数据缓存状态的权限。元数据的突变由每个 MDS 聚合成一系列有效的写入 RADOS 上的日志;MDS 没有在本地存储元数据状态。该模型允许在 POSIX 文件系统的上下文中客户端之间进行一致和快速的协作。

CephFS 因其新颖的设计和对文件系统研究的贡献而成为众多学术论文的主题。它是 Ceph 中最古老的存储接口,曾经是 RADOS 的主要用例。现在它与另外两个存储接口结合在一起,形成了一个现代的统一存储系统:RBD(Ceph Block Devices)和RGW(Ceph Object Storage Gateway)

CEPHFS 入门

对于 Ceph 的大多数部署,设置 CephFS 文件系统非常简单:

ceph fs volume create <fs name>

创建池

一个 Ceph 文件系统至少需要两个 RADOS 池,一个用于数据,一个用于元数据。配置这些池时,您可能会考虑:

  • 对元数据池使用更高的复制级别,因为此池中的任何数据丢失都可能导致整个文件系统无法访问。

  • 对元数据池使用 SSD 等低延迟存储,因为这将直接影响观察到的客户端文件系统操作的延迟。

  • 用于创建文件系统的数据池是“默认”数据池,是存储所有 inode 回溯信息的位置,用于硬链接管理和灾难恢复。因此,在 CephFS 中创建的所有 inode 在默认数据池中至少有一个对象。如果为文件系统计划了纠删码池,通常最好为默认数据池使用复制池,以提高更新回溯的小对象写入和读取性能。另外,可以添加另一个纠删码数据池(另请参阅纠删码),该数据池可用于目录和文件的整个层次结构(另请参阅文件布局)。

请参阅池以了解有关管理池的更多信息。例如,要使用默认设置创建两个用于文件系统的池,您可以运行以下命令:

$ ceph osd pool create cephfs_data
$ ceph osd pool create cephfs_metadata

通常,元数据池最多有几 GB 的数据。因此,通常建议使用较小的 PG 数。64 或 128 在实践中通常用于大型集群。

多个 CEPH 文件系统

从 Pacific 版本开始,多文件系统支持稳定且随时可用。此功能允许在单独的池上配置具有完全数据分离的单独文件系统。

现有集群必须设置一个标志以启用多个文件系统:

ceph fs flag set enable_multiple true

新的 Ceph 集群会自动设置这一点。

其他注意事项

多个文件系统不共享池。这对于快照特别重要,但也因为没有措施来防止重复的 inode。Ceph 命令可以防止这种危险的配置。

每个文件系统都有自己的一组 MDS 等级。因此,每个新的文件系统都需要更多的 MDS 守护程序来运行并增加了运行成本。这对于增加应用程序或用户群的元数据吞吐量很有用,但也会增加创建文件系统的成本。通常,具有子树固定的单个文件系统是隔离应用程序之间负载的更好选择。

通过 NFS 导出

CephFS 命名空间可以使用 NFS-Ganesha NFS 服务器通过 NFS 协议导出。本文档提供有关手动配置 NFS-Ganesha 集群的信息。管理 NFS-Ganesha 集群和 CephFS 导出的最简单和首选的方法是使用命令ceph nfs ...。有关详细信息,请参阅通过 NFS 导出 CephFS 和 RGW。由于部署是使用 cephadm 或 rook 完成的。

要求

  • Ceph文件系统(最好是最新稳定的luminous或更高版本)
  • 在 NFS 服务器主机中,'libcephfs2'(最好是最新的稳定版 luminous 或更高版本)、'nfs-ganesha' 和 'nfs-ganesha-ceph' 包(最新的 ganesha v2.5 稳定版或更高版本)
  • NFS-Ganesha 服务器主机连接到 Ceph 公网

笔记: 建议使用 3.5 或更高稳定版本的 NFS-Ganesha 包和 pacific (16.2.x) 或更高稳定版本的 Ceph 包。

配置 NFS-GANESHA 以导出 CEPHFS

NFS-Ganesha 提供了一个文件系统抽象层 (FSAL) 来插入不同的存储后端。FSAL_CEPH 是 CephFS 的插件 FSAL。对于每个 NFS-Ganesha 导出,FSAL_CEPH 使用 libcephfs 客户端(用户空间 CephFS 客户端)来挂载 NFS-Ganesha 导出的 CephFS 路径。

使用 CephFS 设置 NFS-Ganesha,包括设置 NFS-Ganesha 的配置文件,以及为 NFS-Ganesha 创建的 Ceph 客户端设置 Ceph 配置文件和 cephx 访问凭据以访问 CephFS。

NFS-GANESHA 配置

可以在此处找到使用 FSAL_CEPH 配置的示例 ganesha.conf, https://github.com/nfs-ganesha/nfs-ganesha/blob/next/src/config_samples/ceph.conf。它适用于独立的 NFS-Ganesha 服务器,或由某种集群软件(例如 Pacemaker)管理的 NFS-Ganesha 服务器的主动/被动配置。有关选项的重要详细信息作为注释添加到示例 conf 中。可以选择执行以下操作:

  • 尽可能减少 Ganesha 缓存,因为 libcephfs 客户端(FSAL_CEPH)也积极缓存
  • 从存储在 RADOS 对象中的 Ganesha 配置文件中读取
  • 在 RADOS OMAP 键值接口中存储客户端恢复数据
  • 强制 NFSv4.1+ 访问
  • 启用读取委托(至少需要 v13.0.1 'libcephfs2' 包和 v2.6.0 稳定的 'nfs-ganesha' 和 'nfs-ganesha-ceph' 包)

LIBCEPHFS 客户端的配置

libcephfs 客户端所需的 ceph.conf 包括:

  • 带有mon_host选项的 [client] 部分,用于让客户端连接到 Ceph 集群的监视器,通常通过 ceph config generate-minimal-conf 生成,例如,
[global]
        mon host = [v2:192.168.1.7:3300,v1:192.168.1.7:6789], [v2:192.168.1.8:3300,v1:192.168.1.8:6789], [v2:192.168.1.9:3300,v1:192.168.1.9:6789]

使用 NFSV4 客户端挂载

最好使用 NFSv4.1+ 协议挂载 NFS-Ganesha 导出以获得会话的好处。

挂载 NFS 资源的约定是特定于平台的。以下约定适用于 Linux 和一些 Unix 平台:

mount -t nfs -o nfsvers=4.1,proto=tcp <ganesha-host-name>:<ganesha-pseudo-path> <mount-point>
posted @ 2022-03-06 10:39  Varden  阅读(653)  评论(0编辑  收藏  举报