我正在为带有 RHEL6.5 和 RHEL7 主机的 RHEL6.5 客户端(所有虚拟机)开发 NFS 解决方案。目前,RHEL7主机与RHEL6.5客户端工作正常。问题出在RHEL6.5主机上。
这些问题可能是由于我无法控制的服务器的某些方面造成的,因为服务器最近出现了去年没有的问题。如果您认为这就是问题所在,请建议我向我的上级证明这一点的方法,并开始购买新机器的过程。
该解决方案最初是为了使用 NFSv4 而设计的,该解决方案进展顺利。然而,RHEL6.5主机并不像RHEL7主机那么热衷。挂载成功,但文件访问不起作用,例如cp
,less
.在终端中,它们挂起。tail
- 观看客户的/var/log/messages
节目state manager: lease expired failed on NFSv4 server nfs_master with error 10018
。根据标准,该错误代码适用于NFS4ERR_RESOURCE
,已记录这里。我尝试解决资源问题是nfsd
通过命令行增加进程数量,并在/etc/sysconfig/nfs
.这没有帮助。如果导出的目录安装在 NFS 服务器本身上,也会出现此问题。
主机或客户端的日志中未显示的是另一个错误10022
,或者至少我假设这是一个 NFSv4 错误代码。仅当tcpdump
NFS 通信所经过的接口时才可见:IP test-host.nfs > test_client-1.3297002672: reply ok 52 getattr ERROR: unk 10022
如果此错误代码确实是 NFSv4 错误代码,则将其NFS4ERR_STALE_CLIENTID
记录在案这里。
当mount
命令更改为 set时nfsvers=3
,类似的操作cp
会成功,并且不会在客户端或主机上生成任何错误。第一次尝试会花一点时间,也许 5 秒,然后以后的动作会快得多。
一次最多有四个客户端安装导出并从中读取,并且可能有相同的文件。
所以,我的问题是:
- 描述中引用了哪些服务器端资源
NFS4ERR_RESOURCE
? - 我如何解决
NFS4ERR_RESOURCE
和NFS4ERR_STALE_CLIENTID
错误? - 为什么 NFSv3 可以按预期运行,但 NFSv4 却不能?
nfs-utils
版本和发行版(适用于客户端和 RHEL6.5 主机):1.2.3.39.el6
mount
命令:
mount -n -t nfs -o ro,noexec,timeo=10,retrans=3,retry=0,soft,rsize=32768,intr,noatime
mount -n -t nfs -o nfsvers=3,ro,noexec,timeo=10,retrans=3,retry=0,soft,rsize=32768,intr,noatime
编辑:我们对此问题的解决方案是退回到 NFSv3 协议。一切都很好。我不会用“退回到 NFSv3”来回答这个问题,但这个问题可能太小众,无法找到答案。
答案1
既然您说您无法控制有问题的 RHEL 6.5:您是否检查过 NFS 域是否匹配? NFSv3 没有这样的东西,但在 NFSv4 中你需要它(否则挂载仍然可以工作,但文件访问会表现得很奇怪,就像你所描述的那样)。
您在 /etc/idmapd.conf 中配置 NFS 域,可能值得一看。
答案2
尝试-fstype=nfs4,rw,intr,hard,proto=tcp,port=2049,acl
进行测试并确保 2049/tcp 对服务器上的客户端开放。如果中间有防火墙,也需要通过 2049/tcp。