Como alterar configurações de Filesystems exportados via NFS sem reiniciar o serviço

Nesse post vou mostrar como você pode alterar as configurações de um filesystem exportado via NFS, adicionar novos filesystems para exportar, ou removê-los sem ter que reiniciar o serviço do NFS.

Como os caros colegas já devem estar cansados de saber, para exportar filesystems via NFS (vulgo compartilhar diretórios), deve-se criar entradas no arquivo /etc/exports. Cada filesystem exportado deve ser colocado em uma nova linha do arquivo juntamente com as configurações de exportação. Algo como o exemplo abaixo.

[root@linuxserver01 ~]# cat /etc/exports
/bkp/dumps 192.168.0.21(rw,no_root_squash)
/isoimagem *(ro,no_root_squash)
/publico *(rw,no_root_squash)

A questão é que não basta alterar esse arquivo para que as alterações entrem em vigor.
De uma forma geral o processo do NFS Server lê as configurações desse arquivo apenas quando ele é iniciado.
Dessa forma vejo vários colegas reiniciando o serviço NFS para que as alterações sejam efetivadas. O problema disso é que se a alteração ocorrer em servidores de produção esse tipo de ação pode requerer uma janela de manutenção, abertura de uma GMUD, reunião do CAB, e toda a burocracia e demora que estamos acostumados.

A boa notícia é que nem tudo está perdido! 😉
Você pode aplicar as alterações efetuadas no /etc/exports sem reiniciar o NFS Server. Para isso basta usar o comando exportfs!

[root@linuxserver01 ~]# exportfs -r

O parâmetro “-r” informa que você deseja “reexportar” os filesystems listados no arquivo /etc/exports.

Caso você execute o exportfs sem passar nenhum parâmetro, ele listara os filesystems atualmente exportados. Você pode usar o parâmetro “-v” (verbose) para exibir informações mais detalhadas das exportações.

Criar ASM Diskgroups dentro de volumes NFS

Neste artigo vou abordar a utilização de arquivos em volumes NFS como discos ASM.
A ideia dessa configuração surgiu da minha necessidade de montar um ambiente de laboratório com Oracle 12c em RAC usando o Hyper-V do meu notebook.
Como o Hyper-V não suporta (até o momento em que este post foi criado, em 2016) o compartilhamento de discos entre VMs quando usados apenas discos locais, foi necessário buscar um método alternativo para criar o ambiente. Dessa forma, além das duas máquinas virtuais para os hosts do RAC, criei mais uma para ser o servidor NFS.

Nota: Apesar da utilização de arquivos em volumes NFS como discos ASM ser uma configuração suportada pela Oracle, ela deve ser utilizada com muita cautela, principalmente se pretende usá-la em produção. A utilização de volumes NFS requer a montagem no modo “hard”, o que faz com que a instância ASM ou o Database esperem indefinidamente por uma resposta do servidor NFS quando este ficar indisponível. Isso significa que o ASM não poderá fornecer de forma efetiva o espelhamento de dados.
De uma forma geral, para usar essa configuração os Diskgroups devem ser configurados com redundância “External” e a comunicação com os volumes NFS deve ser confiável.
Ref.:  How To Create ASM Diskgroups using NFS/NAS Files? (Doc ID 731775.1)

Configurando o servidor NFS (O Storage)

No ambiente de laboratório que estou montando o SO usado é o Oracle Linux 7, portanto todos os comandos aqui são relativos a essa versão, que trouxe varias novidades em relação ao Oracle Linux 6, principalmente a adição do systemd como mecanismo de controle e gerenciamento de serviços, devices, sockets e pontos de montagem.

Primeiramente instale o servidor NFS.

[root@ol7nfs01 ~]# yum install nfs-utils

Crie o diretório onde serão colocados os arquivos que serão usados como discos pelo ASM

[root@ol7nfs01 ~]# mkdir /nfs

Edite o arquivo /etc/exports para configurar a publicação do diretório pelo servidor NFS. Tenha atenção aos parâmetros usados e somente altere-os se souber o que está fazendo. Nesse laboratório o diretório que estou exportando é o “/nfs”.

[root@ol7nfs01 ~]# cat /etc/exports
/nfs    *(rw,sync,no_wdelay,insecure_locks,no_root_squash)

Inicie e ative o serviço do NFS, para que o mesmo inicie sempre que o servidor reiniciar.

[root@ol7nfs01 ~]# systemctl start nfs-server
[root@ol7nfs01 ~]# systemctl enable nfs-server

Configurando o cliente NFS (O Database Server)

A primeira atividade nos servidores de banco que montarão o diretório NFS é criar a pasta que servirá de ponto de montagem.

[root@ol7db01 ~]# mkdir -p /u01/oradata

Em seguida edite o arquivo /etc/fstab para que o volume NFS seja montado sempre que o servidor for reiniciado. Adicione a seguinte linha ao fstab, sendo que “ol7nfs01” é o nome do servidor NFS. Novamente atenção aos parâmetros e somente altere-os se souber o que está fazendo.

ol7nfs01:/nfs    /u01/oradata    nfs     rw,bg,hard,nointr,tcp,vers=3,timeo=600,rsize=32768,wsize=32768,actimeo=0  0 0

Agora você pode montar o volume NFS

[root@ol7db01 ~]# mount -a

Em seguida configure o “ownership” e as permissões do diretório. Estou assumindo que o usuário oracle e o grupo oinstall já estão criados.

[root@ol7db01 ~]# chown -R oracle:oinstall /u01/oradata
[root@ol7db01 ~]# chmod -R 775 /u01/oradata

O próximo passo é criar os arquivos que serão usados como discos para o ASM. Vou criar alguns arquivos de 10 GB para usar nos diskgroups DATA e RECO. Como no meu laboratório vou instalar o Grid Infrastructure sob o usuário grid, usarei ele para criar os arquivos.

[grid@ol7db01 ~]$ mkdir /u01/oradata/asm
[grid@ol7db01 ~]$ dd if=/dev/zero of=/u01/oradata/asm/data01.disk bs=1k count=10000000
[grid@ol7db01 ~]$ dd if=/dev/zero of=/u01/oradata/asm/data02.disk bs=1k count=10000000
[grid@ol7db01 ~]$ dd if=/dev/zero of=/u01/oradata/asm/data03.disk bs=1k count=10000000
[grid@ol7db01 ~]$ dd if=/dev/zero of=/u01/oradata/asm/data04.disk bs=1k count=10000000
[grid@ol7db01 ~]$ dd if=/dev/zero of=/u01/oradata/asm/data05.disk bs=1k count=10000000
[grid@ol7db01 ~]$ dd if=/dev/zero of=/u01/oradata/asm/reco01.disk bs=1k count=10000000
[grid@ol7db01 ~]$ dd if=/dev/zero of=/u01/oradata/asm/reco02.disk bs=1k count=10000000

Devemos ajustar novamente as permissões no diretório e arquivos criados.

[grid@ol7db01 ~]$ chmod 775 /u01/oradata/asm
[grid@ol7db01 ~]$ chmod 664 /u01/oradata/asm/*

Agora o ambiente já está preparado e podemos iniciar a instalação do Grid Infrastructure. Na tela de criação do diskgroup do ASM inicialmente não vão aparecer os discos candidatos. Basta clicar em “Change Discovery Path” e indicar o diretório NFS onde foram criados os arquivos.

Na tela para alterar o caminho de descoberta dos discos, digite o caminho com o asterisco como caractere coringa.

Quando retornar à tela de seleção de discos, os arquivos aparecerão listados.

Deste ponto em diante o processo é exatamente igual à qualquer instalação do Grid Infrastructure.