精读笔记(RHCA 英文教材)· CL260 Chapter 10 Providing File Storage with CephFS
精读笔记(RHCA 英文教材)· CL260 Chapter 10 Providing File Storage with CephFS
教材原文:RHCA 官方英文教材(PDF 第 339~374 页)(OCR 整书版已从本站移除,本页为章节精读) 关联知识:Ch1(MDS/RADOS)、Ch6/8(块与对象访问);本课把三类存储(文件/块/对象)串起来;
00-RHCA教材精读-导航与学习法.md
Chapter Goal / Objectives(原文+译)
- GOAL: Provide file storage with CephFS(用 CephFS 提供文件共享存储).
- OBJECTIVES: ① 部署共享文件存储(建文件系统+客户端访问);② 管理 CephFS:快照、复制、内存、布局与访问控制。
- 结构:两个 Section + 各自 Guided Exercise + 章末 Lab(
lab grade fileshare-review)。
10.1 Deploying Shared File Storage
文件 vs 块 vs 对象(结论性对比)
- 文件:目录树层级 + 文件名与元数据(属主/时间戳/权限);CephFS 提供。
- 块:等尺寸块的盘卷,格式化文件系统后使用;RBD 提供。
- 对象:扁平池里的(数据+元数据)单元、唯一 ID、API 存取;RADOS 本质就是对象存储。
CephFS 组件与 MDS
- 客户端流程:先连 MON 认证并拿 cluster map → 向 active MDS 要文件元数据 → 拿元数据直连 OSD 读写对象。
- MDS 管目录层级与文件元数据(属主/时间戳/权限),元数据存在 RADOS;MDS 分 active/standby:active 处理元数据,standby 做热备(active 无响应即切换);standby 数量与 MDS 池不足会 HEALTH_WARN。
- MDS 特性点:ranks(max_mds 定义最多同时 active 的 MDS 数,MON 分配 rank);subvolume / subvolume group(独立目录树抽象,可指定 UID/GID/mode/大小/组;快照只支持 subvolume 不支持 group);filesystem affinity(mds_join_fs 让某 FS 偏向特定 MDS);cache 上限(mds_cache_memory_limit / mds_cache_size);配额(字节/文件数)。
- 高可用:至少 1 active + 1 standby;
mds_autoscalerMGR 模块自动按 ranks/standby 调 daemon 数:ceph mgr module enable mds_autoscaler。
创建文件系统(两种方式)
# 方式 A:手动(细粒度)
ceph osd pool create cephfs_meta 32 32
ceph osd pool create cephfs_data 128 128
ceph fs new mycephfs cephfs_meta cephfs_data # fs new <name> <meta-pool> <data-pool>
ceph orch apply mds mycephfs --placement="1 serverc.lab.example.com"
ceph fs ls # 确认
# 方式 B:一条命令(自动建池+建 FS+起 MDS)
ceph fs volume create fs-name --placement="number-of-hosts list-of-hosts"
# 删除(先备份,数据全毁)
ceph fs set fs-name down true
ceph fs rm fs-name --yes-i-really-mean-it- 常用管理:
ceph fs ls、ceph mds fail <gid|name|role>(强制 MDS failover)、ceph mds repaired <role>(声明修复触发 failback);排障工具cephfs-journal-tool(journal)、cephfs-table-tool(表)、cephfs-data-scan(元数据重建)。
客户端授权(细粒度 r/w/p/s)
ceph fs authorize mycephfs client.user / r /directory rws
# 授权位:
# r 读(含子目录,除非另有限制);w 写(含子目录)
# p 需要 p 才能用 layout/配额
# s 需要 s 才能建快照
# 例:/ 只读;/directory 可读写+快照挂载(内核 vs FUSE)
# 内核客户端(快、不支持配额)
mount -t ceph mon1,mon2,mon3:/dir1/dir2 /mnt/mycephfs \
-o name=restricteduser,fs=mycephfs,secretfile=/etc/ceph/keyring
# 挂载选项:name(cephx id,默认 guest)、fs、secret/secretfile、rsize/wsize
# 建议列多个 MON 防单点;标准端口 6789 可省略
# FUSE 客户端(支持配额/ACL、略慢)
yum install ceph-fuse
ceph-fuse -r /directory /mnt/mycephfs [-o client_fs=fs-name] # 默认挂 /;-r 指定子目录
# fstab 持久挂载
mon1,mon2:/ /mnt/mycephfs ceph name=user1,secretfile=/root/secret,_netdev 0 0
host:/ /mnt/mycephfs fuse.ceph ceph.id=myuser,ceph.client_mountpoint=/dir,_netdev 0 0NFS Ganesha 与 CephFS 镜像
- NFS Ganesha:用户态 NFS 服务器,让普通 NFS 客户端访问 CephFS;可集群化高可用(用户态易 failover、DLM 多协议、调试简单);可再叠 ingress 服务做 active-active:虚拟 IP、故障迁移、多 NFS 节点负载均衡。
ceph mgr module enable nfs
ceph nfs cluster create <cluster-name> "node1,node2" # 建 Ganesha 集群
ceph nfs export create cephfs <fs-name> <cluster-name> <pseudo-path>
mount -t nfs -o port=<ganesha-port> <node>:<pseudo-path> /mnt/nfs- CephFS mirroring(多站点 geo-replication,均需 RHCS5+):基于快照;首同步全量,之后只传两快照间变化文件(不必全量、更快)。
# 两端启用模块
ceph mgr module enable mirroring
# 源端部署 mirror daemon(自动建 cephfs-mirror 用户)
ceph orch apply cephfs-mirror <node-name>
# 目标端授权(含 p/s)
ceph fs authorize fs-name client.cephfs-mirror / rwps
# 源端开镜像并加对端(peer)
ceph fs snapshot mirror enable fs-name
ceph fs snapshot mirror peer_bootstrap create fs-name <peer-name> <site-name> # 目标端执行
ceph fs snapshot mirror peer_bootstrap import fs-name <token> # 源端导入
ceph fs snapshot mirror add fs-name /path # 指定目录实验要点 · Guided Exercise(lab: cephfs-deploy)
建 meta/data 池 → ceph fs new mycephfs → ceph orch apply mds mycephfs --placement="1 serverc" → ceph fs authorize(restricteduser 对 /dir2 等限权)→ clienta 装 ceph-common 后用内核客户端挂载 → 建文件/dd 10MB 验证 → FUSE 与内核双挂对比权限(tree 查看各用户可见目录)→ finish(先跑 lab finish 再安全重启)。
10.2 Managing Shared File Storage
管理命令
| 动作 | 命令 |
|---|---|
| 建/列/删 FS | ceph fs new/ls/rm |
| 强制 MDS fail | ceph mds fail <gid/name/role> |
| 声明修复回切 | ceph mds repaired <role> |
| 故障定位工具 | cephfs-journal-tool、cephfs-table-tool、cephfs-data-scan |
把文件映射到对象(排障)
ls -li 文件取 inode 号(如 1099511627776);- 转 16 进制(
printf '%x',如 1000000000); rados -p cephfs_data ls | grep 1000000000——大文件会命中多个对象;目录/空文件可能无对象。
Layout 属性(控制文件→对象映射)
- 目录可设
ceph.dir.layout.*;文件可用ceph.file.layout.*;子目录没设则继承父目录 layout;默认 layout:pool=data 池、object_size/stripe 由文件系统默认。 - 关键属性:
pool(文件放哪个池)、stripe_unit、stripe_count、object_size。
setfattr -n ceph.file.layout.stripe_count -v 3 /mnt/mycephfs/dir1/anewfile
getfattr -d -m ceph.file.* /mnt/mycephfs/dir1/anewfile
getfattr -d -m ceph.dir.* /mnt/mycephfs/dir1- 客户端要改 layout 需要授权位 p。
配额
ceph.quota.max_bytes/ceph.quota.max_files用 setfattr 设在目录上;配额由客户端负责拦截写入(FUSE 完整支持;内核客户端更快但不支持配额——教材小结口径)。
快照(.snap)
- 先开快照能力:
ceph fs set fs-name allow_new_snaps true。 - 挂载后任意目录里建隐藏的
.snap子目录即产生快照:mkdir /mnt/mycephfs/.snap/snap-name(客户端需授权位 s)。 - 恢复:
cp -a .snap/snap-name/file .;整树恢复rm -rf * && cp -a .snap/snap-name/* .;删快照rmdir .snap/snap-name(非空也可 rmdir)。
定时快照(snap_schedule)
ceph mgr module enable snap_schedule
ceph fs snap-schedule add /volume 1h [start-time] # 例:每小时;start 格式 %Y-%m-%dT%H:%M:%S
ceph fs snap-schedule list /volume | status /volume | remove /volume
ceph fs snap-schedule activate / deactivate /volume # 路径不存在时默认 inactive,建好路径后 activate
ls /mnt/mycephfs/.snap # scheduled-2021-10-06-08_00_00 …- 调度信息存在 CephFS 元数据池。
实验要点 · Guided Exercise + Lab(lab: fileshare-review)
GE:管理快照(开 allow_new_snaps → mkdir .snap 建快照 → 改动/恢复文件)→ 设 layout(stripe_count=3)与目录继承验证 → 配 snap_schedule 并查 status。Lab:建 mycephfs + MDS 于 serverc → 内核挂载 → restricteduser 授权与目录权限验证 → lab grade fileshare-review。
命令速查表(本章)
| 命令 | 作用 | | ceph fs new NAME META_POOL DATA_POOL | 建文件系统 | | ceph fs volume create NAME --placement=… | 一键建 FS(含池与 MDS) | | ceph fs ls / rm NAME --yes-i-really-mean-it | 列/删 | | ceph orch apply mds NAME --placement=… | 部署 MDS | | ceph mgr module enable mds_autoscaler / mirroring / snap_schedule | 启模块 | | ceph fs authorize FS CLIENT PATH PERMS | 细粒度授权(r/w/p/s) | | mount -t ceph mon:/dir /mnt -o name=,fs=,secretfile= | 内核挂载 | | ceph-fuse -r /dir /mnt [-o client_fs=] | FUSE 挂载 | | ceph nfs cluster create / export create cephfs | NFS Ganesha 导出 | | ceph fs snapshot mirror enable / peer_bootstrap create|import / add | CephFS 镜像 | | setfattr -n ceph.file.layout.X -v V /path | 改 layout | | setfattr -n ceph.quota.max_bytes -v N /dir | 目录配额 | | mkdir /mnt/.snap/NAME / rmdir .snap/NAME | 建/删快照 | | ceph fs snap-schedule add|list|status|remove PATH | 定时快照 | | rados -p DATA_POOL ls \| grep <inode-hex> | 定位文件对象 |
词汇表(本章)
| 英文术语 | 中文 | 一句话速记 |
|---|---|---|
| CephFS / MDS | 文件系统/元数据服务器 | RADOS 之上的 POSIX 文件系统;MDS 管目录与元数据 |
| active / standby MDS | 主/备 MDS | 备机在主机故障时接管;生产 ≥1+1 |
| max_mds / rank | MDS 并发数/秩 | 最多同时 active 的 MDS 数(MON 分 rank) |
| subvolume | 子卷 | 独立目录树抽象(UID/GID/配额),可快照 |
| fs affinity | 文件系统亲和 | mds_join_fs 偏向某 MDS |
| cephfs-mirror | FS 镜像守护进程 | 快照级跨集群 geo 复制 |
| NFS Ganesha | 用户态 NFS 服务器 | 让普通 NFS 客户端访问 CephFS(+ingress 高可用) |
| authorize caps | 授权位 | r/w/p(layout配额)/s(快照) |
| layout | 布局属性 | pool/stripe_unit/stripe_count/object_size |
| quota | 配额 | ceph.quota.max_bytes/max_files(客户端执行) |
| .snap | 快照目录 | mkdir 即快照、rmdir 即删 |
| snap_schedule | 定时快照 | add 1h/1d…,元数据池存调度 |
自测
- 客户端读 CephFS 文件的完整链路(MON→MDS→OSD 直连)?MDS active/standby 与 max_mds 的关系?
- 手动建 FS 的三步 vs
ceph fs volume create的差异?删 FS 前必须做什么(先 down 再 rm)? - 授权位 r/w/p/s 各控制什么?“/ 只读 + /directory 可读写建快照”的命令怎么写?
- 内核客户端与 FUSE 客户端的性能/配额取舍?各写一条 fstab 条目?
- NFS Ganesha 解决什么问题;ingress 又叠了什么(VIP/failover/负载均衡)?
- CephFS 镜像为什么“首全量、后增量快照”比整卷同步快?写出源端/目标端关键命令(enable/authorize/peer bootstrap/add)?
- 一个文件的对象存在哪个池/哪些 OSD——给出定位命令链(inode→hex→rados ls)?
- layout 属性如何继承?给目录下新文件设 stripe_count=3 的命令?改 layout 需要哪个授权位?
- 配额在哪层执行(客户端)?用 setfattr 设 10GiB 上限的写法?
- mkdir/.snap 与 rmdir/.snap 为何分别能建/删快照?定时快照的模块与 add/list/status 命令?
