Este tema describe las versiones del protocolo Network File System (NFS) que admite File Storage NAS (NAS), las diferencias entre NFSv3 y NFSv4, y los modelos de consistencia de NFS.
¿Qué es NFS?
NFS es un protocolo de sistema de archivos distribuido que le permite acceder a archivos en un sistema remoto de la misma manera que accede a los archivos locales.
Se recomienda montar sistemas de archivos NFS en instancias y contenedores de Linux de Elastic Compute Service (ECS). Si monta sistemas de archivos Server Message Block (SMB) en instancias y contenedores de ECS con Linux, podrían presentarse problemas de compatibilidad. Para obtener más información, consulte Cross-mount compatibility FAQ.
Versiones del protocolo
Existen tres versiones de NFS: NFSv2, NFSv3 y NFSv4. NFSv4 cuenta con dos versiones menores: NFSv4.0 y NFSv4.1.
Los sistemas de archivos NAS de uso general son compatibles con NFSv3 y NFSv4.0.
Los sistemas de archivos Extreme NAS admiten NFSv3.
Diferencias entre NFSv3 y NFSv4.0
-
Funciones
NFSv4.0 es un protocolo con estado que implementa la función de bloqueo de archivos y puede obtener el nodo raíz de un sistema de archivos.
NFSv3 no identifica los bloqueos de archivos. Cuando un sistema de archivos se monta mediante NFSv3 y NFSv4.0 al mismo tiempo, los datos escritos con NFSv4.0 podrían sobrescribirse.
-
Seguridad
NFSv4.0 ofrece mayor seguridad y admite la autenticación de identidad RPCSEC-GSS.
-
Solicitudes
NFSv4.0 proporciona solo dos tipos de solicitudes: NULL y COMPOUND. Todas las operaciones se integran en COMPOUND. Un cliente puede encapsular varias operaciones en una sola solicitud COMPOUND según sus necesidades reales para mejorar la flexibilidad.
-
Espacio de nombres
El espacio de nombres de los sistemas de archivos NFSv4.0 cambió. Se debe establecer un sistema de archivos raíz (fsid=0) en el servidor, y los demás sistemas de archivos se montan sobre este sistema raíz para su exportación.
Para obtener más información sobre los límites de los sistemas de archivos NFS, consulte Protocol type.
Aplicación de la caché de NFS
En los discos tradicionales, todos los datos se almacenan en la caché de páginas y estas se vacían de forma asíncrona hacia el servidor. La latencia de los discos tradicionales es baja. Sin embargo, en un sistema de archivos NFS, el protocolo no guarda en la caché de páginas los archivos recién creados ni el contenido nuevo; los envía al servidor NAS lo antes posible. Por lo tanto, cuando varias instancias ECS comparten un sistema de archivos NFS, cada operación de NAS genera una sobrecarga adicional respecto a las operaciones de disco. Esta sobrecarga suele oscilar entre 100 us y 1 ms. Para enviar los datos al servidor NAS lo antes posible, NAS ofrece a continuación varios modelos de consistencia multinodo:
Modelo de consistencia eventual basado en tiempo de espera
NFS almacena en caché el atributo (FileAttr) de directorios o archivos. El sistema operativo determina si un directorio o archivo se modificó en otras instancias ECS comprobando si FileAttr cambió. Además, una vez que se carga FileAttr, el sistema operativo considera válidas las cachés (por ejemplo, el contenido de un archivo o la lista de archivos de un directorio) durante un tiempo T. Transcurrido ese tiempo, el sistema operativo vuelve a obtener FileAttr del servidor. Si FileAttr no cambió, el sistema operativo considera válidas todas las cachés relacionadas con el archivo o directorio.
T es un valor adaptativo. Valor predeterminado: de 1 s a 60 s.
Caché de contenido de archivo: almacena en caché el contenido de un archivo.
Caché de subdirectorios: registra qué archivos existen en un directorio y cuáles no.
Ejemplo de una caché de contenido de archivo:
ECS-1 lee de 0 a 4 KB del archivo X: ECS-1 lee el contenido del archivo por primera vez y este no existe en la caché. ECS-1 lee el contenido del servidor y lo almacena localmente.
ECS-2 actualiza de 0 a 4 KB del archivo X: ECS-2 escribe los datos en el servidor y actualiza mtime en FileAttr.
ECS-1 vuelve a leer de 0 a 4 KB del archivo X: si el intervalo entre esta segunda lectura y la primera es menor que el tiempo T, FileAttr no expiró. En este caso, ECS-1 lee directamente de 0 a 4 KB del archivo X desde la caché.
ECS-1 lee de 0 a 4 KB del archivo X por tercera vez: si el intervalo entre esta tercera lectura y la primera es mayor que el tiempo T, ECS-1 obtiene el nuevo FileAttr del servidor y detecta que mtime cambió. En este caso, ECS-1 descarta los datos de la caché y lee los datos del servidor.
Ejemplo de una caché de subdirectorios:
ECS-1 intenta buscar /a: ECS-1 detecta que a no existe en la primera búsqueda. Luego, almacena en caché la información de que a no existe en el directorio /.
ECS-2 crea el subdirectorio /a.
ECS-1 intenta buscar /a de nuevo: si el intervalo entre esta segunda búsqueda de /a y la primera es menor que el tiempo T, ECS-1 usa directamente la caché e indica que el subdirectorio no existe.
ECS-1 intenta buscar /a por tercera vez: si el intervalo entre esta tercera búsqueda de /a y la primera es mayor que el tiempo T, ECS-1 obtiene el FileAttr más reciente del subdirectorio / y detecta que mtime cambió. En este caso, ECS-1 descarta los datos de la caché y busca /a en el servidor.
Para obtener más información sobre el modelo de consistencia eventual basado en tiempo de espera que proporciona NFS, consulte NFS.
Modelo de consistencia close-to-open (CTO) basado en archivos
El modelo de consistencia eventual basado en tiempo de espera no garantiza que ECS-2 lea de inmediato los datos que escribió ECS-1. Por ello, para mejorar la consistencia, NFS ofrece el modelo CTO basado en archivos. Cuando dos o más nodos de cómputo leen o escriben datos en el mismo archivo de forma simultánea, es posible que ECS-2 no lea inmediatamente los cambios realizados por ECS-1. No obstante, una vez que ECS-1 abre un archivo, escribe datos en él y lo cierra, cualquier nodo de cómputo que vuelva a abrirlo tendrá acceso garantizado a los datos recién escritos.
Por ejemplo, una instancia ECS productora genera el archivo X y luego ejecuta la operación close. Después, envía el mensaje X a Message Queue para indicar que el archivo X ya se produjo. Una instancia ECS consumidora suscrita a Message Queue lee el mensaje X (el archivo X se produjo). A continuación, ejecuta la operación open en el archivo y lo lee mediante el fd que devuelve dicha operación. De esta manera, la instancia ECS consumidora puede leer con certeza todo el contenido del archivo X. Suponga que la instancia ECS consumidora ya había ejecutado la operación open en el archivo X y obtenido el fd antes de que la instancia productora terminara de generar el archivo. En ese caso, es posible que la instancia consumidora no pueda leer el contenido más reciente si usa directamente el fd después de recibir el mensaje X.
Para obtener información sobre cómo resolver la latencia al crear un archivo y escribir datos en él, consulte File creation latency in NFS y Data write latency in NFS.