适用于 SUSE Enterprise Storage 6

19 集群文件系统

本章介绍在设置集群并导出 CephFS 后通常应执行的管理任务。如需有关设置 CephFS 的详细信息,请参见第 11 章 “安装 CephFS

19.1 装入 CephFS

当创建文件系统并且 MDS 处于工作状态后,您便可以从客户端主机装入文件系统。

19.1.1 客户端准备

如果客户端主机运行的是 SUSE Linux Enterprise 12 SP2 或 SP3,您可以跳过本节,因为系统无需额外配置即可装入 CephFS。

如果客户端主机运行的是 SUSE Linux Enterprise 12 SP1,您需要应用所有最新的增补程序,之后才能装入 CephFS。

无论是哪一种情况,SUSE Linux Enterprise 中都包含了装入 CephFS 需要的所有项目。不需要 SUSE Enterprise Storage 6 产品。

为了支持完整的 mount 语法,在尝试装入 CephFS 之前,应该先安装 ceph-common 包(随附于 SUSE Linux Enterprise 中)。

19.1.2 创建机密文件

Ceph 集群默认是在启用身份验证的情况下运行的。应该创建一个文件用于存储您的秘密密钥(而不是密钥环本身)。要获取特定用户的秘密密钥,然后创建该文件,请执行以下操作:

过程 19.1︰ 创建秘密密钥
  1. 在密钥环文件中查看特定用户的密钥:

    cephadm@adm > cat /etc/ceph/ceph.client.admin.keyring
  2. 复制要使用所装入 Ceph FS 文件系统的用户的密钥。密钥通常类似下方所示:

    AQCj2YpRiAe6CxAA7/ETt7Hcl9IyxyYciVs47w==
  3. 为用户 admin 创建一个文件名包含用户名的文件,例如 /etc/ceph/admin.secret

  4. 将密钥值粘贴到上一步中创建的文件。

  5. 设置对该文件的适当访问权限。该用户应是唯一有权读取该文件的用户,其他人不能有任何访问权限。

19.1.3 装入 CephFS

可以使用 mount 命令装入 CephFS。需要指定 Monitor 的主机名或 IP 地址。由于 SUSE Enterprise Storage 中默认会启用 cephx 身份验证,因此,您还需要指定一个用户名及其相关的机密:

root # mount -t ceph ceph_mon1:6789:/ /mnt/cephfs \
 -o name=admin,secret=AQATSKdNGBnwLhAAnNDKnH65FmVKpXZJVasUeQ==

由于上一条命令会保留在外壳历史中,因此更安全的做法是从文件读取机密:

root # mount -t ceph ceph_mon1:6789:/ /mnt/cephfs \
 -o name=admin,secretfile=/etc/ceph/admin.secret

请注意,机密文件应该只包含实际的密钥环机密。因此,在本示例中,该文件只包含下行:

AQATSKdNGBnwLhAAnNDKnH65FmVKpXZJVasUeQ==
提示
提示:指定多个 Monitor

最好是在 mount 命令行中指定多个 Monitor 并以逗号分隔,以防在装入时某个 Monitor 恰好停机。每个 Monitor 的地址采用主机[:端口] 格式。如果未指定端口,默认会使用端口 6789。

在本地主机上创建装入点:

root # mkdir /mnt/cephfs

装入 CephFS:

root # mount -t ceph ceph_mon1:6789:/ /mnt/cephfs \
 -o name=admin,secretfile=/etc/ceph/admin.secret

如果要装入文件系统的某个子集,可以指定子目录 subdir

root # mount -t ceph ceph_mon1:6789:/subdir /mnt/cephfs \
 -o name=admin,secretfile=/etc/ceph/admin.secret

可在 mount 命令中指定多个 Monitor 主机:

root # mount -t ceph ceph_mon1,ceph_mon2,ceph_mon3:6789:/ /mnt/cephfs \
 -o name=admin,secretfile=/etc/ceph/admin.secret
重要
重要:对根目录的读取访问权限

如果使用了实施路径限制的客户端,则 MDS 功能需要包含对根目录的读取访问权限。例如,密钥环可能如下所示:

client.bar
 key: supersecretkey
 caps: [mds] allow rw path=/barjail, allow r path=/
 caps: [mon] allow r
 caps: [osd] allow rwx

allow r path=/ 部分表示路径受限的客户端能够查看根卷,但无法写入根卷。在要求完全隔离的用例中,这可能会造成问题。

19.2 卸载 CephFS

要卸载 CephFS,请使用 umount 命令:

root # umount /mnt/cephfs

19.3 /etc/fstab 中的 CephFS

要在客户端启动时自动装入 CephFS,请在其文件系统表 /etc/fstab 中插入相应的行:

