Я запускаю FreeBSD 12-RELEASE на нашем локальном сервере NFS. Раньше он работал нормально, но несколько дней назад некоторые из наших инструментов, требующих блокировки файлов, перестали работать. Блокировка работает на наших клиентах 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)
И на одном из наших клиентов, "canada", под управлением 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. Кажется, что он входит в это состояние, когда я пытаюсь убить / перезапустить его, а также после некоторого времени работы. Я попытался перезапустить сервер с включенными флагами отладки (-d2 в журнале ps), но не увидел дополнительной информации в системном журнале.
Я также попытался добавить сервер в доверенную зону одного из наших клиентов Centos 7, чтобы узнать, помогло ли это «NLM: не удалось связаться с удаленным rpcbind, stat = 5, port = 28416», но это не похоже, нет изменить, может ли этот клиент блокировать файлы или нет.
Я очень ценю любую помощь в этом вопросе!
ОБНОВЛЕНИЕ: я воспроизвел проблему на другом сервере, все те же симптомы. Я до сих пор не понимаю, что здесь происходит.
Я понял. Я думал, что добавление сервера к единственной доверенной зоне клиента в брандмауэре исправит клиента. Вместо этого оказывается, что все, что нужно клиенту, - это IP / порты сервера, внесенные в белый список брандмауэра каждого клиента. Если хотя бы один клиент блокирует, это, похоже, портит блокировку для всех.
В CentOS 7 команда
firewall-cmd --permanent --zone=trusted --add-source=<server's ip>
если вы не против доверять всем портам с сервера. Не забудьте перезагрузить конфигурацию межсетевого экрана:
firewall-cmd --reload