Ceph 分布式文件系统 CephFS 实战指南

Ceph 分布式存储 文件系统存储管理

摘要

本文全面介绍了 Ceph 分布式存储系统中的文件系统存储管理(CephFS)。主要内容包括:

1. CephFS 基础概念

  • CephFS 简介:基于 Ceph 存储构建的 POSIX 兼容文件系统,支持多活动 MDS 和高可用配置。
  • 存储方式对比:详细对比了基于文件、基于块和基于对象三种存储方式的特性与适用场景。
  • 元数据服务器(MDS):负责管理目录层次结构和文件元数据,支持活动/备用运行模式,提供缓存一致性管理。
  • 客户端访问流程:从 MON 认证到 MDS 获取元数据,最终直接与 OSD 通信的完整访问路径。

2. CephFS 部署与管理

  • 部署方式:支持手动部署(精细控制)和卷部署(快速简便)两种方式。
  • 文件系统创建与删除:详细步骤包括池创建、MDS 服务部署、文件系统创建及安全删除流程。
  • 挂载方式:支持 Kernel 挂载(高性能)和 FUSE 挂载(支持配额和 ACL),包含用户权限管理、客户端准备和具体挂载示例。
  • 快照管理:快照功能的启用/禁用、创建、使用和删除,以及权限配置方法。

3. 高级功能:CephFS Mirror

  • 镜像功能:从 Ceph Pacific (v16.2.0) 开始支持,用于集群间异步复制,实现灾难恢复和数据备份。
  • 实施前提:要求源集群和目标集群均为 Pacific 或更高版本,并建立可靠网络连接。
  • 同步原理:基于快照实现,首次全量同步后仅同步增量变化,减少带宽和存储开销。
  • 配置步骤:从部署镜像守护进程到建立对等关系、配置同步目录的完整操作流程。

4. 核心价值

  • 企业级特性:支持多文件系统、精细权限控制、快照备份、跨集群镜像等高可用功能。
  • 灵活部署:提供多种部署和挂载方式,适应不同场景需求。
  • 生产就绪:包含详细的命令行操作示例和最佳实践,可直接应用于生产环境。

本文通过理论讲解与实战操作相结合的方式,为读者提供了从 CephFS 基础概念到高级镜像功能的完整知识体系,是掌握 Ceph 文件系统存储管理的实用指南。

介绍 CephFS

介绍 CephFS

  • Ceph 文件系统 (CephFS) ,构建在 Ceph 存储之上,是一种兼容 POSIX 的文件系统。

  • 与 RBD 和 RGW 类似,CephFS 也会作为 librados 的原生接口来实施。

  • Ceph 支持在一个集群中运行多个活动 MDS,以提高元数据性能。为保持高可用性,还可配置备用 MDS,以便在任何活动 MDS 出现故障时,接管其任务。

  • Ceph 支持在一个集群中部署多个活动的 CephFS 文件系统。部署多个 CephFS 文件系统需要运行 多个 MDS 守护进程。

不同存储方式对比

  • 基于文件的存储:可以像传统文件系统一样整理用户的数据,并带有目录树层次结构。数据会保存 在文件中,文件会有一个名称并包含相关元数据,如修改时间戳、所有者和访问权限。

  • 基于块的存储:提供像磁盘一样运作的存储卷,整理到大小相等的区块中。通常而言,基于块的存 储卷要么通过文件系统进行格式化,要么是像数据库一样可直接读写的应用。

  • 基于对象的存储:支持将任意数据和元数据作为一个标有唯一标识符的单元存储在扁平存储池中。 用户会使用 API 来存储和检索数据,而不会作为块或在文件系统层次结构中访问数据。

元数据服务器

元数据服务器 (MDS) 负责:

  • 管理目录层次结构和文件元数据(如所有者、时间戳和权限模式等),提供 CephFS 客户端访问 RADOS 对象所需的信息。

  • 访问客户端缓存,并维护客户端缓存一致性。

MDS 以两种运行模式:

  • 活动 MDS, 负责管理 CephFS 文件系统上的元数据。

  • 备用 MDS, 充当备份,并会在活动 MDS 无响应时切换到活动模式。

CephFS 文件系统至少需要一个活跃的 MDS 服务,最好再部署一个备用 MDS 以确保可用性。

MDS 配置选项:

  • MDS 等级,设置集群中活动 MDS 守护进程的最大数量,由 max_mds 定义。MDS 守护进程在启 动时没有等级,MON 守护进程负责为它们分配1个等级,也就是集群中只有一个活动 MDS。

  • 卷、子卷和子卷组:

    • CephFS 卷,对应一个 CephFS 文件系统。

    • CephFS 子卷,对应 CephFS 文件系统子目录。在创建子卷时,用户可指定更细致的权限管 理,如子卷的 UID、GID、文件模式、大小和子卷组。

    • CephFS 子卷组,对应一组子卷。

  • 文件系统关联性,将用户的 CephFS 文件系统配置为首选某一个 MDS。例如,用户可配置为首选 在速度更快的服务器上运行的 MDS。文件系统关联性通过 mds_join_fs 选项进行配置。

  • MDS 缓存大小限制,通过 mds_cache_memory_limit 选项限制最大内存,mds_cache_size 选 项定义最大索引节点数,以限制 MDS 缓存的大小。

  • 配额,配置用户的 CephFS 文件系统,以限制使用配额存储的字节数或文件数。FUSE 和Kernel 客 户端都支持在挂载 CephFS 文件系统时检查配额。这些客户端还负责在用户达到配额限值时,停止 向 CephFS 文件系统写入数据。使用 setfattr 命令的 ceph.quota.max_bytes 和 ceph.quota.max_files 选项可设置限值。