mon1:6790,mon2:/subdir /mnt/cephfs ceph name=admin,secretfile=/etc/ceph/secret.key,noatime,_netdev 0 2

19.4 多个工作的 MDS 守护进程(主动/主动 MDS)

默认情况下,CephFS 是针对单个工作的 MDS 守护进程配置的。要调整大规模系统的元数据性能,可以启用多个工作的 MDS 守护进程,以便互相分担元数据工作负载。

19.4.1 何时使用主动/主动 MDS

如果按默认设置使用单个 MDS 时元数据性能出现瓶颈,可考虑使用多个工作的 MDS 守护进程。

增加守护进程并不会提高所有工作负载类型的性能。例如,增加 MDS 守护进程的数量不会让单个客户端上运行的单个应用受益,除非该应用在同时执行大量元数据操作。

通常能够因大量工作的 MDS 守护进程受益的工作负载是使用许多客户端的工作负载,也许是在许多独立目录中工作的工作负载。

19.4.2 增加 MDS 工作集群的大小

每个 CephFS 文件系统都有一项 max_mds 设置,用于控制将要创建的级别数。仅当某个备用守护进程可供新的级别使用时,文件系统中的实际级别数才会增加。例如,如果只有一个 MDS 守护进程在运行,并且 max_mds 设置为 2,将不会创建另一个级别。

在下面的示例中,我们将 max_mds 选项设置为 2,以便在保留默认级别的情况下再创建一个新级别。要查看更改,请在设置 max_mds 之前和之后运行 ceph status,然后观察包含 fsmap 的行:

cephadm@adm > ceph status
  [...]
  services:
    [...]
    mds: cephfs-1/1/1 up  {0=node2=up:active}, 1 up:standby
    [...]
cephadm@adm > ceph mds set max_mds 2
cephadm@adm > ceph status
  [...]
  services:
    [...]
    mds: cephfs-2/2/2 up  {0=node2=up:active,1=node1=up:active}
    [...]

新建的级别 (1) 会经历“正在创建”状态,然后进入“工作”状态。

重要
重要:待机守护进程

即使使用多个工作 MDS 守护进程,当任何在运行工作守护进程的服务器发生故障时,高可用性系统也仍会要求待机守护进程接管工作。

因此,高可用性系统的 max_mds 合理最大值比系统中的 MDS 服务器总数小 1。要在发生多次服务器故障时保持可用性,可增加系统中待机守护进程的数量,使之与不会导致失去可用性的服务器故障数一致。

19.4.3 减小级别数

所有级别(包括要删除的级别)首先必须是活跃的。这意味着,至少需要有 max_mds 个 MDS 守护进程可用。

首先,将 max_mds 设为一个较小的数字。例如,我们重新使用单个工作的 MDS:

cephadm@adm > ceph status
  [...]
  services:
    [...]
    mds: cephfs-2/2/2 up  {0=node2=up:active,1=node1=up:active}
    [...]
cephadm@adm > ceph mds set max_mds 1
cephadm@adm > ceph status
  [...]
  services:
    [...]
    mds: cephfs-1/1/1 up  {0=node2=up:active}, 1 up:standby
    [...]

请注意,我们仍有两个工作的 MDS。即使减小 max_mds,级别也仍会存在,因为 max_mds 只会限制新级别的创建。

接下来,使用 ceph mds deactivate 级别命令删除不需要的级别:

cephadm@adm > ceph status
  [...]
  services:
    [...]
    mds: cephfs-2/2/1 up  {0=node2=up:active,1=node1=up:active}
cephadm@adm > ceph mds deactivate 1
telling mds.1:1 192.168.58.101:6805/2799214375 to deactivate

cephadm@adm > ceph status
  [...]
  services:
    [...]
    mds: cephfs-2/2/1 up  {0=node2=up:active,1=node1=up:stopping}

cephadm@adm > ceph status
  [...]
  services:
    [...]
    mds: cephfs-1/1/1 up  {0=node2=up:active}, 1 up:standby

已停用的级别首先会进入“正在停止”状态并保持一段时间,期间它会将所分担的元数据负载转移给其余工作守护进程。此阶段可能需要数秒到数分钟时间。如果 MDS 看上去停滞在“正在停止”状态,则应该调查原因,确定是否存在可能的错误。

如果 MDS 守护进程在“正在停止”状态下崩溃或终止,待机守护进程会接管工作,级别将恢复为“工作”状态。当此守护进程重新运行后,您可以尝试再次将它停用。

守护进程结束“正在停止”状态后,将再次启动,并重新变为待机守护进程。

19.4.4 手动将目录树关联到级别

