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

Двойной отказоустойчивый сервер Linux NFS - nfsv4leastime / nfsv4gracetime

первый раз здесь, я надеюсь, что не сделаю много ошибок.

У меня установка с 2 серверами NFS. Они используют corosync / pacemaker + drbd, чтобы предложить активный / пассивный сервер nfs. Используемый дистрибутив - последняя версия LTS Ubuntu.

Cluster также предлагает клиентам плавающий IP-адрес для подключения. Репликация тома работает нормально.

Проблема в том, что во время аварийного переключения операции ввода-вывода ждут около 90 секунд. После аварийного переключения (когда новый компьютер уже продвинут как новый главный) tcpdump на клиенте показывает такие пакеты, как:

ответить ok 52 getattr ОШИБКА: unk 10013

Поиск ошибки 10013 и nfs в Google привел меня к это сообщение usenet

Таким образом, мои блокировки сохраняются на сервере nfs и освобождаются только через 90 секунд. Мне нужно уменьшить этот параметр (содержащийся в / proc), но когда я пытаюсь

root@nfs-ha-1:/# ls -l /proc/fs/nfsd/nfsv4gracetime
-rw------- 1 root root 0 Jan 31 11:00 /proc/fs/nfsd/nfsv4gracetime
root@nfs-ha-1:/# cat /proc/fs/nfsd/nfsv4gracetime
90
root@nfs-ha-1:/# echo 1 > /proc/fs/nfsd/nfsv4gracetime
bash: echo: write error: Device or resource busy
root@nfs-ha-1:/#

Так что мне нужна дополнительная информация об этой проблеме или способ записи в этот файл. Файлы создаются во время выполнения с помощью nfs-server. Если я остановлю nfsserver, их каталог будет просто пустым, и я не смогу писать в него.

root@nfs-ha-1:/proc/fs/nfsd# touch nfsv4gracetime
touch: cannot touch `nfsv4gracetime': No such file or directory

Я хочу сделать это продолжение, чтобы объяснить, в чем была проблема и как ее решить. Параметры можно изменять только в определенные моменты.

Если вы попытаетесь записать в / proc / fs / nfsd с остановленным nfs-ядром (модуль выгружен), файл просто не существует. Если вы попробуете после запуска nfs-kernel, вы получите ошибку «Устройство занято».

Решение состоит в том, чтобы отредактировать сценарий инициализации для nfs-kernel-server и изменить параметры (через обычное эхо для необходимых файлов) после modprobe модуля.

Итак, вам нужно написать параметры между директивы do_modprobe и do_mount.

Образец с /etc/init.d/nfs-kernel-server Ubuntu 12.04 LTS

# See how we were called.
case "$1" in
  start)
        if [ -f /etc/exports ]
        then
                do_modprobe nfsd
                echo 15 > /proc/fs/nfsd/nfsv4leasetime
                echo 25 > /proc/fs/nfsd/nfsv4gracetime

                # See if our running kernel supports the NFS kernel server
                if ! grep -E -qs "[[:space:]]nfsd\$" /proc/filesystems; then
                        log_warning_msg "Not starting $DESC: no support in current kernel."
                        exit 0
                fi
                do_mount nfsd $PROCNFSD_MOUNTPOINT || NEED_SVCGSSD=no