客户端访问 CephFS 过程

  1. CephFS 客户端首先会联系 MON 进行身份验证并检索集群映射。

  2. 完成上一步后,客户端从集群映射中获取到活动 MDS信息。

  3. 客户端向活动 MDS 索取文件元数据。

  4. 然后客户端直接与 OSD 通信,使用元数据来访问文件或目录。

部署 CephFS

部署 CephFS 方法:

  1. 手动部署,步骤多,可以控制每个步骤。

  2. 卷部署,步骤少,简单方便,无法控制每个步骤。

手动部署 CephFS

部署 CephFS 流程:

  1. 创建所需池

  2. 创建 CephFS 文件系统

  3. 部署 MDS 守护进程

创建 CephFS

要创建 CephFS 文件系统,首先至少要创建两个池,一个用于存储 CephFS 数据,另一个用于存储 CephFS 元数据。这两个池的默认名称分别为 cephfs_data 和 cephfs_meta。

bash 复制代码
[root@ceph1 ~]# ceph osd pool create cephfs.cephfs1.data.1 
[root@ceph1 ~]# ceph osd pool create cephfs.cephfs1.meta

元数据池用于存储文件的位置信息,所以为此池设置更高的复本级别,以避免出现数据错误,导致数据 无法访问。CephFS 默认使用复制数据池,也支持使用纠删代码数据池。

bash 复制代码
[root@ceph1 ~]# ceph osd pool set cephfs.cephfs1.meta size 3

使用 ceph fs new 命令来创建文件系统:

bash 复制代码
[root@ceph1 ~]# ceph fs new cephfs1 cephfs.cephfs1.meta cephfs.cephfs1.data.1

要将现有池添加为 CephFS 文件系统中的数据池,请使用 ceph fs add_data_pool。

bash 复制代码
[root@ceph1 ~]# ceph osd pool create cephfs.cephfs1.data.2 
[root@ceph1 ~]# ceph fs add_data_pool cephfs1 cephfs.cephfs1.data.2

部署 MDS 服务

bash 复制代码
[root@ceph1 ~]# ceph orch apply mds cephfs1 --placement="3 ceph1.laogao.cloud ceph2.laogao.cloud ceph3.laogao.cloud"

验证 MDS 服务部署

bash 复制代码
# 查看Ceph文件系统清单
[root@ceph1 ~]# ceph fs ls
name: cephfs1, metadata pool: cephfs.cephfs1.meta, data pools: [cephfs.cephfs1.data.1 cephfs.cephfs1.data.2 ]

# 查看文件系统详细状态
[root@ceph1 ~]# ceph fs status cephfs1
cephfs1 - 0 clients
=======
RANK  STATE     MDS                    ACTIVITY       DNS  INOS  DIRS  CAPS
0     active    cephfs1.ceph1.hazpoq   Reqs: 0 /s      10   13    12    0

POOL                    TYPE       USED    AVAIL
cephfs.cephfs1.meta     metadata   96.0k   56.1G
cephfs.cephfs1.data.1   data       0       56.1G
cephfs.cephfs1.data.2   data       0       56.1G

STANDBY MDS
cephfs1.ceph3.kjpzae
cephfs1.ceph2.fdudvc
MDS version: ceph version 16.2.15 (618f440892089921c3e944a991122ddc44e60516) pacific (stable)

# 查看集群存储与存储池占用情况
[root@ceph1 ~]# ceph df
--- RAW STORAGE ---
CLASS  SIZE    AVAIL   USED    RAW USED  %RAW USED
hdd    180 GiB 177 GiB 2.6 GiB 2.6 GiB   1.42
TOTAL  180 GiB 177 GiB 2.6 GiB 2.6 GiB   1.42

--- POOLS ---
POOL ID  PGS  STORED  OBJECTS  USED    %USED  MAX AVAIL
1        1    0 B     0        0 B     0      56 GiB    device_health_metrics
3        32   0 B     0        0 B     0      56 GiB    cephfs.cephfs1.data.1
4        32   2.3 KiB 22       96 KiB  0      56 GiB    cephfs.cephfs1.meta
5        32   0 B     0        0 B     0      56 GiB    cephfs.cephfs1.data.2

# 快速查看MDS运行拓扑
[root@ceph1 ~]# ceph mds stat
cephfs1:1 {0=cephfs1.ceph1.hazpoq=up:active} 2 up:standby

# 查看Orchestrator管理的MDS服务实例
[root@ceph1 ~]# ceph orch ls mds
NAME           PORTS  RUNNING  REFRESHED  AGE  PLACEMENT
mds.cephfs1           3/3      6m ago     6m   ceph1.laogao.cloud;ceph2.laogao.cloud;ceph3.laogao.cloud;count:3
删除 CephFS

