Ceph NFS 是 Ceph 存储系统提供的 NFS(Network File System)协议导出服务。它允许用户通过标准的 NFS v3、v4.0、v4.1、v4.2 协议挂载 Ceph 文件系统(CephFS)或 Ceph 对象存储(RGW),从而让传统的 NFS 客户端(如 Linux、Unix、Windows 通过 NFS 客户端)可以像使用普通 NFS 服务器一样访问 Ceph 存储,而无需修改应用程序。
简单来说:Ceph NFS 是一个运行在 Ceph 集群之上、兼容标准 NFS 协议的网关服务,它把 Ceph 的分布式存储能力包装成传统 NFS 服务。
Ceph NFS 的定位(与其它组件对比)
| 组件 | 协议 | 主要用途 | 是否需要专用网关 |
|---|---|---|---|
| CephFS (native) | 自有协议 | 高性能 POSIX 文件系统 | 客户端直连 MDS |
| RADOS/RBD | 块协议 | 虚拟机、容器块存储 | 无 |
| RGW | S3/Swift | 对象存储 | 有网关 |
| Ceph NFS | NFS v3/v4 | 让传统 NFS 客户端使用 Ceph 存储 | 有专用网关 |
Ceph NFS 主要解决“已有大量依赖 NFS 的遗留系统或共享目录需求”的场景,例如:传统 HPC 集群、渲染农场、备份服务器、文件共享服务器等。
Ceph NFS 的架构组成
从 Ceph Octopus (14.2.x) 版本开始,Ceph NFS 完全基于 nfs-ganesha 作为 NFS 服务器实现,并通过容器化方式(Cephadm)管理。
核心组件如下:
| 组件 | 作用 | 部署方式(Cephadm) |
|---|---|---|
| NFS-Ganesha | 真正的 NFS 协议服务器,支持 v3/v4/v4.1/v4.2,用户态进程 | Daemon(容器) |
| CephFS Export | 把 CephFS 的某个子目录或整个文件系统导出为 NFS 共享 | 通过 nfs-ganesha 配置 |
| RGW Export(可选) | 把 RGW 的 S3 bucket 导出为类 POSIX 的 NFS 共享(性能较差,一般不推荐) | 通过 nfs-ganesha 的 RGW 后端 |
| libcephfs / rados | nfs-ganesha 通过 FSAL_CEPH(CephFS)或 FSAL_RGW 直接访问 Ceph 后端 | 内置在 nfs-ganesha 容器镜像中 |
| MDS | CephFS 元数据服务器(只在导出 CephFS 时需要) | 已有 CephFS 集群必须运行 |
| Monitor / OSD | 底层 RADOS 存储 | 已有集群 |
| Mgr (nfs module) | Ceph 管理器中的 nfs 插件,用于一键创建/管理 NFS 集群和 export | 自动启用 |
典型架构图(简化):
NFS 客户端 (Linux mount -t nfs4 ...)
│
└────→ NFS-Ganesha Daemon(运行在任意主机或容器节点)
│
├── FSAL_CEPH ──→ libcephfs ──→ MDS + OSD(CephFS 模式)
└── FSAL_RGW ──→ RGW(对象存储 NFS 导出,较少用)
高可用设计
- 支持多节点 Active-Active 部署(同一个 export 可被多个 nfs-ganesha 实例同时服务)
- 使用 Pacemaker + Corosync(传统方式)或 Kubernetes + HA(新方式)实现高可用
- Cephadm 部署时配合 Ingress Daemon(原 HAproxy + Keepalived)提供虚拟 IP,实现单 IP 多后端
- 推荐架构:3~5 个 nfs-ganesha 节点 + 1 个虚拟 IP(Ingress)
两种主要使用模式
| 模式 | 后端 | 特点 | 典型场景 |
|---|---|---|---|
| CephFS 导出 | CephFS | 完整 POSIX 语义,性能好,推荐 | 共享家目录、渲染、HPC |
| RGW 导出 | S3 bucket | 类 POSIX,但性能差,权限映射复杂 | 基本不用,除非必须兼容 S3 |
简单部署示例(Cephadm + Quincy/Reef/Pacific)
# 1. 启用 mgr nfs 模块
ceph mgr module enable nfs
# 2. 创建 NFS 集群(指定放置节点或虚拟 IP)
ceph nfs cluster create mynfs "192.168.10.10,192.168.10.11,192.168.10.12" --ingress --virtual-ip 10.0.0.100
# 3. 创建 CephFS 类型的 export
ceph nfs export create cephfs mynfs / myfs-export --fsname=myfs --path=/
# 4. 客户端挂载
mount -t nfs4 10.0.0.100:/myfs-export /mnt
优缺点总结
优点:
- 完全兼容标准 NFS 协议,客户端零修改
- 支持 NFSv4.1+ 的 pNFS(部分实现),性能可扩展
- 与 Ceph 集群统一管理,Cephadm 一键部署
- 支持 Kerberos、LDAP 等企业级认证(通过 ganesha 配置)
缺点:
- 比原生 CephFS 客户端性能低 20~40%(多了一层用户态 nfs-ganesha)
- 某些高级 POSIX 特性(如 lock、ACL)依赖 ganesha 实现完整度
- 故障切换时可能有短暂断连(秒级)
适用场景建议
- 必须使用 NFS 协议的遗留系统
- 需要共享给大量非 Ceph-aware 客户端(比如 Windows + NFS 客户端)
- 混合环境:部分服务器用原生 CephFS,部分老服务器只能用 NFS
如果你的环境可以接受安装 Ceph 客户端,强烈推荐直接使用原生 CephFS 挂载(kernel 或 fuse),性能和功能都更强。只有在“无法安装客户端”或“必须 NFS 协议”的情况下才选择 Ceph NFS。
总结一句话:
Ceph NFS = nfs-ganesha + Ceph 后端 + Cephadm 管理,是为传统 NFS 客户端提供的一座桥梁,让它们也能用上 Ceph 分布式存储。
