первый раз здесь, я надеюсь, что не сделаю много ошибок.
У меня установка с 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