25 NFS Ganesha #
NFS Ganesha 是一种 NFS 服务器,它在用户地址空间中运行,而不是作为操作系统内核的一部分运行。借助 NFS Ganesha,您可以插入自己的存储机制(例如 Ceph),并从任何 NFS 客户端访问它。有关安装说明,请参阅第 8.3.6 节 “部署 NFS Ganesha”。
由于客户端与存储区之间的额外网络跃点会导致协议开销增加并产生额外的延迟,因此与使用本机 CephFS 相比,通过 NFS 网关访问 Ceph 可能会大幅降低应用性能。
每个 NFS Ganesha 服务都含有一个配置层次结构,其中包含:
- 引导 - ganesha.conf
- 每个服务的 RADOS 通用配置对象 
- 每个导出的 RADOS 配置对象 
  引导配置是要在容器中启动 nfs-ganesha 守护进程的最低配置。每个引导配置都将包含一个 %url 指令,该指令中包含来自 RADOS 通用配置对象的任何额外配置。通用配置对象可以为导出 RADOS 配置对象中定义的每个 NFS 导出包含额外的 %url 指令。
 
25.1 创建 NFS 服务 #
指定 Ceph 服务部署的推荐方法是创建一个 YAML 格式的文件,其中包含所要部署服务的规范。您可以为每种类型的服务创建单独的规范文件,也可以在一个文件中指定多个(或所有)服务类型。
根据您的选择,您将需要更新或创建相关的 YAML 格式文件来创建 NFS Ganesha 服务。有关创建该文件的详细信息,请参见第 8.2 节 “服务和归置规范”。
   更新或创建该文件之后,请执行以下命令以创建 nfs-ganesha 服务:
  
cephuser@adm > ceph orch apply -i FILE_NAME25.2 启动或重启动 NFS Ganesha #
要启动 NFS Ganesha 服务,请运行:
cephuser@adm > ceph orch start nfs.SERVICE_ID要重启动 NFS Ganesha 服务,请运行:
cephuser@adm > ceph orch restart nfs.SERVICE_ID如果您只想重启动单个 NFS Ganesha 守护进程,请运行:
cephuser@adm > ceph orch daemon restart nfs.SERVICE_ID启动或重启动 NFS Ganesha 时,NFS v4 会有 90 秒的超时宽限期。在宽限期内,会主动拒绝来自客户端的新请求。因此,当 NFS 处于宽限期内,客户端可能会发生请求处理速度变慢的情况。
25.3 列出 NFS 恢复存储池中的对象 #
执行以下命令以列出 NFS 恢复存储池中的对象:
cephuser@adm > rados --pool POOL_NAME --namespace NAMESPACE_NAME ls25.4 创建 NFS 导出 #
您可以在 Ceph Dashboard 中创建 NFS 导出,也可以在命令行上手动创建。要使用 Ceph Dashboard 创建 NFS 导出,请参见第 7 章 “管理 NFS Ganesha”,具体而言,请参见第 7.1 节 “创建 NFS 导出项”。
   要手动创建 NFS 导出,请创建导出的配置文件。例如,包含以下内容的 /tmp/export-1 文件:
  
EXPORT {
    export_id = 1;
    path = "/";
    pseudo = "/";
    access_type = "RW";
    squash = "no_root_squash";
    protocols = 3, 4;
    transports = "TCP", "UDP";
    FSAL {
        name = "CEPH";
        user_id = "admin";
        filesystem = "a";
        secret_access_key = "SECRET_ACCESS_KEY";
    }
}创建并保存新导出的配置文件后,运行以下命令来创建该导出:
rados --pool POOL_NAME --namespace NAMESPACE_NAME put EXPORT_NAME EXPORT_CONFIG_FILE
例如:
cephuser@adm > rados --pool example_pool --namespace example_namespace put export-1 /tmp/export-1
    应修改 FSAL 块以包含所需的 cephx 用户 ID 和秘密访问密钥。
   
25.5 确认 NFS 导出 #
   NFS v4 将在伪文件系统的根目录下构建导出列表。您可以通过挂载 NFS Ganesha 服务器节点的 / 来确认 NFS 共享是否已导出:
  
#mount-t nfs nfs_ganesha_server_hostname:/ /path/to/local/mountpoint#ls/path/to/local/mountpoint cephfs
    默认情况下,cephadm 将配置 NFS v4 服务器。NFS v4 不会与 rpcbind 或 mountd 守护进程进行交互。NFS 客户端工具(例如 showmount)将不会显示任何已配置的导出。
   
25.6 挂载 NFS 导出 #
要在客户端主机上挂载导出的 NFS 共享,请运行:
#mount-t nfs nfs_ganesha_server_hostname:/ /path/to/local/mountpoint
25.7 多个 NFS Ganesha 集群 #
可以定义多个 NFS Ganesha 集群。如此便可:
- 分隔 NFS Ganesha 集群,以便访问 CephFS。 
