Skip to content

第 9 章 NFS-Ganesha 安装与配置

9.1 NFS-Ganesha 安装

Ubuntu 22.04

bash
apt update
apt install -y nfs-ganesha nfs-ganesha-gluster

Rocky Linux 9

bash
dnf install -y nfs-ganesha nfs-ganesha-gluster

验证安装

bash
ganesha.nfsd -v

9.2 配置文件详解

NFS-Ganesha 主配置文件路径:/etc/ganesha/ganesha.conf

最小配置示例

conf
EXPORT {
    Export_Id = 1;
    Path = "/gv0";
    Pseudo = "/gv0";
    Protocols = 3, 4;
    Access_Type = RW;
    Squash = No_Root_Squash;
    FSAL {
        Name = GLUSTER;
        Hostname = "localhost";
        Volume = "gv0";
    }
}

LOG {
    Default_Log_Level = INFO;
}

配置字段详细说明

字段示例值说明
Export_Id1导出唯一 ID,不可重复
Path/gv0NFS 导出的实际路径
Pseudo/gv0NFSv4 伪文件系统路径
Protocols3, 4支持的协议版本
Access_TypeRW访问权限:RW/RO
SquashNo_Root_Squashroot 映射策略
FSAL.NameGLUSTERFSAL 类型
FSAL.Hostnamelocalhost连接 GlusterFS 的地址
FSAL.Volumegv0GlusterFS 卷名

Squash 选项

选项说明
No_Root_Squashroot 保持 root 权限
Root_Squashroot 映射为匿名用户
All_Squash所有用户映射为匿名用户
None不映射

9.3 导出 GlusterFS 卷

在所有节点应用配置

bash
cat > /etc/ganesha/ganesha.conf <<'EOF'
EXPORT {
    Export_Id = 1;
    Path = "/gv0";
    Pseudo = "/gv0";
    Protocols = 3, 4;
    Access_Type = RW;
    Squash = No_Root_Squash;
    FSAL {
        Name = GLUSTER;
        Hostname = "localhost";
        Volume = "gv0";
    }
}

LOG {
    Default_Log_Level = INFO;
}
EOF

启动服务

bash
systemctl enable --now nfs-ganesha
systemctl status nfs-ganesha

9.4 启动与验证 NFS 导出

查看导出

bash
showmount -e localhost

预期输出:

Export list for localhost:
/gv0 *

查看 Ganesha 运行时状态

bash
# 通过 dbus 查看导出
dbus-send --system --print-reply \
  --dest=org.ganesha.nfsd /org/ganesha/nfsd/admin \
  org.ganesha.nfsd.admin.GetAllStats

测试本地挂载

bash
mkdir -p /mnt/test
mount -t nfs -o vers=4.1 localhost:/gv0 /mnt/test
touch /mnt/test/hello
cat /mnt/test/hello

9.5 NFSv3 与 NFSv4 切换配置

仅启用 NFSv4

conf
EXPORT {
    Protocols = 4;
    Transports = TCP;
    ...
}

启用 NFSv3 和 NFSv4

conf
EXPORT {
    Protocols = 3, 4;
    Transports = TCP, UDP;
    ...
}

本书推荐 NFSv4.1,因为端口单一、有状态管理更好。

9.6 多节点 Ganesha 一致性

由于 Ganesha 是无状态的(相对于 GlusterFS 数据而言),多个节点上的 Ganesha 实例独立运行,都通过 libgfapi 访问同一个 GlusterFS volume,因此天然保持一致。

需要注意:

  • 所有节点的 ganesha.conf 应保持一致
  • 修改配置后需要在所有节点重启服务
  • 可以使用配置管理工具(Ansible/Puppet/Chef)保证一致性

9.7 本章小结

  • NFS-Ganesha 通过 GLUSTER FSAL 导出 GlusterFS 卷
  • 配置文件使用 EXPORT 块定义导出
  • 所有存储节点应配置相同的 Ganesha 导出
  • NFSv4.1 是推荐协议版本
  • 多节点 Ganesha 独立运行,通过后端 GlusterFS 保持一致

练习题

  1. NFS-Ganesha 的 GLUSTER FSAL 通过什么方式访问 GlusterFS?
  2. Pseudo 字段在 NFSv4 中有什么作用?
  3. No_Root_SquashRoot_Squash 有什么区别?
  4. 修改 Ganesha 配置后,为什么需要在所有节点同步?