Compreender o bloqueio de ficheiros e os tipos de bloqueio nos Ficheiros NetApp do Azure

Em ambientes NAS, vários clientes acessam arquivos no mesmo volume. O volume NAS não reconhece aplicativos, portanto, para proteger os dados contra possíveis danos 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 arquivos dependem da versão do NFS que está sendo usada.

Tipos de bloqueio

Existem 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ó podem ser emitidos se não houver bloqueios exclusivos em um arquivo. Esses bloqueios destinam-se a trabalho somente leitura, mas podem ser usados para gravações (como com um banco de dados).

Fechaduras exclusivas: As fechaduras exclusivas funcionam da mesma forma que as fechaduras exclusivas em CIFS/SMB: apenas um processo pode usar o arquivo quando há uma fechadura exclusiva. Se qualquer outro processo tiver 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 estão habilitadas e o cliente suporta delegações NFSv4.x. As delegações fornecem uma maneira de armazenar em cache as operações no lado do cliente, criando um bloqueio "suave" para o arquivo que está 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 são semelhantes aos bloqueios oportunistas SMB. Atualmente, os Arquivos NetApp do Azure não oferecem 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 NFS que está sendo usada. Certifique-se de testar o bloqueio em seu ambiente para avaliar o comportamento esperado.

Bloqueio NFSv3

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

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 é reinicializado, o servidor deve liberar os bloqueios. Quando um servidor é reinicializado, o cliente lembra o servidor dos bloqueios que ele manteve

Nota

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 são deixados no servidor e devem ser limpos manualmente. Para obter mais informações sobre essa tarefa, consulte solucionar problemas de bloqueios de arquivos.

Bloqueio NFSv4.x

O NFSv4.x usa um modelo de bloqueio baseado em concessão integrado ao protocolo NFS. Isto significa que não existem serviços auxiliares com os quais manter ou preocupar-se; todo o bloqueio é encapsulado na comunicação NFSv4.x.

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

Isso significa que o cliente pode renovar sua concessão explícita ou implicitamente executando uma operação, como a leitura de 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 seu estado de bloqueio durante uma recuperação de servidor.

Termo Definição
Arrendamento O período de tempo no qual os Arquivos NetApp do Azure concedem irrevogavelmente um bloqueio a um cliente.
Período de tolerância O período de tempo no qual os clientes tentam recuperar seu 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 pelos Arquivos NetApp do Azure mediante solicitação do cliente em uma base de concessão. O servidor 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 ter sido reiniciado. Se o servidor de Arquivos NetApp do Azure for reinicializado, ao reinicializá-lo não emitirá novos bloqueios para os clientes por um período de carência de 45 segundos. Após esse período, os bloqueios podem ser emitidos para os clientes solicitantes. Se o bloqueio não puder ser restabelecido durante o período de carência especificado, o bloqueio expirará por conta própria. Esse comportamento difere do bloqueio NFSv3, pois não haverá bloqueios obsoletos que precisem ser quebrados manualmente.

Estabelecendo bloqueios manualmente em um cliente

Para testar bloqueios NFS, o cliente deve dizer ao servidor NFS para estabelecer um bloqueio. No entanto, nem todos os aplicativos usam bloqueios. Por exemplo, o aplicativo "vi" não bloqueará um arquivo. Ele cria um arquivo de permuta oculto, usando uma convenção de nomenclatura de pontos, 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, existem utilitários para estabelecer bloqueios manualmente. Por exemplo, o flock pode bloquear arquivos.

Para estabelecer um bloqueio em um arquivo, primeiro execute exec para atribuir uma ID numérica.

# exec 4<>v4user_file

Use 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 ficheiro.

# flock -u -n 4

O bloqueio manual de arquivos permite que você teste, abra e edite interações de arquivos e teste a funcionalidade de quebra de bloqueio nos Arquivos NetApp do Azure.

Próximos passos