Failover de servidor NFS do Linux dual - nfsv4leastime / nfsv4gracetime

1

primeira vez aqui postando, espero não cometer muitos erros.

Eu tenho uma configuração com 2 servidores NFS. Eles estão usando o corosync / pacemaker + drbd para oferecer o servidor nfs ativo / passivo. A distro usada é a última versão do LTS do Ubuntu.

O cluster também está oferecendo um ip flutuante para os clientes se conectarem. A replicação de volume funciona bem.

O problema é que durante o failover as operações de E / S aguardam aproximadamente 90 segundos. Após o failover (com a nova máquina já promovida como novo mestre) o tcpdump no cliente mostra pacotes como:

resposta ok 52 getattr ERRO: unk 10013

Procurando o erro 10013 e o nfs no google me levaram para este post da usenet

Então meus bloqueios são mantidos no servidor nfs e somente após 90 segundos eles são liberados. Eu preciso baixar esse parâmetro (contido em / proc), mas quando eu tento

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:/#

Então, preciso de mais informações sobre esse problema ou uma maneira de escrever nesse arquivo. Os arquivos são criados em tempo de execução com o nfs-server. Se eu parar o nfsserver eles diretório está simplesmente vazio, e eu não posso escrever para ele.

root@nfs-ha-1:/proc/fs/nfsd# touch nfsv4gracetime
touch: cannot touch 'nfsv4gracetime': No such file or directory
    
por Andrea 31.01.2013 / 11:14

1 resposta

0

Eu quero fazer este acompanhamento para explicar qual foi o problema e como resolvê-lo. Os parâmetros podem ser modificados apenas em determinados momentos.

Se você tentar escrever em / proc / fs / nfsd com o nfs-kernel parado (módulo descarregado) o arquivo simplesmente não existirá. Se você tentar depois de lançar o nfs-kernel, receberá o erro de ocupado no dispositivo.

A solução é editar o script de inicialização do nfs-kernel-server e modificar os parâmetros (através do eco usual nos arquivos necessários) após o modprobe do módulo.

Então você precisa escrever os parâmetros entre a diretiva do_modprobe e do_mount.

Amostra do /etc/init.d/nfs-kernel-server do 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
    
por 12.02.2014 / 14:35