4.10. 在 NFS 服务器中启用 RDMA 的 NFS

远程直接内存访问(RDMA)是一种协议,它允许客户端系统将数据直接从存储服务器的内存传输到其自身的内存。这提高了存储吞吐量,降低服务器和客户端之间的数据传输延迟,并减少两端的 CPU 负载。如果 NFS 服务器和客户端都通过 RDMA 连接,客户端可以使用 NFSoRDMA 来挂载导出的目录。

先决条件

  • NFS 服务正在运行并配置了
  • 在服务器中安装 InfiniBand 或 RDMA over Converged Ethernet (RoCE)设备。
  • IP over InfiniBand (IPoIB)在服务器上被配置,InfiniBand 设备分配了一个 IP 地址。

流程

  1. 安装 rdma-core 软件包:

    # dnf install rdma-core
  2. 如果已经安装了软件包,请验证 /etc/rdma/modules/rdma.conf 文件中的 xprtrdmasvcrdma 模块是否已取消注释:

    # NFS over RDMA client support
    xprtrdma
    # NFS over RDMA server support
    svcrdma
  3. 可选。默认情况下,RDMA 上的 NFS 使用端口 20049。如果要使用其他端口,请在 /etc/nfs.conf 文件的 [nfsd] 部分中设置 rdma-port 设置:

    rdma-port=<port>
  4. firewalld 中打开 NFSoRDMA 端口:

    # firewall-cmd --permanent --add-port={20049/tcp,20049/udp}
    # firewall-cmd --reload

    如果您设置了与 20049 不同的端口,请调整端口号。

  5. 重启 nfs-server 服务:

    # systemctl restart nfs-server

验证

  1. 在带有 InfiniBand 硬件的客户端中执行以下步骤:

    1. 安装以下软件包:

      # dnf install nfs-utils rdma-core
    2. 通过 RDMA 挂载导出的 NFS 共享:

      # mount -o rdma server.example.com:/nfs/projects/ /mnt/

      如果您设置了默认端口号(20049),请将 port = <port_number> 传给命令:

      # mount -o rdma,port=<port_number> server.example.com:/nfs/projects/ /mnt/
    3. 验证共享是否已使用 rdma 选项挂载:

      # mount | grep "/mnt"
      server.example.com:/nfs/projects/ on /mnt type nfs (...,proto=rdma,...)