跳转至

NFS

项目 内容
部署位置 cls1-gatewaycls2-srv5
依赖 服务器设置DNS、本地磁盘或 ZFS、可选的 DOCA/RDMA
使用方 登录环境、计算节点

搭建

安装软件包

1
2
3
sudo apt-get update
sudo apt-get install nfs-kernel-server
dpkg-query -W nfs-kernel-server
1
2
3
sudo apt-get update
sudo apt-get install nfs-common
dpkg-query -W nfs-common

配置服务端

cls1-gateway 导出集群目录。root_squash 将客户端的 root 映射为匿名用户:

写入 /etc/exports 前确认目录位于预期的本地文件系统:

findmnt -T /data/cls1-pool-gw/cluster
findmnt -T /data/cls2-pool1
findmnt -T /data/cls2-pool2
cls1-gateway:/etc/exports
/data/cls1-pool-gw/cluster 192.168.48.0/24(rw,sync,no_subtree_check,root_squash,insecure) 192.168.51.0/24(rw,sync,no_subtree_check,root_squash,insecure) 192.168.49.0/24(rw,sync,no_subtree_check,root_squash,insecure) 100.64.0.0/10(rw,sync,no_subtree_check,root_squash,insecure)

cls2-srv5 向计算节点和 Headscale 网络导出 /data/cls2-pool1/data/cls2-pool2

1
2
3
4
5
sudo systemctl enable --now nfs-server
sudo exportfs -rav
systemctl is-active nfs-server
sudo exportfs -v
rpcinfo -p localhost

配置 NFSoRDMA

当前两台 NFS 服务端只监听 TCP。启用 NFSoRDMA 时,服务端加载 svcrdma,并在 /etc/nfs.conf 中打开 RDMA 监听:

/etc/nfs.conf
1
2
3
[nfsd]
rdma=y
rdma-port=20049
1
2
3
4
5
echo svcrdma | sudo tee /etc/modules-load.d/nfs-rdma-server.conf
sudo modprobe svcrdma
sudo systemctl restart nfs-server
grep '^svcrdma ' /proc/modules
grep -F 'rdma 20049' /proc/fs/nfsd/portlist

客户端加载 xprtrdma,并使用服务端的 RDMA 网络地址挂载:

1
2
3
4
5
6
7
echo xprtrdma | sudo tee /etc/modules-load.d/nfs-rdma-client.conf
sudo modprobe xprtrdma
grep '^xprtrdma ' /proc/modules
sudo mount -t nfs4 -o proto=rdma,port=20049 \
  NFS_RDMA_SERVER:/data/EXPORT /mnt
findmnt -M /mnt -o TARGET,SOURCE,FSTYPE,OPTIONS
grep -F 'proto=rdma' /proc/mounts

需要在启动时挂载时,将相同参数写入 /etc/fstab

/etc/fstab
NFS_RDMA_SERVER:/data/EXPORT /mnt nfs4 rw,nofail,_netdev,hard,proto=rdma,port=20049,timeo=600,retrans=2 0 0

配置客户端

cls2 数据盘客户端示例:

1
2
3
sudo install -d -o root -g root -m 0755 \
  /data/cls2-pool1 /data/cls2-pool2
stat -c '%a %U:%G %n' /data/cls2-pool1 /data/cls2-pool2
/etc/fstab
cls2-srv5:/data/cls2-pool1 /data/cls2-pool1 nfs4 rw,nofail,_netdev,hard,timeo=600,retrans=2 0 0
cls2-srv5:/data/cls2-pool2 /data/cls2-pool2 nfs4 rw,nofail,_netdev,hard,timeo=600,retrans=2 0 0

挂载后检查来源、文件系统类型和容量:

1
2
3
4
sudo mount -a
findmnt -M /data/cls2-pool1
findmnt -M /data/cls2-pool2
df -hT /data/cls2-pool1 /data/cls2-pool2

维护

导出或挂载状态异常

1
2
3
4
exportfs -v
nfsstat -s
findmnt -t nfs,nfs4
df -hT

修改导出前检查客户端和底层文件系统。更新 exports 文件后运行 exportfs -rav

客户端挂载失败

检查 DNS、路由、exports 客户端网段和端口。

I/O 卡住

检查服务器磁盘、网络、NFS 线程和客户端 hard 挂载状态。

文件权限错误

比较服务端和客户端的 UID/GID。

容量不足

确认数据用途和保留时间。

数据被删除

NFS 不提供备份。数据恢复能力取决于底层存储和备份。

评论