CephFS 分布式文件系统:从部署到 NFS 网关

CephFS 是 Ceph 提供的分布式 POSIX 文件系统,支持动态扩展、快照、配额、多客户端并发访问。它适用于企业文件共享、home 目录、高性能计算等场景。

本文将详细介绍 CephFS 的部署、配置和使用,包括内核客户端、FUSE 客户端、NFS 网关等访问方式。


一、CephFS 基础概念

1.1 什么是 CephFS

CephFS 是构建在 RADOS 之上的分布式文件系统,提供:

  • POSIX 兼容:标准文件接口,兼容现有应用
  • 动态扩展:容量和性能线性扩展
  • 高可用:多 MDS 主动 - 被动故障切换
  • 快照支持:文件和目录级快照
  • 配额管理:文件和容量配额
  • 多客户端:并发访问,缓存一致性

1.2 核心组件

组件 说明 数量建议
MDS 元数据服务器,管理目录结构 2+(主备)
MON 监控集群状态 3+
OSD 存储实际数据 3+
Client 内核模块或 FUSE 按需

二、部署 CephFS

2.1 创建 CephFS 存储池

# 创建数据池和元数据池
ceph osd pool create cephfs_data 64 64
ceph osd pool create cephfs_metadata 32 32

# 创建 CephFS 文件系统
ceph fs new myfs cephfs_metadata cephfs_data

# 查看文件系统
ceph fs ls
ceph fs status

2.2 部署 MDS

# 使用 cephadm 部署 MDS
ceph orch apply mds myfs --placement="2 ceph-node1,ceph-node2"

# 查看 MDS 状态
ceph mds stat
ceph orch ps | grep mds

# 输出示例:
# myfs:1 {0=ceph-node1=up:active} 1 up:standby

2.3 创建客户端密钥

# 创建 CephFS 客户端用户
ceph auth get-or-create client.cephfs_user \
  mon 'allow r' \
  mds 'allow r, allow rw path=/' \
  osd 'allow rw pool=cephfs_data, allow rw pool=cephfs_metadata'

# 导出密钥到文件
ceph auth get-key client.cephfs_user > /etc/ceph/cephfs_user.key

# 查看密钥
cat /etc/ceph/cephfs_user.key

三、挂载 CephFS

3.1 内核客户端挂载

性能最佳,推荐生产环境使用:

# 加载内核模块
modprobe ceph

# 创建挂载点
mkdir -p /mnt/cephfs

# 挂载(方式 1:使用密钥文件)
mount -t ceph mon1:6789,mon2:6789,mon3:6789:/ /mnt/cephfs \
  -o name=cephfs_user,secretfile=/etc/ceph/cephfs_user.key

# 挂载(方式 2:使用 admin keyring)
mount -t ceph mon1:6789,mon2:6789,mon3:6789:/ /mnt/cephfs \
  -o name=admin,secretfile=/etc/ceph/ceph.client.admin.keyring

# 查看挂载
mount | grep ceph
df -h /mnt/cephfs

3.2 FUSE 客户端挂载

无需内核模块,兼容性好:

# 安装 FUSE 客户端
apt install -y ceph-fuse    # Ubuntu
dnf install -y ceph-fuse    # Rocky/CentOS

# 创建挂载点
mkdir -p /mnt/cephfs-fuse

# 挂载
ceph-fuse -m mon1:6789,mon2:6789,mon3:6789 /mnt/cephfs-fuse \
  -o client_id=cephfs_user

# 查看状态
ceph-fuse --status

# 卸载
fusermount -u /mnt/cephfs-fuse

3.3 开机自动挂载

# 编辑 /etc/fstab
echo 'mon1:6789,mon2:6789,mon3:6789:/ /mnt/cephfs ceph name=cephfs_user,secretfile=/etc/ceph/cephfs_user.key,noatime,_netdev 0 0' >> /etc/fstab

# 测试 fstab
mount -a

# 验证
df -h | grep cephfs

四、CephFS 高级功能

4.1 子卷管理

子卷类似子目录,可独立管理配额和快照:

# 创建子卷组
ceph fs subvolumegroup create myfs group1

# 创建子卷
ceph fs subvolume create myfs volume1 group1

# 查看子卷
ceph fs subvolume ls myfs group1

