注意

本文档适用于 Ceph 开发版本。

配置多个活跃的MDS守护进程

也称为:multi-mds,active-active MDS

默认情况下,每个CephFS文件系统都配置为单个活跃的MDS守护进程。为了在大规模系统中扩展元数据性能,您可能需要启用多个活跃的MDS守护进程,它们将共同分担元数据工作负载。

我应该在什么时候使用多个活跃的MDS守护进程?

当您的元数据性能被默认运行的单一MDS瓶颈时,您应该配置多个活跃的MDS守护进程。

添加更多守护进程可能不会提高所有工作负载的性能。通常,单个客户端上运行的单个应用程序不会从增加的MDS守护进程数量中受益,除非该应用程序并行执行大量元数据操作。

通常受益于更多活跃MDS守护进程的工作负载是那些具有许多客户端的工作负载,这些客户端可能正在处理许多不同的目录。

增加MDS活跃集群大小

每个CephFS文件系统都有一个max_mds设置,该设置控制将创建多少个排名。文件系统中的实际排名数量只有在有备用守护进程可以承担新排名时才会增加。例如,如果只有一个MDS守护进程在运行,并且max_mds设置为两个,则不会创建第二个排名。(注意,这种配置不是高可用的(HA),因为没有备用守护进程可以在排名失败时接管。以这种方式配置时,集群将通过健康警告来抱怨。)

max_mds设置为所需的排名数量。在以下示例中显示了“ceph status”的“fsmap”行,以说明命令的预期结果。

# fsmap e5: 1/1/1 up {0=a=up:active}, 2 up:standby

ceph fs set <fs_name> max_mds 2

# fsmap e8: 2/2/2 up {0=a=up:active,1=c=up:creating}, 1 up:standby
# fsmap e9: 2/2/2 up {0=a=up:active,1=c=up:active}, 1 up:standby

新创建的排名(1)将经过“创建”状态,然后进入这个“活跃状态”。

备用守护进程

即使有多个活跃的MDS守护进程,高度可用的系统仍然来接管,如果运行活跃守护进程的任何服务器失败。

因此,高度可用系统的max_mds实际最大值最多比您系统中的MDS服务器总数少一个。

为了在多个服务器故障的情况下保持可用性,增加系统中的备用守护进程数量,以匹配您希望承受的服务器故障数量。

减少排名数量

减少排名数量与减少max_mds:

# fsmap e9: 2/2/2 up {0=a=up:active,1=c=up:active}, 1 up:standby
ceph fs set <fs_name> max_mds 1
# fsmap e10: 2/2/1 up {0=a=up:active,1=c=up:stopping}, 1 up:standby
# fsmap e10: 2/2/1 up {0=a=up:active,1=c=up:stopping}, 1 up:standby
...
# fsmap e10: 1/1/1 up {0=a=up:active}, 2 up:standby

一样简单。集群将自动逐步停止额外的排名,直到max_mds被达到。

请参阅CephFS管理命令了解更多详细信息,这些信息可以<role>采用。

注意:停止的排名首先会进入停止状态一段时间,同时它将元数据的一部分交给剩余的活跃守护进程。这个阶段可能需要几秒钟到几分钟。如果MDS似乎卡在停止状态,则应将其作为可能的错误进行调查。

如果MDS守护进程在up:stopping状态下崩溃或被杀死,备用守护进程将接管,并且集群监控器将尝试停止守护进程。

当守护进程完成停止后,它将重新生成自己并回到备用状态。

Manually pinning directory trees to a particular rank

在多个活跃元数据服务器配置中,一个Balancer在运行,它的工作是将元数据负载均匀地分配到集群中。这通常对大多数用户来说足够好,但有时希望通过显式地将元数据映射到特定排名来覆盖动态Balancer。这可以允许管理员或用户均匀地分配应用程序负载或限制用户元数据请求对整个集群的影响。

为此目的提供的机制称为一个export pin,目录的扩展属性。此扩展属性的名称是ceph.dir.pin。用户可以使用标准命令设置此属性:

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

扩展属性的值是指分配给目录子树的排名。默认值为-1表示目录未被固定。

目录的导出固定是从具有设置导出固定的最近父目录继承的。通过这种方式,在目录上设置导出固定会影响其所有子目录。但是,父固定可以被设置子目录的导出固定所覆盖。例如:

mkdir -p a/b
# "a" and "a/b" both start without an 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

设置子树分区策略

还可以设置自动静态子树分区,通过一组策略。在CephFS中,这种自动静态分区称为临时固定。任何被临时固定的目录(inode)都将根据其inode编号的一致散列自动分配给特定的排名。所有临时固定的目录集合应该在所有排名之间均匀分布。

临时固定的目录之所以如此命名,是因为一旦目录inode从缓存中删除,固定可能不会持久。然而,MDS故障转移不会影响固定目录的临时性质。MDS在其日志中记录了哪些子树被临时固定,因此MDS故障转移不会丢失此信息。

