适用于 SUSE Enterprise Storage 5

13 集群文件系统

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

13.1 挂载 CephFS

创建文件系统后,如果 MDS 可用,您便可以从客户端主机挂载文件系统。

13.1.1 客户端准备

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

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

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

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

13.1.2 创建机密文件

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

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

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

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

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

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

13.1.3 挂载 CephFS

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

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

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

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

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

AQATSKdNGBnwLhAAnNDKnH65FmVKpXZJVasUeQ==
提示
提示:指定多个监视器

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

在本地主机上创建挂载点:

sudo mkdir /mnt/cephfs

挂载 CephFS:

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

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

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

可在 mount 命令中指定多个监视器主机:

sudo 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=/ 部分表示路径受限的客户端能够查看根卷,但无法写入根卷。在要求完全隔离的用例中,这可能会造成问题。

13.2 卸载 CephFS

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

sudo umount /mnt/cephfs

13.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

13.4 多个活动 MDS 守护进程(主动/主动 MDS)

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

13.4.1 何时使用主动/主动 MDS

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

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

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

13.4.2 增加 MDS 活动集群的大小

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

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

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

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

重要
重要:待机守护进程

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

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

13.4.3 减小级别数

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

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

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

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

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

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

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

root@master # ceph status
  [...]
  services:
    [...]
    mds: cephfs-1/1/1 up  {0=node2=up:active}, 1 up:standby

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

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

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

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

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

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

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

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

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

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.

13.5 管理故障转移

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

13.5.1 配置待机守护进程

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

默认情况下,如果不使用其中的任何设置,则不具备级别的所有 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

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

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

13.5.2 示例

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

13.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
打印此页