删除流程如下:

  1. 删除服务

  2. 删除文件系统

  3. 删除池

删除过程如下:

bash 复制代码
# 删除MDS编排服务
[root@ceph1 ~]# ceph orch rm mds.cephfs1
Removed service mds.cephfs1

# 重要警告
# 如果需要删除 CephFS,请先备份所有数据,
# 删除 CephFS 文件系统会销毁该文件系统内全部数据!

# 1. 将文件系统标记为 down
[root@ceph1 ~]# ceph fs set cephfs1 down true
cephfs1 marked down.

# 2. 删除CephFS文件系统
[root@ceph1 ~]# ceph fs rm cephfs1 --yes-i-really-mean-it

# 3. 开启监视器允许删除存储池
[root@ceph1 ~]# ceph config set mon mon_allow_pool_delete true

# 4. 依次删除CephFS对应的元数据池、数据池
[root@ceph1 ~]# ceph osd pool rm cephfs.cephfs1.meta cephfs.cephfs1.meta --yes-i-really-really-mean-it
[root@ceph1 ~]# ceph osd pool rm cephfs.cephfs1.data.1 cephfs.cephfs1.data.1 --yes-i-really-really-mean-it
[root@ceph1 ~]# ceph osd pool rm cephfs.cephfs1.data.2 cephfs.cephfs1.data.2 --yes-i-really-really-mean-it
bash 复制代码
#执行顺序不可颠倒
ceph orch rm mds服务 → ceph fs set down true → ceph fs rm → 删除pool

卷部署 CephFS

创建 CephFS
bash 复制代码
# 创建CephFS文件系统,部署3个MDS实例
[root@ceph1 ~]# ceph fs volume create cephfs2 --placement="3 ceph1.laogao.cloud ceph2.laogao.cloud ceph3.laogao.cloud"

# 查看集群内文件系统列表
[root@ceph1 ~]# ceph fs ls
name: cephfs2, metadata pool: cephfs.cephfs2.meta, data pools: [cephfs.cephfs2.data ]

# 查看MDS运行状态
[root@ceph1 ~]# ceph mds stat
cephfs2:1 {0=cephfs2.ceph3.irxxar=up:active} 2 up:standby

# 查看Orchestrator编排的MDS服务
[root@ceph1 ~]# ceph orch ls mds
NAME         PORTS  RUNNING  REFRESHED  AGE  PLACEMENT
mds.cephfs2         3/3      58s ago    62s  ceph1.laogao.cloud;ceph2.laogao.cloud;ceph3.laogao.cloud;count:3:3
删除 CephFS
bash 复制代码
[root@ceph1 ~]# ceph fs volume ls 
[ 
    { 
        "name": "cephfs2" 
    } 
]

[root@ceph1 ~]# ceph fs volume rm cephfs2 --yes-i-really-mean-it 
metadata pool: cephfs.cephfs2.meta data pool: ['cephfs.cephfs2.data'] removed

[root@ceph1 ~]# ceph fs ls No filesystems enabled

挂载 CephFS 文件系统

环境准备

创建 cephfs1 和 cephfs2。

bash 复制代码
[root@ceph1 ~]# ceph fs volume create cephfs1 --placement="3 ceph1.laogao.cloud ceph2.laogao.cloud ceph3.laogao.cloud" 
[root@ceph1 ~]# ceph fs volume create cephfs2 --placement="3 ceph1.laogao.cloud ceph2.laogao.cloud ceph3.laogao.cloud"

CephFS 挂载方式

用户可使用以下方式挂载 CephFS 文件系统:

  • Kernel 挂载,要求 Linux 内核版本达到 4 或以上,从 RHEL 8 开始可用。对于之前的内核版本,请 改用FUSE 客户端。

  • FUSE 挂载。

这两个挂载方式各有优势和劣势:

  • Kernel 挂载,不支持配额,但速度可能较快。

  • FUSE 挂载,支持配额和 ACL。 ACL 功能需要在挂载时明确指定该功能以启用。

CephFS 挂载用户

通过 ceph fs authorize 命令,可为 CephFS 文件系统中的不同用户和文件夹提供精细的访问控制。

CephFS 文件系统支持不同访问选项:

  • r:对指定文件夹的读取权限。如果未指定其他限制,则会向子文件夹授予读取权限。

  • w:对指定文件夹的写入权限。如果未指定其他限制,则会向子文件夹授予写入权限。

  • p:除了 r 和 w 功能外,客户端还需要 p 选项才能使用布局或配额。

  • s:除了 r 和 w 功能外,客户端还需要 s 选项才能创建快照。

示例1:允许用户对 / 文件夹具备读取、写入、配额和快照权限,并保存用户凭据。

bash 复制代码
[root@ceph1 ~]# ceph fs authorize cephfs1 client.cephfs1-all-user / rwps > /etc/ceph/ceph.client.cephfs1-all-user.keyring

示例2:允许用户读取 / 文件夹,并提供对 /dir2 文件夹的读取、写入,并保存用户凭据。

bash 复制代码
[root@ceph1 ~]# ceph fs authorize cephfs1 client.cephfs1-restrict-user / r /dir2 rw > /etc/ceph/ceph.client.cephfs1-restrict-user.keyring