在多个工作元数据服务器配置中,将会运行一个平衡器,用于在集群中均衡分配元数据负载。这种模式通常足以满足大多数用户的需求,但有时,用户需要使用元数据到特定级别的显式映射来覆盖动态平衡器。这样,管理员或用户便可以在整个集群上均衡地分配应用负载,或限制用户的元数据请求对整个集群的影响。

针对此目的提供的机制称为“导出关联”。它是目录的扩展属性。此扩展属性名为 ceph.dir.pin。用户可以使用标准命令设置此属性:

root # setfattr -n ceph.dir.pin -v 2 /path/to/dir

扩展属性的值 (-v) 是要将目录子树指定到的级别。默认值 -1 表示不关联该目录。

目录导出关联继承自设置了导出关联的最近的父级。因此,对某个目录设置导出关联会影响该目录的所有子级。但是,可以通过设置子目录导出关联来覆盖父级的关联。例如:

root # mkdir -p a/b                      # "a" and "a/b" start with no export pin set.
setfattr -n ceph.dir.pin -v 1 a/  # "a" and "b" are now pinned to rank 1.
setfattr -n ceph.dir.pin -v 0 a/b # "a/b" is now pinned to rank 0
                                  # and "a/" and the rest of its children
                                  # are still pinned to rank 1.

19.5 管理故障转移

如果 MDS 守护进程停止与 Monitor 通讯,Monitor 会等待 mds_beacon_grace 秒(默认为 15 秒),然后将守护进程标记为 laggy。可以配置一个或多个“待机”守护进程,用于在 MDS 守护进程故障转移期间接管工作。

19.5.1 配置待机守护进程

有多项配置设置可控制守护进程处于待机状态时的行为。可以在运行 MDS 守护进程的主机上的 ceph.conf 中指定这些设置。守护进程在启动时会加载这些设置,然后将其发送到 Monitor。

默认情况下,如果不使用其中的任何设置,则不具备级别的所有 MDS 守护进程将用作任一级别的“待机”守护进程。

将待机守护进程与特定名称或级别相关联的设置不保证该守护进程只用于该级别。具体而言,当有多个待机守护进程可用时,将使用关联的待机守护进程。如果某个级别发生故障,而此时有某个待机守护进程可用,则即使该守护进程与其他某个级别或指定守护进程相关联,也会使用该守护进程。

mds_standby_replay

如果设置为 true,则待机守护进程将持续读取某个已启动级别的元数据日记。这就为此级别提供了一个热元数据缓存,当为该级别提供服务的守护进程发生故障时,此日记可加快故障转移过程的速度。

一个已启动的级别只能指定一个待机重放守护进程。如果将两个守护进程都设置为待机重放,则其中任意一个会赢得控制权,另一个将成为正常的非重放待机守护进程。

当某个守护进程进入待机重放状态时,它只会用作所跟随级别的待机守护进程。如果另一个级别发生故障,此待机重放守护进程不会作为替代者,即使没有其他待机守护进程可用也是如此。

mds_standby_for_name

如果指定此设置,则仅当最后一个包含故障级别的守护进程与此名称匹配时,待机守护进程才会接管该故障级别。

mds_standby_for_rank

如果指定此设置,待机守护进程只会接管指定的级别。如果另外的级别发生故障,将不会使用此守护进程来替代此级别。

mds_standby_for_fscid 结合使用时,可以指定在使用多个文件系统时,具体针对哪个文件系统的级别。

mds_standby_for_fscid

如果设置了 mds_standby_for_rank,则 mds_standby_for_fscid 只是一个用于指出所指文件系统级别的限定符。

如果未设置 mds_standby_for_rank,则设置 FSCID 会导致此守护进程以指定 FSCID 中的任何级别为目标。如果希望只在特定的文件系统中将某个守护进程用于任何级别,可使用此设置。

mon_force_standby_active

在 Monitor 主机上使用此设置。其默认值为 true。

如果值为 false,则 standby_replay 配置为 true 的守护进程只有在其已配置要跟随的级别/名称发生故障时,才会变为工作守护进程。另一方面,如果此设置为 true,则可将其他某个级别指定给 standby_replay 配置为 true 的守护进程。

19.5.2 示例

下面显示了多个示例 ceph.conf 配置。可将包含所有守护进程的配置的 ceph.conf 复制到所有服务器,或者在每台服务器上创建一个不同的文件,并在其中包含该服务器的守护进程配置。

19.5.2.1 简单对

“a”和“b”两个 MDS 守护进程充当一对。其中,当前未指定级别的守护进程将是另一个守护进程的待机重放跟随者。

[mds.a]
mds standby replay = true
mds standby for rank = 0

[mds.b]
mds standby replay = true
mds standby for rank = 0

19.6 设置 CephFS 配额

