Ceph NFS 入门介绍

半兽人 发表于: 2025-11-26   最后更新时间: 2025-11-26 19:22:11  
{{totalSubscript}} 订阅, 5 游览

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 分布式存储。

更新于 2025-11-26
在线,2小时前登录

查看ceph更多相关的文章或提一个关于ceph的问题,也可以与我们一起分享文章