CephFS 客户端挂载准备

要挂载基于 CephFS 的文件系统,请验证客户端主机是否满足以下条件:

  • 安装 ceph-common 软件包。对于 FUSE 客户端,还要安装 ceph-fuse 软件包。
bash 复制代码
[root@client ~]# dnf install -y ceph-common
  • 复制 Ceph 配置文件到客户端。
bash 复制代码
[root@ceph1 ~]# scp /etc/ceph/ceph.conf root@client:/etc/ceph/ceph.conf
  • 将用户keyring复制到客户端主机上的 /etc/ceph 文件夹。
bash 复制代码
[root@ceph1 ~]# scp /etc/ceph/ceph.client.{cephfs1-all-user,cephfs1-restrict- user}.keyring root@client:/etc/ceph/

为了方便管理集群,我们将admin凭据复制到client。

bash 复制代码
[root@ceph1 ~]# scp /etc/ceph/ceph.client.admin.keyring root@client:/etc/ceph/

使用 Kernel 挂载 CephFS

挂载 CephFS

使用 mount.ceph 命令挂载文件系统:

bash 复制代码
# mount.ceph [src] [mount-point] [-n] [-v] [-o ceph-options] 
# 或者 
# mount -t ceph [src] [mount-point] [-n] [-v] [-o ceph-options]

用户可以指定逗号分隔的多个 MON 来挂载设备。标准端口 (6789) 为默认值,用户也可在各个MON 名 称的后面添加冒号和非标准端口号。建议指定多个 MON,以防文件系统挂载时有些 MON 处于脱机状 态。

bash 复制代码
[root@client ~]# mount.ceph 
usage: mount.ceph [src] [mount-point] [-n] [-v] [-o ceph-options] 
options: 
    -h: Print this help 
    -n: Do not update /etc/mtab 
    -v: Verbose 
    ceph-options: refer to mount.ceph(8)

使用 CephFS Kernel 客户端时,可用选项有:

  • fs=fs-name,指定要挂载的 CephFS 文件系统名称。未提供值时,它会使用默认文件系统。

  • name=name,指定Cephx 客户端 ID。默认为 guest。

  • secret=secret_value,指定客户端的机密密钥的值。

  • secretfile=secret_key_file,指定包含此客户端机密密钥的文件的路径。

  • rsize=bytes,指定最大读取大小,以字节为单位。

  • wsize=bytes,指定最大写入大小,以字节为单位。默认为不写入。

示例1:使用不受限账户挂载 cephfs 文件系统。

bash 复制代码
# 创建挂载目录
[root@client ~]# mkdir /mnt/cephfs1

# 内核方式挂载CephFS,指定用户名与文件系统名称
[root@client ~]# mount.ceph ceph1.laogao.cloud:/ /mnt/cephfs1 -o name=cephfs1-all-user,fs=cephfs1

# 查看挂载容量信息
[root@client ~]# df -h /mnt/cephfs1
Filesystem          Size  Used Avail Use% Mounted on
192.168.108.11:/     57G     0   57G   0% /mnt/cephfs1

# 创建测试目录、测试文件
[root@client ~]# mkdir /mnt/cephfs1/{dir1,dir2}
[root@client ~]# echo Hello World > /mnt/cephfs1/dir1/welcome.txt
[root@client ~]# dd if=/dev/zero of=/mnt/cephfs1/dir1/file-100M bs=1M count=100

# 树形查看目录结构
[root@client ~]# tree /mnt/cephfs1
/mnt/cephfs1
├── dir1
│   ├── file-100M
│   └── welcome.txt
└── dir2

2 directories, 2 files

# 再次查看挂载点占用
[root@client ~]# df -h /mnt/cephfs1
Filesystem          Size  Used Avail Use% Mounted on
192.168.108.11:/     57G  100M   56G   1% /mnt/cephfs1

# 查看CephFS后端存储池占用
[root@client ~]# ceph fs status
cephfs1 - 1 clients
=======
RANK  STATE     MDS                   ACTIVITY    DNS  INOS  DIRS  CAPS
0     active    cephfs1.ceph1.hpwqgm  Reqs: 0 /s   14   17    14    5

POOL                    TYPE       USED    AVAIL
cephfs.cephfs1.meta     metadata   192k    55.9G
cephfs.cephfs1.data     data       300M    55.9G

cephfs2 - 0 clients
=======
RANK  STATE     MDS                   ACTIVITY    DNS  INOS  DIRS  CAPS
0     active    cephfs2.ceph3.nwbhbl  Reqs: 0 /s   10   13    12    0

POOL                    TYPE       USED    AVAIL
cephfs.cephfs2.meta     metadata   96.0k   55.9G
cephfs.cephfs2.data     data       0       55.9G

STANDBY MDS
cephfs1.ceph2.notedt
cephfs1.ceph3.qxjqfe
cephfs2.ceph2.hjrvmu
cephfs2.ceph1.yursdd
MDS version: ceph version 16.2.15 (618f440892089921c3e944a991122ddc44e60516) pacific (stable)

# 卸载文件系统
[root@client ~]# umount /mnt/cephfs1

示例2:使用受限账户挂载 cephfs 文件系统。

