在服务器端我有:
CentOS 7 updated
Kernel 4.13.12-1.el7.elrepo.x86_64
nfs-utils-1.3.0-0.48.el7_4.x86_64
libnfsidmap-0.25-17.el7.x86_64
在客户端,完全相同的环境。
我们有一个 iptables,但它允许客户端和服务器之间的任何通信(任何协议的任何端口)。
大多数客户端可以正常连接并挂载导出的 NFS 共享目录,没有任何问题。他们有完全相同的环境和完全相同的 iptable 规则。
其中一些无法挂载 NFS 共享,我没有相关日志。
将有问题的客户端之一称为 CLIENT-A,如果我尝试手动挂载 NFS,则不会出现错误或警告或任何类型的日志:
[root@]# mount -vvv -t nfs MYSERVER:/home/shared/ /home/shared/
有时该命令会挂起终端,有时不会。如果我取消该命令或执行新的 ssh 并尝试在 /home 中执行 ls,终端将挂起:
[root@]# ls /home/sha
(当我按下 TAB 时,它崩溃了,没有错误)。即使我尝试手动写入并按回车键,我也会遇到同样的情况。只有重新启动服务器后才会停止崩溃。 “lsof”命令也会挂起。
并且在上述两种情况下都没有超时错误。他们永远不会完成。我已经尝试过重新启动并重试,但没有成功。我再说一遍:他们有完全相同的环境。您可以将其视为具有不同硬件和 IP 但相同软件的克隆。是的,它不能保证相同的结果,但总的来说,软件的想法是显示相同的结果。
我可以手动创建与 NFS 服务器的 tcp 连接:
[root@localhost]# telnet MYSERVER 2049
Trying MYSERVERIP...
Connected to MYSERVER.
Escape character is '^]'.
我双方都没有关于正在发生的事情的日志。我认为他们正在尝试创建与 nfs 4.1 版本(该模块的最后版本)的连接。我手动尝试过版本 3,但没有成功。
我在服务器端执行了“rpcinfo -p localhost”,发现了一个奇怪的问题:一些客户端正在使用版本 4,其中一些是 3、2 或 1(2 或 1???!!!)。
[root@ ~]# rpcinfo -p localhost
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 59356 status
100024 1 tcp 50117 status
100005 1 udp 20048 mountd
100005 1 tcp 20048 mountd
100005 2 udp 20048 mountd
100005 2 tcp 20048 mountd
100005 3 udp 20048 mountd
100005 3 tcp 20048 mountd
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049 nfs_acl
100003 3 udp 2049 nfs
100227 3 udp 2049 nfs_acl
100021 1 udp 58205 nlockmgr
100021 3 udp 58205 nlockmgr
100021 4 udp 58205 nlockmgr
100021 1 tcp 38641 nlockmgr
100021 3 tcp 38641 nlockmgr
100021 4 tcp 38641 nlockmgr
所以我找到了一个正在使用 NFSV3 的客户端,我做了:
[root@ ~]# mount -vvv -t nfs -o vers=4 MYSERVER:/home/shared/ /home/shared/
mount.nfs: timeout set for Sun Nov 12 14:03:02 2017
mount.nfs: trying text-based options 'vers=4.1,addr=MYSERVER,clientaddr=MYCLIENTIP'
它挂了。但如果我尝试 vers=3,它就会起作用。
[root@ ~]# mount -vvv -t nfs -o vers=3 MYSERVER:/home/shared/ /home/shared/
mount.nfs: timeout set for Sun Nov 12 14:03:12 2017
mount.nfs: trying text-based options 'vers=3,addr=MYSERVERIP'
mount.nfs: prog 100003, trying vers=3, prot=6
mount.nfs: trying MYSERVERIP prog 100003 vers 3 prot TCP port 2049
mount.nfs: prog 100005, trying vers=3, prot=17
mount.nfs: trying MYSERVERIP prog 100005 vers 3 prot UDP port 20048
在服务器端,目录被逐行导出到具有相同参数的不同IP:
(ro,async,all_squash)
返回 CLIENT-A 问题,我尝试在服务器端记录来自 CLIENT-A 的 tcp 和 udp 端口的每个新连接。我可以看到 CLIENT-A 尝试打开端口。并且它尝试了很多。所以我认为问题不在于客户。或许。
所以我的问题是:
- 从现在起如何排除故障?当远程挂载成功时,我只在服务器端有来自 RPC 的日志。
- 为什么 rpcinfo -p 显示有关 nfs4 的所有版本?
- 为什么(可能与(1)有关)同样配置的服务器在 nfs v4.1 中损坏,而在 3 中则不然?好的,我知道稳定性问题,但没有关于错误的日志是主要问题。
感谢您的时间 :)