서버 측에는 다음이 있습니다.
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을 누르면 오류 없이 충돌이 발생합니다.) 수동으로 작성하고 Enter를 눌러도 같은 상황이 발생합니다. 충돌은 서버를 다시 시작한 후에만 중지됩니다. "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에서는 중단되지 않는 이유는 무엇입니까? 좋아요, 안정성 문제는 알고 있지만 오류에 대한 로그가 없는 것이 가장 큰 문제입니다.
시간 내 주셔서 감사합니다:)