bash 复制代码
# 使用受限用户挂载CephFS
[root@client ~]# mount.ceph ceph1.laogao.cloud:/ /mnt/cephfs1 -o name=cephfs1-restrict-user,fs=cephfs1

# 权限验证
# 尝试在dir1创建文件,权限拒绝
[root@client ~]# touch /mnt/cephfs1/dir1/cephfs1-restrict-user-file1
touch: cannot touch '/mnt/cephfs1/dir1/cephfs1-restrict-user-file1': Permission denied

# 在dir2创建文件正常
[root@client ~]# touch /mnt/cephfs1/dir2/cephfs1-restrict-user-file1

# 查看目录结构
[root@client ~]# tree /mnt/cephfs1/
/mnt/cephfs1/
├── dir1
│   ├── file-100M
│   └── welcome.txt
└── dir2
    └── cephfs1-restrict-user-file1

2 directories, 3 files

# 卸载文件系统
[root@client ~]# umount /mnt/cephfs1
挂载特定子目录

通过 CephFS Kernel 客户端,用户可从 CephFS 文件系统挂载特定子目录。

本例从 CephFS 文件系统的 root 中挂载了名为 /dir2 的目录:

bash 复制代码
# 直接挂载CephFS子目录 /dir2 至本地挂载点
[root@client ~]# mount -t ceph ceph1.laogao.cloud:/dir2 /mnt/cephfs1 -o name=cephfs1-restrict-user,fs=cephfs1

# 在挂载目录创建文件
[root@client ~]# touch /mnt/cephfs1/cephfs1-restrict-user-file2

# 查看挂载点内文件
[root@client ~]# tree /mnt/cephfs1/
/mnt/cephfs1/
├── cephfs1-restrict-user-file1
└── cephfs1-restrict-user-file2

0 directories, 2 files

# 卸载文件系统
[root@client ~]# umount /mnt/cephfs1
永久挂载文件系统

要使用Kernel 客户端永久挂载 CephFS 文件系统,可以将以下格式条目添加到 /etc/fstab 文件中:

示例:

bash 复制代码
ceph1.laogao.cloud:/dir2 /mnt/cephfs1 ceph name=cephfs1-restrict- user,fs=cephfs1,_netdev 0 0

使用 FUSE 挂载 CephFS

卸载之前挂载的:

bash 复制代码
[root@client ~]# umount /mnt/cephfs1

以非 root 用户身份使用 FUSE 客户端时,需在 /etc/fuse.conf 配置文件中添加 user_allow_other。

使用 FUSE 挂载 CephFS,需要额外安装ceph-fuse软件:

bash 复制代码
[root@client ~]# dnf install -y ceph-fuse
挂载 CephFS

使用 FUSE 客户端挂载 CephFS 文件系统语法:

bash 复制代码
[root@client ~]# ceph-fuse --help
usage: ceph-fuse [-n client.username] [-m mon-ip-addr:mon-port] <mount point> [OPTIONS]
--client_mountpoint/-r <sub_directory>
    use sub_directory as the mounted root, rather than the full Ceph tree.

usage: ceph-fuse [options] <mountpoint>

FUSE options:
  -h --help                  print help
  -V --version               print version
  -d -o debug                enable debug output (implies -f)
  -f                         foreground operation
  -s                         disable multi-threaded operation
  -o clone_fd                use separate fuse device fd for each thread (may improve performance)
  -o max_idle_threads        the maximum number of idle worker threads allowed (default: 10)
  -o allow_other             allow access by all users
  -o allow_root              allow access by root
  -o auto_unmount            auto unmount on process termination

