在 SVM 上启用 pNFS 时,NFSv4.1 客户端读/写操作可能会挂起
适用于
- ONTAP 9
- NFS v4.1 或 NFS v4.2
- 并行 NFS(pNFS)
问题
- 当 NFS v4.1 或 NFS v4.2 客户端尝试读/写(或运行 ls、cat 或 cd 命令)到启用了 pNFS 的 NFS 导出时,操作挂起或可能会注意到延迟 同时,客户端将错误记录在:
nfs: [LIF address/hostname] server not responding- SVM 有多个 Data LIF,并非所有 LIF 都可从客户端访问
/var/log/messages: 原因
- pNFS 可以使用分配给 SVM 的任何 LIF,并且客户端可能无法访问或路由该 LIF
- 读/写操作挂起(包括 ls 命令),因为客户端无法访问数据 LIF IP。
解决方案
- 升级到实现 CONTAP-356183 的版本:pNFS 应具有选择可用接口的机制 - NetApp 知识库
- 确保客户端可以访问启用 NFS 的 SVM 的所有数据 LIF
- 这可能包括为 SVM 创建路由,请参阅 network route create
临时解决策
- 在 SVM 上禁用对 pNFS 的支持
::> nfs modify -v4.1-pnfs disabled- 或者,使用不使用 pNFS 功能的 NFSv3
追加信息
- 有关 pNFS 的详细信息,请参阅 TR-4063
- 当 NFS 客户端尝试从数据卷访问文件以进行读取或写入操作时,客户端会向指定为元数据服务器的 NetApp LIF 发出
LAYOUTGET调用,然后进行GETDEVICEINFO调用。 - 在此调用期间,元数据服务器提供有关具有卷的节点的网络路径信息。
- NFS 服务器将查找 pNFS 的可用数据 LIF,包括所有数据 LIF,无论子网、VLAN 等如何。
- 当引入此问题的不可访问数据 LIF 不是数据访问所必需的,但对于例如管理访问,LIF 可以配置为 'data-protocol none'。这将防止 LIF 被引用到客户端以进行数据访问。
注意:当客户端尝试在 SVM 上禁用 pNFS 的情况下进行读/写时,该操作正常工作,没有任何问题。
- 已在 SVM 上启用 pNFS:
::*> vserver nfs show -vserver svm -fields v4.0,v4.1,v4.1-pnfs,v4.1-implementation-domain
vserver v4.0 v4.1 v4.1-implementation-domain v4.1-pnfs
--------- ------- ------- -------------------------- ---------
svm enabled enabled naslab.local enabled
- SVM 具有来自不同网段的 LIF,并非所有 LIF 都可由客户端访问。
::*> network interface show -vserver svm
Logical Status Network Current Current Is
Vserver Interface Admin/Oper Address/Mask Node Port Home
----------- ---------- ---------- ------------------ ------------- ------- ----
svm
bad up/up 10.xx.42.yy/24 node-01 e0d true <<< This LIF is not reachable by Client
good up/up 10.xx.41.yy/24 node-02 e0d true
- 客户端使用 LIF good (10.xx.41.yy/24) 从 node-02 挂载导出。
[root@nisserver1 ~]# mount | grep -i mnt
10.xx.41.yy:/unixtest1 on /mnt type nfs4
(rw,relatime,vers=4.1,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,port=0,
timeo=600,retrans=2,sec=sys,clientaddr=10.xx.41.zz,local_lock=none,addr=10.xx.41.yy)
- NFS 导出来自节点 node-01 上的聚合
::*> volume show -vserver svm -volume unixtest1 -fields aggregate
vserver volume aggregate
--------- --------- ---------
svm unixtest1 aggr1 <<<<<<
::*> storage aggregate show -aggregate aggr1 -fields node
aggregate node
--------- ----------------------
aggr1 node-01 <<<<<<<
- 跟踪显示 ONTAP 返回从客户端无法访问的 lif IP,并且客户端没有从该 lif 获得任何响应:
130 2019-04-24 14:05:43.899496 0.000129000 0 10.1.1.46 10.1.1.209 NFS 816,2049 248 V4 Call (Reply In 131) LAYOUTGET
131 2019-04-24 14:05:43.899535 0.000039000 0 10.1.1.209 10.1.1.46 NFS 2049,816 248 V4 Reply (Call In 130) LAYOUTGET
132 2019-04-24 14:05:43.899632 0.000097000 0 10.1.1.46 10.1.1.209 NFS 816,2049 176 V4 Call (Reply In 133) GETDEVINFO
133 2019-04-24 14:05:43.899664 0.000032000 0 10.1.1.209 10.1.1.46 NFS 2049,816 152 V4 Reply (Call In 132) GETDEVINFO
Opcode: GETDEVINFO (47)
r_netid: tcp
length: 3
contents: tcp
fill bytes: opaque data
r_addr: 10.1.1.208.8.1
length: 17
contents: 10.1.1.208.8.1
内部参考
- 9.8 之后,新 vserver 的 NFS vserver 选项"v4.1-pnfs"默认为"disabled",以避免此问题(RFE 1227093) RedHat KB(需要登录)