将 Ceph 文件系统 CephFS 挂载为 NFS
利用 NFS-Ganesha 或 ceph-fuse 与 nfsd, 我们可以将 CephFS 通过 NFS 协议对外发布出去,用户可以通过 NFS 客户端挂载 CephFS 文件系统进行访问。
Table of Contents
Ceph 与 NFS
Ceph 是一种开源的分布式存储系统,具有优异的性能、可靠性和可扩展性。 Ceph 底层使用 RADOS,提供 RBD、RGW 和 CephFS 三种标准的访问接口。从 Luminous 版本开始, CephFS 已经具有相当好的稳定性,可用在生产环境。
NFS (Network File System) 是常用的网络文件系统,用户通过 NFS 可以像访问本地文件一样访问远程的文件,NFS 服务端和客户端之间通过 NFS 协议进行通信。
用户可以用 Ceph 提供的 ceph-fuse 挂载 CephFS 进行访问,也可以通过 ceph 的内核模块进行挂载访问,具体可参考Ceph 文件系统 CephFS 的介绍与配置。 但有时候,由于各种原因,一些系统无法通过这两种方法访问 CephFS,我们可以将 CephFS 通过 NFS 协议发布出去,用户可以通过 NFS 客户端挂载发布出去的 CephFS。
NFS-Ganesha 挂载 CephFS
CephFS 可以通过 NFS-Ganesha 使用 NFS 协议发布出去。
准备条件
- 一个设置好的 CephFS 文件系统
- 在 NFS 服务器上,安装
libcephfs2
、nfs-ganesha
和nfs-ganesha-ceph
(ganesha >= 2.5) 包。 - NFS-Ganesha 服务器与 CephFS 网路相连。
安装 NFS-Ganesha
- 通过包管理器安装:
1 | $ sudo yum install nfs-ganesha-fsal-ceph |
- 通过源码安装:
1 | $ mkdir -p ~/tmp/ && cd ~/tmp |
配置 NFS-Ganesha
- 关闭防火墙或打开
2049
端口:
1 | ### turn off firewall |
- 启动
rpcbind
和rpcstatd
服务:
1 | $ sudo systemctl enable --now rpcbind |
- 复制 Ceph 配置文件到
/etc/ceph/ceph.conf
- 根据 NFS-Ganesha 的 Ceph 配置例子, 创建
/etc/ganashe/ceph.conf
,类似如下:
1 | NFS_CORE_PARAM |
- 启动 NFS-Ganesha 服务:
1 | $ sudo ganesha.nfsd -f /etc/ganesha/ceph.conf -L /var/log/ganesha.log -N NIV_CRIT |
这样就把 CephFS 通过 NFS 协议导出了。值得注意的是,目前一个运行的 Ganesha 进程只能导出一个 CephFS 中的一个目录;如果多个 CephFS 或 一个 CephFS 中的多个目录需要导出,需要有相应多个 Ganesha 进程。
NFS 客户端挂载
在 NFS 客户端服务器上挂载 CephFS 到 /cephfs
:
1 | ### Usage: |
这样用户就可以通过 NFS 协议访问 CephFS 了。
ceph-fuse 和 nfsd 挂载 CephFS
Ceph 提供了 ceph-fuse
来挂载和访问 CephFS。在 NFS 服务器上通过 ceph-fuse
挂载 CephFS 后,我们可以通过 nfsd 将其发布出去。
NFS 服务端设置
- 在 NFS 服务器上挂载 CephFS。
- 在
/etc/exports
中添加如下内容:
1 | ### Usage: |
- 运行
exportfs
,并启动rpcbind
和nfs-server
服务,将 该节点变成 NFS 服务器。
1 | $ sudo exportfs |
NFS 客户端挂载
跟前面一样,在 NFS 客户端上通过 NFS 协议挂载 CephFS:
1 | $ sudo mount -t nfs4 -o nfsvers=4.1,proto=tcp,rw,notime <nfs-host>:/cephfs /cephfs |
这样用户就可以通过 NFS 协议访问 CephFS 了。
两种方案对比
参考文献
- NFS+CephFS构建基于Ceph的NAS服务
- Ceph提供NFS服务 —— RGW+nfs-ganesha
- MPI-IO with CephFS?
- Exporting Ceph FS Over NFS
- NFS CephFS Using Ganesha
- NFS RadosGW Using Ganesha
- 以 CephFS 为例解析如何在云中提供 NAS 服务