20260602 Ceph 文件系统

📅 2026/7/3 3:37:17
20260602 Ceph 文件系统
Ceph系列第六期Ceph 文件系统CephFS精讲本期目标理解 CephFS 的架构、MDS 角色及与其他存储类型的区别掌握两种部署 CephFS 的方法手动创建池/文件系统和ceph fs volume快速部署学习 MDS 服务的扩展与管理多活/备用熟练使用 Kernel 客户端krbd 风格和 FUSE 客户端挂载 CephFS实现子目录挂载、权限细化及开机自动挂载管理 CephFS 快照创建、恢复、删除了解并初步配置 CephFS Mirror 跨集群异步复制前置要求已完成第二期集群部署理解 Cephx 认证第三期建议已完成第四期 RBD 和第五期 RGW 的实践。1. CephFS 简介CephFSCeph File System是一个构建在 RADOS 之上的兼容 POSIX 的分布式文件系统。它允许用户像使用传统文件系统如 ext4、XFS一样创建目录、文件并设置权限、时间戳等元数据。1.1 与其他存储类型的对比特性块存储RBD文件存储CephFS对象存储RGW数据模型固定大小块目录树 文件扁平桶 对象元数据管理无文件系统格式由客户端负责MDS 管理RGW 管理用户/桶/对象键访问协议Linux 块设备rbdPOSIX (NFS/FUSE/Kernel)HTTP (S3/Swift)典型场景虚拟机磁盘、数据库共享文件存储、HPC、容器持久化海量非结构化数据、备份1.2 核心组件MDS元数据服务器CephFS 依赖MDSMetadata Server来管理目录结构和文件元数据文件名、权限、大小、时间戳、扩展属性等。Active MDS处理来自客户端的元数据请求lookup、open、readdir、setattr 等。Standby MDS热备当 Active MDS 故障时自动接管保证高可用。多活 MDS从 Luminous 版本开始支持多个 Active MDS将元数据负载分散提升性能。MDS 将元数据存储为 RADOS 对象保存在专用的元数据池metadata pool中文件数据则保存在数据池data pool中。1.3 客户端访问 CephFS 的流程客户端向 MON 认证并获取集群映射cluster map。客户端查询集群映射获取 Active MDS 列表。客户端向 Active MDS 发送元数据请求如 lookup/home/user/file.txt。MDS 返回该文件对应的 inode 及数据所在 OSD 位置信息。客户端直接与 OSD 通信读写数据数据路径不经过 MDS。2. 部署 CephFS2.1 准备工作已有一个正常运行的 Ceph 集群至少一个 MON、MGR、若干 OSD。需要至少两个存储池一个用于元数据metadata一个用于数据data。元数据池建议使用较高副本级别如 3 副本以保证可靠性。可以创建多个数据池通过文件布局或目录布局将不同数据放置在不同池中如热数据放 SSD 池、冷数据放 HDD 池。CephFS 支持两种部署方式手动部署完全控制每个步骤适合精细调整。卷volume部署使用ceph fs volume命令一键创建简单快速但灵活性较低。2.2 手动部署 CephFS2.2.1 创建存储池bash# 创建元数据池建议设置较高的副本数此处设为3 ceph osd pool create cephfs.meta 32 32 ceph osd pool set cephfs.meta size 3 # 创建数据池默认副本数为 osd_pool_default_size通常为3 ceph osd pool create cephfs.data 32 322.2.2 创建文件系统bashceph fs new cephfs1 cephfs.meta cephfs.data其中cephfs1是文件系统名称cephfs.meta是元数据池cephfs.data是默认数据池。2.2.3 添加额外的数据池可选bashceph osd pool create cephfs.data.2 32 32 ceph fs add_data_pool cephfs1 cephfs.data.2添加后可以通过设置布局layout或目录的ceph.dir.layout.pool扩展属性将特定目录的数据写入不同池。2.2.4 部署 MDS 服务使用 cephadmbash# 在三个节点上各部署一个 MDS 实例其中只有一个会成为 Active其他为 Standby ceph orch apply mds cephfs1 --placement3 ceph1.whisky.cloud ceph2.whisky.cloud ceph3.whisky.cloud2.2.5 验证部署bash# 查看文件系统列表 ceph fs ls # 查看 MDS 状态 ceph mds stat # 查看 MDS 服务进程 ceph orch ps --daemon-type mds2.3 卷部署 CephFS推荐新手或快速环境bash# 创建一个名为 cephfs2 的文件系统自动创建元数据池和数据池并部署 3 个 MDS 实例 ceph fs volume create cephfs2 --placement3 ceph1.whisky.cloud ceph2.whisky.cloud ceph3.whisky.cloud该命令会自动完成池创建、文件系统创建、MDS 部署等所有步骤。2.4 删除 CephFS删除前请务必备份所有数据删除操作不可逆。bash# 1. 先停止 MDS 服务可选但建议先删除服务 ceph orch rm mds.cephfs1 # 2. 将文件系统标记为 down ceph fs set cephfs1 down true # 3. 删除文件系统 ceph fs rm cephfs1 --yes-i-really-mean-it # 4. 删除池需先开启池删除允许 ceph config set mon mon_allow_pool_delete true ceph osd pool rm cephfs.meta cephfs.meta --yes-i-really-really-mean-it ceph osd pool rm cephfs.data cephfs.data --yes-i-really-really-mean-it卷部署的文件系统同样可以使用ceph fs volume rm cephfs2 --yes-i-really-mean-it删除。3. 管理 MDS3.1 查看 MDS 状态bashceph mds stat # 输出示例cephfs1:1 {0cephfs1.ceph1.hazpoqup:active} 2 up:standby3.2 设置多活 MDS默认每个文件系统只有一个 Active MDS。通过修改max_mds参数可以增加 Active 数量从而分摊元数据负载。bash# 设置最大活动 MDS 数量为 2 ceph fs set cephfs1 max_mds 2 # 查看当前活动 MDS ceph fs status cephfs1注意增加max_mds后新的 Active MDS 会自动从 Standby 中选取。如果没有足够 Standby需要先部署更多 MDS 实例。3.3 减少 Active MDSbashceph fs set cephfs1 max_mds 1多余的 Active MDS 会降级为 Standby。3.4 MDS 缓存调优bash# 设置 MDS 内存缓存上限字节默认 4GB ceph config set mds mds_cache_memory_limit 8589934592 # 8GB # 设置 inode 缓存数量上限 ceph config set mds mds_cache_size 5000004. 挂载 CephFSCephFS 支持两种客户端挂载方式Kernel 客户端推荐性能好但暂不支持配额Quota功能。FUSE 客户端功能更全支持配额、ACL但性能稍低于内核模块。两种方式都需要客户端安装ceph-common包FUSE 还需要ceph-fuse。4.1 准备客户端环境bash# 在客户端节点例如 client.whisky.cloud安装 dnf install -y ceph-common # 从 ceph1 复制配置文件和密钥环以 admin 用户为例 scp rootceph1:/etc/ceph/ceph.conf /etc/ceph/ scp rootceph1:/etc/ceph/ceph.client.admin.keyring /etc/ceph/4.2 创建受限用户推荐为特定目录授予细粒度权限避免使用 admin 挂载。bash# 在 ceph1 上执行 # 授权 client.cephfs_user 对整个文件系统拥有读写权限整个根目录 ceph fs authorize cephfs1 client.cephfs_user / rwps # 授权 client.cephfs_restricted 只能读根目录并读写 /dir2 子目录 ceph fs authorize cephfs1 client.cephfs_restricted / r /dir2 rw # 导出的密钥环会自动保存到 /etc/ceph/ceph.client.cephfs_restricted.keyring4.3 使用 Kernel 客户端挂载挂载整个文件系统bashmkdir /mnt/cephfs1 mount.ceph ceph1.whisky.cloud:/ /mnt/cephfs1 -o namecephfs_user,fscephfs1ceph1.whisky.cloud为任意一个 MON 地址可多个用逗号分隔。name指定 Cephx 用户。fs指定文件系统名称若有多个文件系统时必须指定。挂载特定子目录bashmkdir /mnt/cephfs_sub mount.ceph ceph1.whisky.cloud:/dir2 /mnt/cephfs_sub -o namecephfs_restricted,fscephfs1开机自动挂载/etc/fstabbashceph1.whisky.cloud:/ /mnt/cephfs1 ceph namecephfs_user,fscephfs1,_netdev 0 0_netdev选项告知 systemd 网络准备好后再挂载。4.4 使用 FUSE 客户端挂载首先安装ceph-fusebashdnf install -y ceph-fuse挂载整个文件系统bashceph-fuse -n client.cephfs_user /mnt/cephfs1挂载特定子目录使用-r选项bashceph-fuse -n client.cephfs_restricted -r /dir2 /mnt/cephfs_sub指定文件系统名称当存在多个文件系统时bashceph-fuse -n client.cephfs_user --client_fs cephfs1 /mnt/cephfs1开机自动挂载/etc/fstabbashceph1.whisky.cloud /mnt/cephfs1 fuse.ceph ceph.idcephfs_user,_netdev 0 0注意FUSE 方式持久化时不支持挂载子目录只能挂载根目录。4.5 验证挂载bashdf -h /mnt/cephfs1 # 应显示类似 192.168.108.11:/ 57G 0 57G 0% /mnt/cephfs1 # 写入测试文件 echo Hello CephFS /mnt/cephfs1/hello.txt5. 管理 CephFS 快照CephFS 支持目录级别的快照快照存储在目录下的.snap隐藏目录中。快照功能默认启用。5.1 启用/禁用快照功能bash# 禁用快照禁止创建新快照 ceph fs set cephfs1 allow_new_snaps false # 启用快照 ceph fs set cephfs1 allow_new_snaps true5.2 创建快照在需要快照的目录下创建一个子目录在.snap中即可bash# 假设挂载点为 /mnt/cephfs1 mkdir /mnt/cephfs1/.snap/snapshot1该操作会立即创建该目录及其所有子内容的只读快照。注意普通用户默认没有权限创建快照需要 MDS 权限中包含s。使用ceph fs authorize时加上s即可。5.3 恢复文件从快照目录中复制文件到原位置或其他位置bashcp /mnt/cephfs1/.snap/snapshot1/deleted_file.txt /mnt/cephfs1/5.4 删除快照删除.snap下的子目录即可删除快照即使快照目录不为空也使用rmdir而非rm -rfbashrmdir /mnt/cephfs1/.snap/snapshot15.5 快照的限制快照是只读的无法修改。大量快照会消耗额外的存储空间因为 COW 会保留变更前的对象。建议定期清理无用快照。6. CephFS Mirror跨集群异步复制CephFS Mirror 是 Ceph Pacificv16.2.0引入的功能用于在两个 Ceph 集群之间异步镜像文件系统的数据主要用于灾难恢复。前提源集群和目标集群均运行 Ceph Pacific 或更高版本。两个集群中均已创建 CephFS 文件系统名称可以不同但配置时需要指定。网络互通。6.1 在源集群和目标集群分别创建 CephFSbash# 源集群ceph1 ceph fs volume create cephfs --placement1 ceph1.whisky.cloud # 目标集群ceph4 ceph fs volume create cephfs --placement1 ceph4.whisky.cloud6.2 配置 CephFS Mirror步骤1在源集群部署 cephfs-mirror 守护进程bashceph orch apply cephfs-mirror ceph1.whisky.cloud该操作会创建一个名为client.cephfs-mirror.unique的用户具有必要的权限。步骤2在目标集群创建专门用于同步的 Cephx 用户bashceph fs authorize cephfs client.cephfs-mirror / rwps记录该用户的密钥。步骤3在两个集群上启用 mirroring 模块bash# 源和目标分别执行 ceph mgr module enable mirroring步骤4在源集群文件系统上启用 mirroringbashceph fs snapshot mirror enable cephfs步骤5在目标集群生成引导 tokenbootstrap tokenbashceph fs snapshot mirror peer_bootstrap create cephfs client.cephfs-mirror backup-site该命令输出一个 JSON 格式的 token内容较长。步骤6在源集群导入 tokenbashceph fs snapshot mirror peer_bootstrap import cephfs token-string步骤7指定需要镜像的目录可选若不指定则整个文件系统镜像bashceph fs snapshot mirror add cephfs /important_dir步骤8验证同步状态bash# 在源集群查看对等关系 ceph fs snapshot mirror peer_list cephfs # 在目标集群查看同步状态 radosgw-admin sync status # 此命令也适用于 RGWCephFS 专用命令尚未统一可使用 ceph fs status6.3 测试同步在源集群挂载 CephFS写入数据bash# 源集群 mount.ceph ceph1.whisky.cloud:/ /mnt/cephfs_src -o nameadmin mkdir /mnt/cephfs_src/important_dir echo Hello mirror /mnt/cephfs_src/important_dir/hello.txt # 等待片刻后在目标集群挂载查看 mount.ceph ceph4.whisky.cloud:/ /mnt/cephfs_dst -o nameadmin ls /mnt/cephfs_dst/important_dir/6.4 清理 CephFS Mirrorbash# 移除镜像目录 ceph fs snapshot mirror remove cephfs /important_dir # 禁用文件系统上的 mirror ceph fs snapshot mirror disable cephfs # 删除对等关系需获取 peer uuid ceph fs snapshot mirror peer_list cephfs ceph fs snapshot mirror peer_remove cephfs uuid # 删除 cephfs-mirror 服务 ceph orch rm cephfs-mirror7. 第六期归纳总结一览表7.1 关键命令速查操作命令手动创建元数据池ceph osd pool create pool_name pg_num手动创建数据池ceph osd pool create pool_name pg_num创建文件系统ceph fs new fs_name meta_pool data_pool卷方式创建文件系统ceph fs volume create fs_name --placementcount hosts添加数据池ceph fs add_data_pool fs_name pool_name部署 MDSceph orch apply mds fs_name --placement...查看文件系统列表ceph fs ls查看 MDS 状态ceph mds stat/ceph fs status fs_name设置多活 MDS 数量ceph fs set fs_name max_mds num删除文件系统ceph fs rm fs_name --yes-i-really-mean-itKernel 挂载mount.ceph mon_ip:/ mountpoint -o nameuser,fsfs_nameFUSE 挂载ceph-fuse -n client.user mountpoint挂载子目录Kernelmount.ceph mon_ip:/subdir mountpoint ...挂载子目录FUSEceph-fuse -n client.user -r subdir mountpoint授权用户ceph fs authorize fs_name client.user path perms创建快照mkdir mountpoint/.snap/snapname删除快照rmdir mountpoint/.snap/snapname启用 mirrorceph fs snapshot mirror enable fs_name导入 mirror tokenceph fs snapshot mirror peer_bootstrap import fs_name token7.2 MDS 权限字符串含义权限字符含义r读取文件和目录元数据列出、查看属性w写入创建、删除、重命名、修改属性p允许设置布局layout和配额quotas允许创建快照.snap目录组合示例rwps表示完全读写布局快照权限。7.3 Kernel 客户端 vs FUSE 客户端对比特性Kernel 客户端FUSE 客户端性能高内核态中等用户态配额支持否是ACL 支持部分是需显式启用子目录挂载支持支持-r选项依赖软件ceph-commonceph-commonceph-fuse生产推荐通用场景性能优先需要配额/ACL 场景7.4 常见故障与处理问题可能原因解决方法挂载超时MON 地址错误或防火墙检查网络和端口3300/6789权限拒绝Cephx 用户未授权对应路径使用ceph fs authorize重新授权MDS 为up:standby但不活跃max_mds不足增加max_mds或检查是否有活跃 MDS快照创建失败用户缺少s权限修改 caps 添加sCephFS Mirror 不同步网络不通或 token 过期检查网络重新生成 token8. 本期小结CephFS 提供 POSIX 兼容的分布式文件系统通过 MDS 管理元数据数据直接存储在 RADOS。部署方式分为手动精细控制和卷部署快速推荐生产环境手动部署以优化池配置。MDS 支持多活和热备可通过max_mds提高元数据性能。客户端支持 Kernel 和 FUSE 两种挂载方式各有优缺点可根据需求选择。快照功能基于.snap目录可轻松实现文件级恢复。CephFS Mirror 实现跨集群异步复制是灾备的有效手段Pacific 版本及以上。至此Ceph 三大存储接口RBD、RGW、CephFS均已完整覆盖。后续可根据实际业务场景结合前三期的配置管理、认证授权、监控告警等内容构建完整的企业级存储解决方案。