# 获取子卷路径
ceph fs subvolume getpath myfs volume1 group1

# 删除子卷
ceph fs subvolume rm myfs volume1 group1

4.2 快照管理

# 创建子卷快照
ceph fs subvolume snapshot create myfs volume1 snap1 group1

# 列出快照
ceph fs subvolume snapshot ls myfs volume1 group1

# 回滚快照(先删除原子卷,再从快照克隆)
ceph fs subvolume snapshot clone myfs volume1 snap1 volume1_restored group1

# 删除快照
ceph fs subvolume snapshot rm myfs volume1 snap1 group1

4.3 配额管理

# 设置文件数量配额
ceph fs quota set myfs / max_files 100000

# 设置容量配额(字节)
ceph fs quota set myfs / max_bytes 107374182400

# 查看配额
ceph fs quota ls myfs

# 查看使用量
ceph fs quota status myfs

4.4 目录碎片化

大目录性能优化:

# 设置目录碎片化阈值
setfattr -n ceph.dir.fragmentation -v "1" /mnt/cephfs/large_dir

# 查看碎片化设置
getfattr -n ceph.dir.fragmentation /mnt/cephfs/large_dir

五、NFS 网关

通过 NFS 网关,传统应用可以访问 CephFS:

5.1 部署 NFS-Ganesha

# 部署 NFS 网关
ceph orch apply nfs mynfs --placement="1 ceph-node1"

# 创建 NFS 导出
ceph nfs export create cephfs mynfs cephfs_fs / --cephfs-fsname=myfs

# 查看导出
ceph nfs export ls mynfs

# 查看 NFS 状态
ceph orch ps | grep nfs

5.2 客户端挂载 NFS

# 安装 NFS 客户端
apt install -y nfs-common

# 挂载 NFS
mount -t nfs4 ceph-node1:/ /mnt/nfs_cephfs

# 开机自动挂载
echo 'ceph-node1:/ /mnt/nfs_cephfs nfs4 _netdev 0 0' >> /etc/fstab

六、性能优化

6.1 客户端缓存

# 调整内核客户端缓存
echo 600 > /sys/module/ceph/parameters/max_readdir
echo 600 > /sys/module/ceph/parameters/max_readdir_ra

# FUSE 客户端挂载选项
ceph-fuse -o kernel_dc_size=1048576 /mnt/cephfs

6.2 MDS 缓存

# 查看 MDS 缓存
ceph mds stat

# 调整 MDS 缓存大小
ceph tell mds.* config set mds_cache_memory_limit 4294967296

6.3 多 MDS 扩展

# 增加 MDS 数量(扩展元数据性能)
ceph orch apply mds myfs --placement="4 ceph-node1,ceph-node2,ceph-node3,ceph-node4"

# 设置最大 MDS
ceph fs set myfs max_mds 4

# 查看 MDS 分布
ceph mds stat

七、监控与故障排查

7.1 监控命令

# 查看文件系统状态
ceph fs status

# 查看 MDS 性能
ceph mds top

# 查看客户端
ceph fs client ls

# 查看文件锁
ceph fs dump | grep -i lock

7.2 常见问题

问题 1:无法挂载

# 检查 MDS 状态
ceph mds stat

# 检查网络连接
ping mon1 mon2 mon3

# 检查密钥权限
ceph auth get client.cephfs_user

问题 2:性能差

# 检查 MDS 负载
ceph mds top

# 检查 OSD 延迟
ceph osd perf

# 增加 MDS 缓存
ceph tell mds.* config set mds_cache_memory_limit 8589934592

问题 3:MDS 故障切换

# 查看 MDS 状态
ceph mds stat

# 强制故障切换
ceph mds fail 0

# 恢复 MDS
ceph mds set_max_mds 2

总结

通过本文,你掌握了 CephFS 的完整使用:

  • ✅ 部署 CephFS 文件系统和 MDS
  • ✅ 内核客户端和 FUSE 客户端挂载
  • ✅ 子卷、快照、配额管理
  • ✅ NFS 网关配置
  • ✅ 性能优化与故障排查

下一步:配置 Prometheus + Grafana 监控告警


🔗 相关链接

下一篇将介绍 Ceph 运维管理与监控告警实战!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注