Назад | Перейти на главную страницу

Клиенты NFS не могут заблокировать файлы

Я запускаю 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