Compartilhar via


Entender o bloqueio de arquivos e os tipos de bloqueio no Azure NetApp Files

Em ambientes NAS, vários clientes acessam arquivos no mesmo volume. O volume NAS não está ciente do aplicativo, portanto, para proteger dados contra possível corrupção quando mais de um cliente tenta gravar no mesmo arquivo ao mesmo tempo, os aplicativos enviam solicitações de bloqueio para o servidor NAS para impedir que outros clientes façam alterações enquanto o arquivo está em uso. Com o NFS, os mecanismos de bloqueio de arquivo dependem da versão do NFS que está sendo usada.

Tipos de bloqueio

Há vários tipos de bloqueios NFS, que incluem:

Bloqueios compartilhados: os bloqueios compartilhados podem ser usados por vários processos ao mesmo tempo e só poderão ser emitidos se não houver bloqueios exclusivos em um arquivo. Esses bloqueios são destinados a trabalho somente leitura, mas podem ser usados para gravações (como com um banco de dados).

Bloqueios exclusivos: os bloqueios exclusivos operam da mesma forma que os bloqueios exclusivos no SMB: somente um processo pode usar o arquivo quando houver um bloqueio exclusivo. Se outros processos tiverem bloqueado o arquivo, um bloqueio exclusivo não poderá ser emitido, a menos que esse processo tenha sido bifurcado.

Delegações: as delegações são usadas somente com NFSv4.x e são atribuídas quando as opções do servidor NFS se encontram habilitadas e o cliente dá suporte a delegações NFSv4.x. As delegações fornecem uma maneira de armazenar em cache as operações no lado do cliente criando um bloqueio "reversível" para o arquivo sendo usado por um cliente. Isso melhora o desempenho de cargas de trabalho específicas, reduzindo o número de chamadas entre o cliente e o servidor, e é semelhante a bloqueios oportunistas de SMB. Atualmente, o Azure NetApp Files não dá suporte a delegações NFSv4.x.

Bloqueios de intervalo de bytes: em vez de bloquear um arquivo inteiro, os bloqueios de intervalo de bytes bloqueiam apenas uma parte de um arquivo.

O comportamento de bloqueio depende do tipo de bloqueio, da versão do sistema operacional cliente e da versão do NFS que está sendo usada. Certifique-se de testar o bloqueio em seu ambiente para medir o comportamento esperado.

Bloqueio NFSv3

O NFSv3 usa protocolos auxiliares como o Network Lock Manager (NLM) e o Network Status Monitor (NSM) para coordenar bloqueios de arquivos entre o cliente NFS e o servidor. Esses protocolos auxiliares estão definidos no RFC-1813, ao qual o Azure NetApp Files adere.

O NLM ajuda a estabelecer e liberar bloqueios, enquanto o NSM notifica os pares sobre reinicializações do servidor. Com o bloqueio NFSv3, quando um cliente reinicializa, o servidor deve liberar os bloqueios. Quando um servidor é reinicializado, o cliente lembra o servidor sobre os bloqueios que estavam em vigor

Observação

Em alguns casos, os mecanismos de bloqueio NFS não se comunicam corretamente (como no caso de uma interrupção de rede) e os bloqueios obsoletos sobram no servidor e devem ser limpos manualmente. Para obter mais informações sobre essa tarefa, confira solucionar problemas de bloqueios de arquivo.

Bloqueio NFSv4.x

O NFSv4.x usa um modelo de bloqueio baseado em concessão integrado ao protocolo NFS. Isso significa que não há serviços auxiliares para manter ou se preocupar; todo o bloqueio é encapsulado na comunicação NFSv4.x.

O Azure NetApp Files dá suporte ao mecanismo de bloqueio de arquivos NFSv4.x, mantendo o estado de todos os bloqueios de arquivo em um modelo baseado em concessão. De acordo com o RFC 8881, o Azure NetApp Files "definirá um único período de concessão para todo o estado mantido por um cliente NFS. Se o cliente não renovar a sua concessão dentro do período definido, todo o estado associado à concessão do cliente poderá ser liberado pelo servidor."

Isso significa que o cliente pode renovar a sua concessão explicitamente, ou implicitamente executando uma operação, como ler um arquivo. Além disso, o Azure NetApp Files define um período de carência, que é um período de processamento especial no qual os clientes tentam recuperar o estado de bloqueio durante uma recuperação de servidor.

Termo Definição
Concessão O período em que o Azure NetApp Files concede irrevogavelmente um bloqueio a um cliente.
Período de Cortesia O período em que os clientes tentam recuperar o estado de bloqueio durante a recuperação do servidor no caso de uma interrupção do servidor.

Como o Azure NetApp Files lida com bloqueios NFSv4.x

Os bloqueios são emitidos pelo Azure NetApp Files mediante solicitação de cliente em uma base de concessão. O servidor do Azure NetApp Files verifica a concessão em cada cliente a cada 30 segundos em busca de alterações. No caso de uma reinicialização do cliente, o cliente pode recuperar todos os bloqueios válidos do servidor depois de reiniciado. Se o servidor do Azure NetApp Files for reinicializado, ao reiniciar, ele não emitirá novos bloqueios para os clientes por um período de carência de 45 segundos. Após esse tempo, será possível emitir bloqueios para os clientes solicitantes. Se o bloqueio não puder ser restabelecido durante o período de carência especificado, ele expirará por conta própria. Este comportamento difere do bloqueio NFSv3, pois não haverá bloqueios obsoletos que precisam ser interrompidos manualmente.

Estabelecer bloqueios manualmente em um cliente

Para testar bloqueios NFS, o cliente deve informar o servidor NFS para estabelecer um bloqueio. No entanto, nem todos os aplicativos usam bloqueios. Por exemplo, o aplicativo "vi" não bloqueia arquivos. Ele cria um arquivo de permuta oculto, usando uma convenção de nomenclatura de ponto, na mesma pasta e, em seguida, confirma gravações nesse arquivo quando o aplicativo é fechado. Em seguida, o arquivo antigo é excluído e o arquivo de permuta é renomeado para o nome do arquivo.

No entanto, há utilitários para estabelecer bloqueios manualmente. Por exemplo, o flock pode bloquear arquivos.

Para estabelecer um bloqueio em um arquivo, primeiro execute o executável para atribuir uma ID numérica.

# exec 4<>v4user_file

Use o flock para criar um bloqueio compartilhado ou exclusivo no arquivo.

# flock

Usage:
 flock [options] <file|directory> <command> [command args]
 flock [options] <file|directory> -c <command>
 flock [options] <file descriptor number>

Options:
 -s  --shared             get a shared lock
 -x  --exclusive          get an exclusive lock (default)
 -u  --unlock             remove a lock
 -n  --nonblock           fail rather than wait
 -w  --timeout <secs>     wait for a limited amount of time
 -E  --conflict-exit-code <number>  exit code after conflict or timeout
 -o  --close              close file descriptor before running command
 -c  --command <command>  run a single command string through the shell

 -h, --help     display this help and exit
 -V, --version  output version information and exit

# flock -n 4

Para desbloquear o arquivo.

# flock -u -n 4

O bloqueio manual de arquivos permite que você teste o arquivo aberto, edite interações e teste a funcionalidade de interrupção de bloqueio no Azure NetApp Files.

Próximas etapas