Centos7
NFS 客戶端無法鎖定文件
我在本地 NFS 伺服器上執行 FreeBSD 12-RELEASE。以前它工作正常,但幾天前我們的一些需要文件鎖定的工具停止工作。鎖定確實適用於其他伺服器的 NFS 客戶端。
以下是一些我認為可能相關的資訊:
在我們的 FreeBSD 伺服器上,san6:
root@san6:~ # lsof | grep rpc.lockd lsof: WARNING: compiled for FreeBSD release 12.0-RELEASE-p5; this is 12.0-RELEASE. rpc.lockd 1063 root cwd VDIR 2,16 1024 2 / rpc.lockd 1063 root rtd VDIR 2,16 1024 2 / rpc.lockd 1063 root txt VREG 2,16 73176 31059299 /usr/sbin/rpc.lockd rpc.lockd 1063 root txt VREG 2,16 148320 12279169 /libexec/ld-elf.so.1 rpc.lockd 1063 root txt VREG 2,16 49560 31070185 /usr/lib/librpcsvc.so.5 rpc.lockd 1063 root txt VREG 2,16 1949672 46066959 /lib/libc.so.7 rpc.lockd 1063 root 0u VCHR 2,18 0t1091 530 /dev/pts/0 rpc.lockd 1063 root 1u VCHR 2,18 0t1091 530 /dev/pts/0 rpc.lockd 1063 root 2u VCHR 2,18 0t1091 530 /dev/pts/0 rpc.lockd 1063 root 3u unix 0xfffff8013dc176d0 0t0 ->0xfffff8013dec6a38 root@san6:~ # ps aux | grep lockd root 1063 0.0 0.0 48016 13692 - Ds 11:54 0:00.43 rpc.lockd -d 2 root 3102 0.0 0.0 11256 2736 1 S+ 05:53 0:00.00 grep lockd root@san6:/usr/ports # rpcinfo -p canada program vers proto port service 100000 4 tcp 111 rpcbind 100000 3 tcp 111 rpcbind 100000 2 tcp 111 rpcbind 100000 4 udp 111 rpcbind 100000 3 udp 111 rpcbind 100000 2 udp 111 rpcbind 100024 1 udp 58683 status 100024 1 tcp 36401 status 100021 1 udp 33875 nlockmgr 100021 3 udp 33875 nlockmgr 100021 4 udp 33875 nlockmgr 100021 1 tcp 33610 nlockmgr 100021 3 tcp 33610 nlockmgr 100021 4 tcp 33610 nlockmgr root@san6:~ # dmesg | tail -n 1 NLM: failed to contact remote rpcbind, stat = 5, port = 28416 root@san6:~ # mount | grep nfs data0 on /data0 (zfs, NFS exported, local, noatime, nfsv4acls)
在我們的一位客戶“加拿大”上,執行 Centos 7.6.1810:
[root@canada ~]# dmesg | tail -n 10 [ 24.205026] virbr0: port 1(virbr0-nic) entered disabled state [ 588.552140] FS-Cache: Loaded [ 588.594282] FS-Cache: Netfs 'nfs' registered for caching [ 888.710226] lockd: server san6 not responding, still trying [ 1265.871541] lockd: server san6 OK [ 1265.871551] lockd: unexpected unlock status: 7 [ 1415.519506] nfs: server san6 not responding, still trying [ 1439.592184] nfs: server san6 OK [ 2137.130503] nfs: server san6 not responding, still trying [ 2622.383586] nfs: server san6 OK [root@canada ~]# mount | grep /projects auto.direct on /projects type autofs (rw,relatime,fd=29,pgrp=15535,timeout=300,minproto=5,maxproto=5,direct,pipe_ino=87674) san6:/data0/projects on /projects type nfs (rw,nosuid,noatime,vers=3,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=10.252.48.106,mountvers=3,mountport=816,mountproto=udp,local_lock=none,addr=10.252.48.106)
請注意,lockd 處於“Ds”狀態,我不確定它正在等待來自哪個文件的磁碟 io。當我嘗試殺死/重新啟動它以及執行一段時間後,它似乎進入了這種狀態。我嘗試在打開調試標誌的情況下重新啟動伺服器(ps 日誌中的 -d2),但在 syslog 中沒有看到更多資訊。
我還嘗試將伺服器添加到我們的 Centos 7 客戶端之一的受信任區域,看看這是否有助於“NLM:無法聯繫遠端 rpcbind,stat = 5,埠 = 28416”但它似乎沒有,沒有更改該客戶端是否可以鎖定文件。
我非常感謝有關此問題的任何幫助!
更新:我已經在另一台伺服器上重現了這個問題,仍然是相同的症狀。我仍然不確定這裡發生了什麼。
我想到了。我認為將伺服器添加到防火牆中單個客戶端的受信任區域會修復客戶端。相反,事實證明所有客戶端都需要在每個客戶端的防火牆中列入白名單的伺服器 IP/埠。如果即使是一個客戶端阻塞,它似乎也會破壞每個人的鎖定。
在 CentOS 7 上,命令是
firewall-cmd --permanent --zone=trusted --add-source=<server's ip>
如果您不介意信任來自伺服器的所有埠。不要忘記重新載入防火牆的配置:
firewall-cmd --reload