目录要么被临时固定,要么没有被固定。它被固定到哪个排名是从其inode编号和一致散列派生的。这意味着临时固定的目录在某种程度上均匀地分布在MDS集群中。这一致散列还在MDS集群增长或缩小时会最小化重新分配。因此,增加MDS集群可能会自动增加您的元数据吞吐量,而无需其他管理干预。

目前,有三种类型的临时固定:

分布式临时固定:此策略会导致目录碎片化(即使远低于正常的碎片化阈值),并将其碎片作为临时固定的子树分布。这会立即将子目录分布在一系列MDS排名上。规范示例用例是/home目录:我们希望每个用户的家目录都分布在整个MDS集群中。这可以通过以下方式设置:

setfattr -n ceph.dir.pin.distributed -v 1 /cephfs/home

随机临时固定:此策略指示任何后代子目录都可能被临时固定。这通过扩展属性ceph.dir.pin.random设置,其值设置为应固定的目录百分比。例如:

setfattr -n ceph.dir.pin.random -v 0.5 /cephfs/tmp

会导致加载到缓存或/tmp下创建的任何目录50%的时间被临时固定。

建议只将此设置为小值,如.0010.1%。有太多子树可能会降低性能。因此,配置mds_export_ephemeral_random_max对此百分比的最高值执行限制(默认:.01)。当尝试设置超过此配置的值时,MDS返回EINVAL

随机和分布式临时固定策略在Octopus中默认关闭。这些功能可以通过mds_export_ephemeral_randommds_export_ephemeral_distributed配置选项启用。

临时固定可以覆盖父导出固定,反之亦然。决定遵循哪个策略的是最近父规则:如果更近的父目录具有冲突策略,则使用那个。例如:

mkdir -p foo/bar1/baz foo/bar2
setfattr -n ceph.dir.pin -v 0 foo
setfattr -n ceph.dir.pin.distributed -v 1 foo/bar1

The foo/bar1/baz目录将被临时固定,因为foo/bar1策略覆盖了foo一起使用。该foo/bar2目录的导出固定。目录foo将遵循

对于相反的情况:

mkdir -p home/{patrick,john}
setfattr -n ceph.dir.pin.distributed -v 1 home
setfattr -n ceph.dir.pin -v 2 home/patrick

The home/patrick目录及其子目录将被固定到排名2,因为它的导出固定覆盖了home.

要删除分区策略,请删除相应的扩展属性或将值设置为0。

setfattr -n ceph.dir.pin.distributed -v 0 home
# or
setfattr -x ceph.dir.pin.distributed home

对于导出固定,请删除扩展属性或将扩展属性值设置为-1.

setfattr -n ceph.dir.pin -v -1 home

动态子树分区

CephFS长期以来一直有一个动态元数据Balancer(有时称为“默认Balancer”),它可以在将子树放置在“较冷”的MDS排名上时拆分或合并子树。以这种方式移动元数据可以提高整个文件系统的吞吐量和缓存大小。

然而,Balancer有时效率低下或速度慢,因此默认情况下它是关闭的。这是为了避免管理员“打开multimds”通过增加max_mds设置,然后发现Balancer使集群性能一团糟(从这种混乱状态恢复很简单,但可能需要时间)。

要打开Balancer,运行以下形式的命令:

ceph fs set <fs_name> balance_automate true

仅在适当的配置下打开Balancer,例如包含bal_rank_mask设置的配置(描述以下).

建议仔细监控文件系统性能和MDS。

在特定排名上使用Balancer进行动态子树分区

CephFS文件系统提供了bal_rank_mask选项来启用Balancer在特定活跃MDS排名内动态重新平衡子树。这允许管理员在不同的活跃MDS排名中采用动态子树分区和静态固定方案,以便根据用户需求优化元数据负载。例如,在现实的云存储环境中,其中许多子卷分配给多个计算节点(例如虚拟机和容器),一些需要高性能的子卷由静态分区管理,而大多数经历中等工作负载的子卷由Balancer管理。由于Balancer将元数据负载均匀地分配到所有活跃的MDS排名,静态固定子卷的性能不可避免地会受到影响或降低。如果启用此选项,Balancer管理的子树不会受到静态固定子树的影响。

This option can be configured with the ceph fs set命令查看。例如:

ceph fs set <fs_name> bal_rank_mask <hex>

Each bitfield of the <hex> number represents a dedicated rank. If the <hex> is set to 0x3, the balancer runs on active 01 ranks. For example:

ceph fs set <fs_name> bal_rank_mask 0x3

如果未设置bal_rank_mask被设置为-1all, all active ranks are masked and utilized by the balancer. As an example:

ceph fs set <fs_name> bal_rank_mask -1

On the other hand, if the balancer needs to be disabled, the bal_rank_mask should be set to 0x0从仓库中删除它。例如:

ceph fs set <fs_name> bal_rank_mask 0x0

由 Ceph 基金会带给您

Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.