Descripción de los tipos de bloqueo y bloqueo de archivos en Azure NetApp Files
En entornos NAS, varios clientes acceden a archivos en el mismo volumen. El volumen NAS no es compatible con la aplicación, por lo que proteger los datos contra posibles daños cuando más de un cliente intenta escribir en el mismo archivo al mismo tiempo, las aplicaciones envían solicitudes de bloqueo al servidor NAS para evitar que otros clientes realicen cambios mientras el archivo está en uso. Con NFS, los mecanismos de bloqueo de archivos dependen de la versión NFS que se usa.
Tipos de bloqueo
Hay varios tipos de bloqueos NFS, entre los que se incluyen:
Bloqueos compartidos: Los bloqueos compartidos se pueden usar en varios procesos al mismo tiempo y solo se pueden emitir si no hay bloqueos exclusivos en un archivo. Estos bloqueos están diseñados para el trabajo de solo lectura, pero se pueden usar para escrituras (como con una base de datos).
Bloqueos exclusivos: Bloqueos exclusivos funcionan igual que los bloqueos exclusivos en SMB: solo un proceso puede usar el archivo cuando hay un bloqueo exclusivo. Si otros procesos han bloqueado el archivo, no se puede emitir un bloqueo exclusivo a menos que ese proceso se bifurque.
Delegaciones: Las delegaciones solo se usan con NFSv4.x y se asignan cuando las opciones del servidor NFS están habilitadas y el cliente admite delegaciones NFSv4.x. Las delegaciones proporcionan una manera de almacenar en caché las operaciones en el lado cliente mediante la creación de un “bloqueo temporal” en el archivo que usa un cliente. Esto mejora el rendimiento de cargas de trabajo específicas al reducir el número de llamadas entre el cliente y el servidor y son similares a los bloqueos oportunistas de SMB. Actualmente, Azure NetApp Files no admite delegaciones NFSv4.x.
Bloqueos de intervalo de bytes: En lugar de bloquear un archivo completo, los bloqueos de intervalo de bytes solo bloquean una parte de un archivo.
El comportamiento de bloqueo depende del tipo de bloqueo, la versión del sistema operativo cliente y la versión NFS que se usa. Asegúrese de probar el bloqueo en su entorno para medir el comportamiento esperado.
Bloqueo de NFSv3
NFSv3 usa protocolos auxiliares como Network Lock Manager (NLM) y Network Status Monitor (NSM) para coordinar bloqueos de archivos entre el cliente y el servidor NFS. Estos protocolos auxiliares se definen en RFC-1813, al que se adhiere Azure NetApp Files.
NLM ayuda a establecer y liberar bloqueos, mientras que NSM notifica a los sistemas del mismo nivel de reinicio del servidor. Con el bloqueo NFSv3, cuando se reinicia un cliente, el servidor debe liberar los bloqueos. Cuando se reinicia un servidor, el cliente recuerda al servidor los bloqueos que mantiene
Nota:
En algunos casos, los mecanismos de bloqueo NFS no se comunican correctamente (por ejemplo, en caso de una interrupción de la red) y los bloqueos obsoletos se dejan en el servidor y se deben borrar manualmente. Para obtener más información sobre esta tarea, consulte solución de problemas de bloqueos de archivos.
Bloqueo NFSv4.x
NFSv4.x usa un modelo de bloqueo basado en concesión integrado en el protocolo NFS. Esto significa que no hay servicios auxiliares para mantener o preocuparse; todo el bloqueo se encapsula en la comunicación NFSv4.x.
Azure NetApp Files admite el mecanismo de bloqueo de archivos NFSv4.x, manteniendo el estado de todos los bloqueos de archivo en un modelo basado en concesiones. De acuerdo con RFC 8881, Azure NetApp Files "definirá un único período de concesión para todo el estado mantenido por un cliente NFS. Si el cliente no renueva su concesión dentro del período definido, el servidor puede liberar todo el estado asociado a la concesión del cliente".
Esto significa que el cliente puede renovar su concesión explícita o implícitamente realizando una operación, como leer un archivo. Además, Azure NetApp Files define un período de gracia, que es un período de procesamiento especial en el que los clientes intentan reclamar su estado de bloqueo durante una recuperación del servidor.
Término | Definición |
---|---|
Concesión | El período de tiempo en el que Azure NetApp Files concede de forma irrevocable un bloqueo a un cliente. |
Periodo de gracia | Período de tiempo en el que los clientes intentan reclamar su estado de bloqueo durante la recuperación del servidor en caso de una interrupción del servidor. |
Cómo Azure NetApp Files controla los bloqueos NFSv4.x
Azure NetApp Files emite bloqueos tras una solicitud de cliente sobre una base de concesión. El servidor de Azure NetApp Files comprueba la concesión en cada cliente cada 30 segundos para los cambios. En el caso de un reinicio del cliente, el cliente puede reclamar todos los bloqueos válidos del servidor después de reiniciarlo. Si el servidor de Azure NetApp Files se reinicia, después de reiniciarlo no emite ningún nuevo bloqueo a los clientes durante un período de gracia de 45 segundos. Después de ese tiempo, los bloqueos se pueden emitir a los clientes que solicitan. Si el bloqueo no se puede restablecer durante el período de gracia especificado, el bloqueo expira por sí mismo. Este comportamiento difiere del bloqueo NFSv3, ya que no habrá bloqueos obsoletos que deba romperse manualmente.
Establecimiento manual de bloqueos en un cliente
Para probar los bloqueos NFS, el cliente debe indicar al servidor NFS que establezca un bloqueo. Sin embargo, no todas las aplicaciones usan bloqueos. Por ejemplo, la aplicación “vi” no bloqueará un archivo. Crea un archivo de intercambio oculto, mediante una convención de nomenclatura de puntos, en la misma carpeta y, a continuación, confirma las escrituras en ese archivo cuando se cierra la aplicación. A continuación, se elimina el archivo antiguo y se cambia el nombre del archivo de intercambio al nombre de archivo.
Sin embargo, hay utilidades para establecer bloqueos manualmente. Por ejemplo, flock puede bloquear archivos.
Para establecer un bloqueo en un archivo, ejecute primero exec para asignar un identificador numérico.
# exec 4<>v4user_file
Use flock para crear un bloqueo compartido o exclusivo en el archivo.
# 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 el archivo.
# flock -u -n 4
Los archivos de bloqueo manual le permiten probar las interacciones de apertura y edición de archivos y probar la funcionalidad de interrupción de bloqueo en Azure NetApp Files.