您可以对 Ceph 文件系统的任何子目录设置配额。配额可限制目录层次结构中指定点下所存储的字节文件数。

19.6.1 限制

CephFS 的配额设置具有以下限制:

配额是合作性而非竞争性的。

达到限制时,Ceph 配额依赖装入文件系统的客户端来停止向其写入数据。服务器端无法阻止恶意客户端写入所需数量的数据。在客户端完全不受信任的环境中,请勿使用配额来阻止填充文件系统。

配额并不精确。

在达到配额限制不久后,系统便会停止向文件系统写入数据的进程。这样便会不可避免地允许这些进程在超出配置的限制后又写入一定数量的数据。系统将会在超出所配置限制后的十分之一秒内停止客户端写入程序。

配额是在自 4.17 版本起的内核客户端中实施的。

配额受用户空间客户端(libcephfs、ceph-fuse)支持。4.17 及更高版本的 Linux 内核客户端支持 SUSE Enterprise Storage 6 集群上的 CephFS 配额。内核客户端(甚至最近的版本)无法处理较旧集群的配额,即便它们可以设置配额扩展属性也是如此。

与基于路径的装入限制搭配使用时,需谨慎配置配额。

客户端需要有权访问配置了配额的目录 Inode,才能强制实施这些配额。如果根据 MDS 用户权限,客户端对特定路径(例如 /home/user)的访问受到限制,并且配额是对其无权访问的祖先目录 (/home) 配置的,则客户端将无法强制实施该配额。在使用基于路径的访问限制时,请务必对客户端可以访问的目录(例如 /home/user 或 /home/user/quota_dir)配置配额。

19.6.2 配置

您可以使用虚拟扩展属性来配置 CephFS 配额:

ceph.quota.max_files

配置文件限制。

ceph.quota.max_bytes

配置字节限制。

如果某个目录 Inode 存在这些属性,即表示该位置配置了配额。如果不存在,则表示未对该目录配置配额(即便可能对父目录配置了配额)。

要设置 100 MB 的配额,请运行以下命令:

cephadm@mds > setfattr -n ceph.quota.max_bytes -v 100000000 /SOME/DIRECTORY

要设置 10,000 个文件的配额,请运行以下命令:

cephadm@mds > setfattr -n ceph.quota.max_files -v 10000 /SOME/DIRECTORY

要查看配额设置,请运行以下命令:

cephadm@mds > getfattr -n ceph.quota.max_bytes /SOME/DIRECTORY
cephadm@mds > getfattr -n ceph.quota.max_files /SOME/DIRECTORY
注意
注意:未设置配额

如果扩展属性的值为“0”,表示未设置配额。

要删除配额,请运行以下命令:

cephadm@mds > setfattr -n ceph.quota.max_bytes -v 0 /SOME/DIRECTORY
cephadm@mds > setfattr -n ceph.quota.max_files -v 0 /SOME/DIRECTORY

19.7 管理 CephFS 快照

在截取 CephFS 快照时,快照会创建此时间点文件系统的只读视图。您可以在任何目录中创建快照。快照将涵盖文件系统中指定目录下的所有数据。创建快照后,系统会从各客户端异步清理缓冲数据。因此,创建快照的速度十分快。

重要
重要:多个文件系统

如果您有多个 CephFS 文件系统在共享一个存储池(通过名称空间),则这些文件系统的快照将会发生冲突,并且删除其中一个快照将会导致共享同一存储池的其他快照缺少文件数据。

19.7.1 创建快照

对于新文件系统,系统默认会启用 CephFS 快照特性。要对现有文件系统启用该特性,请运行以下命令:

cephadm@adm > ceph fs set CEPHFS_NAME allow_new_snaps true

启用快照后,CephFS 中的所有目录都将包含一个特殊的 .snap 子目录。

CephFS 内核客户端有一个限制:它们无法处理一个目录树中所含快照数量超过 400 个的情况。快照的数量应始终低于此上限,无论使用哪个客户端均如此。如果使用较旧的 CephFS 客户端(例如 SLE12-SP3),请记住,快照数量超过 400 个对运行十分有害,因为这会导致客户端崩溃。

提示
提示:自定义快照子目录名称

您可以通过设置 client snapdir 设置来为快照子目录配置其他名称。

要创建快照,请以自定义名称在 .snap 目录下创建子目录。例如,要创建目录 /CEPHFS_MOUNT/2/3/ 的快照,请运行以下命令:

tux > mkdir /CEPHFS_MOUNT/2/3/.snap/CUSTOM_SNAPSHOT_NAME

19.7.2 删除快照

要删除某个快照,请在 .snap 目录中删除该快照的子目录:

tux > rmdir /CEPHFS_MOUNT/2/3/.snap/CUSTOM_SNAPSHOT_NAME
打印此页