--conf/-c FILE               read configuration from the given configuration file
--id ID                      set ID portion of my name
--name/-n TYPE.ID            set name
--cluster NAME               set cluster name (default: ceph)
--setuser USER               set uid to user or uid (and gid to user's gid)
--setgroup GROUP             set gid to group or gid
--version                    show version and quit

示例:

bash 复制代码
# FUSE方式挂载CephFS,指定受限客户端账号
[root@client ~]# ceph-fuse -n client.cephfs1-restrict-user /mnt/cephfs1
2025-08-26T10:13:17.021+0800 7f33347023c0 -1 init, newargv = 0x560cab629680 newargc=13
2025-08-26T10:13:17.021+0800 7f33347023c0 -1 init, args.argv = 0x560cab629830 args.argc=4
ceph-fuse[14462]: starting ceph client
ceph-fuse[14462]: starting fuse

# 查看挂载目录结构
[root@client ~]# tree /mnt/cephfs1
/mnt/cephfs1
├── dir1
│   ├── file-100M
│   └── welcome.txt
└── dir2
    ├── cephfs1-restrict-user-file1
    └── cephfs1-restrict-user-file2

2 directories, 4 files

# 卸载挂载点
[root@client ~]# umount /mnt/cephfs1
挂载特定子目录

CephFS FUSE 客户端默认会挂载所访问文件系统的 root 目录 (/)。用户可使用 ceph-fuse -r directory 命 令挂载特定目录。如果 CephFS 卷中不存在该目录,此操作会失效。

bash 复制代码
# ceph-fuse 指定子目录 /dir2 进行挂载
[root@client ~]# ceph-fuse -n client.cephfs1-restrict-user -r /dir2 /mnt/cephfs1/
2025-08-26T10:17:20.933+0800 7f46882233c0 -1 init, newargv = 0x562a8edc7c50 newargc=13
2025-08-26T10:17:20.933+0800 7f46882233c0 -1 init, args.argv = 0x562a8edc7e00 args.argc=4
ceph-fuse[16731]: starting ceph client
ceph-fuse[16731]: starting fuse

# 查看挂载目录内容
[root@client ~]# tree /mnt/cephfs1/
/mnt/cephfs1/
├── cephfs1-restrict-user-file1
└── cephfs1-restrict-user-file2

0 directories, 2 files

# 卸载文件系统
[root@client ~]# umount /mnt/cephfs1

用户在配置多个 CephFS 文件系统时,CephFS FUSE 客户端会挂载默认的 CephFS 文件系统。要挂载特 定文件系统,使用 --client_fs 选项。

ceph-fuse -n client.cephfs1-restrict-user -r /dir2 --client_fs cephfs1 /mnt/cephfs1

永久挂载文件系统

要使用 FUSE 客户端永久挂载 CephFS 文件系统,可以将以下条目添加到 /etc/fstab 文件中:

bash 复制代码
ceph1.laogao.cloud /mnt/cephfs1 fuse.ceph ceph.id=cephfs1-restrict-user,_netdev 0

注意:ceph-fuse方式持久化挂载,不支持挂载特定子目录。

管理 CephFS

实验环境准备

使用受限账户挂载 cephfs。

bash 复制代码
[root@client ~]# mount.ceph ceph1.laogao.cloud:/dir2 /mnt/cephfs1 -o name=cephfs1-restrict-user,fs=cephfs1

管理快照

CephFS 默认会启用快照功能,这些快照存储在名为 .snap 的隐藏目录中。

启停快照功能

使用 ceph fs set 命令停用特定 CephFS 文件系统快照功能。

bash 复制代码
[root@ceph1 ~]# ceph fs set cephfs1 allow_new_snaps false 
disabled new snapshots

使用 ceph fs set 命令启用特定 CephFS 文件系统快照功能。

bash 复制代码
[root@ceph1 ~]# ceph fs set cephfs1 allow_new_snaps true 
enabled new snapshots
创建快照

若要创建快照,在 .snap 目录中创建一个子目录。快照名称就是新子目录名称。此快照包含 CephFS 文 件系统中所有当前文件的副本。

普通用户是没有创建快照权限的。

bash 复制代码
# 尝试手动创建快照目录,权限拒绝
[root@client ~]# mkdir /mnt/cephfs1/.snap/snap
mkdir: cannot create directory '/mnt/cephfs1/.snap/snap': Permission denied

# 查看受限用户权限详情
[root@client ~]# ceph auth get client.cephfs1-restrict-user
[client.cephfs1-restrict-user]
	key = AQAWEK1owPSzMhAACJqg9ZF8FBv28UdwTdEu4Q==
	caps mds = "allow r fsname=cephfs1, allow rw fsname=cephfs1 path=/dir2"
	caps mon = "allow r fsname=cephfs1"
	caps osd = "allow rw tag cephfs data=cephfs1"
exported keyring for client.cephfs1-restrict-user

授权客户端s权限为 CephFS 文件系统制作快照。

bash 复制代码
[root@client ~]# ceph auth caps client.cephfs1-restrict-user \ 
mds "allow r fsname=cephfs1, allow rws fsname=cephfs1 path=/dir2" \ 
mon "allow r fsname=cephfs1" \ 
osd "allow rw tag cephfs data=cephfs1"

重新挂载,再次创建快照

bash 复制代码
[root@client ~]# umount /mnt/cephfs1 
[root@client ~]# mount.ceph ceph1.laogao.cloud:/dir2 /mnt/cephfs1 -o name=cephfs1-restrict-user 
[root@client ~]# mkdir /mnt/cephfs1/.snap/snap 
[root@client ~]# ls /mnt/cephfs1/.snap/snap/ 
cephfs1-restrict-user-file1 cephfs1-restrict-user-file2
使用快照恢复文件

要恢复文件,可将其从快照目录复制到另一常规目录中。

bash 复制代码
[root@client ~]# mkdir /restore 
[root@client ~]# cp /mnt/cephfs1/.snap/snap/cephfs1-restrict-user-file1 /restore/

若要从 .snap 目录树中完整恢复快照,可将普通条目替换为所选快照中的副本。

bash 复制代码
[root@client ~]# rsync -a /mnt/cephfs1/.snap/snap/ /restore/
删除快照

若要丢弃快照,可在 .snap 中删除对应的目录。即使快照目录不为空,rmdir 命令也会成功,无 需使用递归 rm 命令。

bash 复制代码
[root@client ~]# rmdir /mnt/cephfs1/.snap/snap/

#管理 CephFS Mirror

CephFS Mirror 是 CephFS 的一个关键功能,用于在两个或多个 Ceph 集群之间实现文件系统的异步复 制(镜像),主要用于灾难恢复和数据备份。

CephFS Mirror 功能是从 Ceph Pacific (v16.2.0) 版本开始支持的。

参考: 社区 CephFS Mirror 红帽 CephFS Mirror

CephFS Mirror 主要特点

  1. 异步复制:CephFS Mirror 是异步的,数据会定期从源集群复制到目标集群。

  2. 基于快照:CephFS Mirror 依赖于 CephFS 的快照功能,通过快照来捕获文件系统的变化并复制到 目标集群。

  3. 多集群支持:支持将数据从一个 CephFS 集群复制到多个目标集群。

  4. 增量复制:仅复制文件系统中发生变化的部分,减少带宽和存储开销。

实施 CephFS Mirror 前提

源集群和目标集群都必须运行 Ceph Pacific (v16.2.0) 或更高版本。

需要在源集群和目标集群上配置 CephFS 文件系统。

需要在源集群和目标集群之间建立可靠的网络连接。

同步原理

源集群守护进程ceph-mirror使用自己的ceph账户,读取自己集群中cephfs数据,然后使用目标集群的 账户凭据将自己集群中cephfs变更数据写入目标集群。

CephFS 镜像功能基于快照实现:

  1. 第一次快照同步,需要将数据从源集群批量传输到远程集群。

  2. 然后,镜像守护进程识别本地快照之间修改的文件,并将这些修改的文件同步到远程集群。

对于目录中给定的快照,cephfs-mirror守护进程将依赖 readdir diff 来识别目录树中的更改。差异 应用于远程文件系统中的目录,从而仅同步两个快照之间已更改的文件。

环境准备

bash 复制代码
# 源集群创建Cephfs 
[root@ceph1 ~]# ceph fs volume create cephfs --placement="1 ceph1.laogao.cloud"

# 目标群创建Cephfs 
[root@ceph4 ~]# ceph fs volume create cephfs --placement="1 ceph4.laogao.cloud"

具体操作步骤如下:

  1. 在源集群上部署 CephFS 镜像守护进程。
bash 复制代码
# 部署cephfs-mirror镜像同步服务
[root@ceph1 ~]# ceph orch apply cephfs-mirror ceph1.laogao.cloud
Scheduled cephfs-mirror update...

# 查看cephfs-mirror运行状态
[root@ceph1 ~]# ceph orch ls cephfs-mirror
NAME             RUNNING  REFRESHED  AGE  PLACEMENT
cephfs-mirror    1/1      11s ago    18s  ceph1.laogao.cloud

# 部署说明:部署CephFS镜像守护进程,自动创建 cephfs-mirror 同步用户
[root@ceph1 ~]# ceph auth ls | grep cephfs-mirror
installed auth entries:
client.cephfs-mirror.ceph1.yuxcon
caps: [mon] profile cephfs-mirror

# 查看镜像同步用户密钥与权限
[root@ceph1 ~]# ceph auth get client.cephfs-mirror.ceph1.yuxcon
[client.cephfs-mirror.ceph1.yuxcon]
	key = AQChjK1oOu2WNRAAX7ZFmilo3IMq+/X+K1TWrA==
	caps mds = "allow r"
	caps mgr = "allow r"
	caps mon = "profile cephfs-mirror"
	caps osd = "allow rw tag cephfs metadata=*, allow r tag cephfs data=*"
exported keyring for client.cephfs-mirror.ceph1.yuxcon
  1. 在目标集群上创建Ceph用户。
bash 复制代码
# 创建/授权 cephfs-mirror 跨集群同步账号
[root@ceph4 ~]# ceph fs authorize cephfs client.cephfs-mirror / rwps
[client.cephfs-mirror]
	key = AQDpjq1ohezRExAA/x2+xHvjgFQm4SJOllbShw==

# 查看该账号完整权限
[root@ceph4 ~]# ceph auth get client.cephfs-mirror
[client.cephfs-mirror]
	key = AQDpjq1ohezRExAA/x2+xHvjgFQm4SJOllbShw==
	caps mds = "allow rwps fsname=cephfs"
	caps mon = "allow r fsname=cephfs"
	caps osd = "allow rw tag cephfs data=cephfs"
exported keyring for client.cephfs-mirror
  1. 在源集群上启用 mirroring 模块。
bash 复制代码
[root@ceph1 ~]# ceph mgr module enable mirroring
  1. 在源集群特定文件系统上启用 mirroring 功能。
bash 复制代码
[root@ceph1 ~]# ceph fs snapshot mirror enable cephfs
  1. 在目标集群上启用 mirroring 模块。
bash 复制代码
[root@ceph4 ~]# ceph mgr module enable mirroring
  1. 在目标集群节点上创建对等引导。

语法: $ ceph fs snapshot mirror peer_bootstrap create fs_name client_entity site-name

说明:

  • fs_name ,是目标 cephfs 文件系统名称。

  • client_entity ,是目标集群Ceph账户,用来同步远端的CephFS。

  • site_name ,是用户自定义的目标集群名称。

示例:

bash 复制代码
[root@ceph4 ~]# ceph fs snapshot mirror peer_bootstrap create cephfs client.cephfs-mirror backup 
{"token": 
"eyJmc2lkIjogImFhMDUyNzY0LTdmNGUtMTFmMC1hYTM5LTAwMGMyOTZiNGY4ZSIsICJmaWxlc3lz dGVtIjogImNlcGhmcyIsICJ1c2VyIjogImNsaWVudC5jZXBoZnMtbWlycm9yIiwgInNpdGVfbmFtZ SI6ICJiYWNrdXAiLCAia2V5IjogIkFRRHBqcTFvaGV6UkV4QUEveDIreEh2amdGUW00U0pPbGxiU2 h3PT0iLCAibW9uX2hvc3QiOiAiW3YyOjE5Mi4xNjguMTA4LjE0OjMzMDAvMCx2MToxOTIuMTY4LjE wOC4xNDo2Nzg5LzBdIFt2MjoxOTIuMTY4LjEwOC4xNTozMzAwLzAsdjE6MTkyLjE2OC4xMDguMTU6 Njc4OS8wXSBbdjI6MTkyLjE2OC4xMDguMTY6MzMwMC8wLHYxOjE5Mi4xNjguMTA4LjE2OjY3ODkvM F0ifQ=="}
  1. 在源集群上导入目标集群创建的引导令牌。

语法: ceph fs snapshot mirror peer_bootstrap import source_fs_name token

说明:

  • source_fs_name ,是源 cephfs 文件系统名称。

  • token ,是目标 cephfs 创建的 token 字符串。

示例:

bash 复制代码
# 导入对端集群bootstrap配置建立镜像对等关系
[root@ceph1 ~]# ceph fs snapshot mirror peer_bootstrap import cephfs eyJmc2lkIjogImFhMDUyNzY0LTdmNGUtMTFmMC1hYTM5LTAwMGMyOTZiNGY4ZSIsICJmaWxlc3lzdGVtIjogImNlcGhmcyIsICJ1c2VyIjogImNsaWVudC5jZXBoZnMtbWlycm9yIiwgInNpdGVfbmFtZSI6ICJiYWNrdXAiLCAia2V5IjogIkFRRHBqcTFvaGV6UkV4QUEveDIreEh2amdGUW00U0pPbGxiU2h3PT0iLCAibW9uX2hvc3QiOiAiW3YyOjE5Mi4xNjguMTA4LjE0OjMzMDAvMCx2MToxOTIuMTY4LjEwOC4xNDo2Nzg5LzBdIFt2MjoxOTIuMTY4LjEwOC4xNTozMzAwLzAsdjE6MTkyLjE2OC4xMDguMTU6Njc4OS8wXSBbdjI6MTkyLjE2OC4xMDguMTY6MzMwMC8wLHYxOjE5Mi4xNjguMTA4LjE2OjY3ODkvMF0ifQ==
{}

# 查看文件系统镜像对等集群清单
[root@ceph1 ~]# ceph fs snapshot mirror peer_list cephfs
{
    "89e201c4-b3f8-48d4-a647-66e5f4d0948b": {
        "client_name": "client.cephfs-mirror",
        "site_name": "backup",
        "fs_name": "cephfs",
        "mon_host": "[v2:192.168.108.14:3300/0,v1:192.168.108.14:6789/0] [v2:192.168.108.15:3300/0,v1:192.168.108.15:6789/0] [v2:192.168.108.16:3300/0,v1:192.168.108.16:6789/0]"
    }
}
  1. 在源集群上指定需要快照镜像的目录。
bash 复制代码
# 语法 
[root@ceph1 ~]# ceph fs snapshot mirror add FILE_SYSTEM_NAME PATH 
# 示例 
[root@ceph1 ~]# ceph fs snapshot mirror add cephfs /webapp {}
  1. 客户端挂载验证
bash 复制代码
# 源集群 
[root@ceph1 ~]# mkdir /mnt/cephfs1 
[root@ceph1 ~]# mount.ceph ceph1.laogao.cloud:/ /mnt/cephfs1 -o name=admin 
[root@ceph1 ~]# mkdir /mnt/cephfs1/webapp 
[root@ceph1 ~]# echo hello world > /mnt/cephfs1/webapp/index.html

# 目标集群 
[root@ceph4 ~]# mkdir /mnt/cephfs1 
[root@ceph4 ~]# mount.ceph ceph4.laogao.cloud:/ /mnt/cephfs1 -o name=admin 
[root@ceph4 ~]# ls /mnt/cephfs1/ 
webapp
相关推荐
来者皆善3 小时前
ZYNQ linux上使用 USB CDC ACM
linux·运维·服务器
4/5$全真龙门3 小时前
廉价易行的内网穿透
运维
缓慢更新3 小时前
企业档案管理系统迁移实录:从文件服务器到智能检索引擎
运维·服务器
小北的AI科技分享4 小时前
企业AI开发:从技术选型到落地的关键路径
运维·模型·评估
Dawn-bit4 小时前
Linux磁盘分区与Swap和磁盘故障查询
linux·运维·服务器·网络·云计算
netho05 小时前
影刀rpa证书题库使用教学
运维·服务器·rpa
无足鸟ICT5 小时前
【RHCA+】$[]
linux·运维·服务器
运维技术小记6 小时前
国产化环境配置 VNC 远程桌面:麒麟 V10 实战
linux·运维·服务器
giaming0236 小时前
告别Docker Desktop!一款轻量级原生开发环境管理工具:FlyEnv
运维·docker·容器