Este tópico descreve as versões do protocolo Network File System (NFS) compatíveis com o File Storage NAS (NAS), as diferenças entre NFSv3 e NFSv4 e os modelos de consistência do NFS.
O que é NFS?
O NFS é um protocolo de sistema de arquivos distribuído que permite acessar arquivos em um sistema remoto da mesma forma que arquivos locais.
Recomendamos montar sistemas de arquivos NFS em instâncias do Elastic Compute Service (ECS) Linux e em containers. A montagem de sistemas de arquivos Server Message Block (SMB) em instâncias do ECS Linux e containers pode causar problemas de compatibilidade. Para obter mais informações, consulte Perguntas frequentes sobre compatibilidade de montagem cruzada.
Versões do protocolo
Existem três versões do NFS: NFSv2, NFSv3 e NFSv4. O NFSv4 possui duas versões secundárias: NFSv4.0 e NFSv4.1.
Os sistemas de arquivos NAS de uso geral são compatíveis com NFSv3 e NFSv4.0.
Os sistemas de arquivos NAS Extreme são compatíveis com NFSv3.
Diferenças entre NFSv3 e NFSv4.0
-
Recursos
O NFSv4.0 é um protocolo com estado que implementa o bloqueio de arquivos e obtém o nó raiz de um sistema de arquivos.
O NFSv3 não identifica bloqueios de arquivos. Se você montar um sistema de arquivos usando NFSv3 e NFSv4.0 simultaneamente, os dados gravados via NFSv4.0 poderão ser sobrescritos.
-
Segurança
O NFSv4.0 oferece segurança aprimorada e suporta autenticação de identidade RPCSEC-GSS.
-
Solicitações
O NFSv4.0 fornece apenas dois tipos de solicitação: NULL e COMPOUND. Todas as operações integram o COMPOUND. Um cliente pode encapsular várias operações em uma única solicitação COMPOUND conforme a necessidade para aumentar a flexibilidade.
-
Namespace
O namespace dos sistemas de arquivos NFSv4.0 mudou. Defina um sistema de arquivos raiz (fsid=0) no servidor; outros sistemas de arquivos devem ser montados nesse sistema raiz para exportação.
Para obter mais informações sobre os limites dos sistemas de arquivos NFS, consulte Tipo de protocolo.
Aplicação de cache NFS
Em discos tradicionais, todos os dados residem na page cache, e as páginas modificadas retornam ao servidor de forma assíncrona. A latência desses discos é baixa. No entanto, em um sistema de arquivos NFS, o protocolo não armazena arquivos recém-criados ou conteúdo recém-gravado na page cache; ele os envia ao servidor NAS o mais rápido possível. Portanto, quando várias instâncias do ECS compartilham um sistema de arquivos NFS, todas as operações do NAS geram sobrecarga adicional em comparação às operações de disco. Essa sobrecarga geralmente varia entre 100 us e 1 ms. Para enviar dados ao servidor NAS rapidamente, o NAS oferece os seguintes modelos de consistência multinode:
Modelo de consistência eventual baseado em tempo limite
O NFS armazena em cache o atributo (FileAttr) de diretórios ou arquivos. O sistema operacional verifica se o FileAttr mudou para determinar se houve modificação em um diretório ou arquivo em outras instâncias do ECS. Além disso, após carregar o FileAttr, o sistema operacional considera os caches (como o conteúdo de um arquivo ou a lista de arquivos em um diretório) válidos durante o tempo T. Após esse período, o sistema operacional obtém o FileAttr do servidor novamente. Se o FileAttr permanecer inalterado, o sistema operacional mantém todos os caches relacionados ao arquivo ou diretório como válidos.
T é um valor adaptativo. Valor padrão: 1s a 60s.
Cache de conteúdo de arquivo: armazena o conteúdo de um arquivo.
Cache de subdiretório: registra quais arquivos existem ou não em um diretório.
Exemplo de cache de conteúdo de arquivo:
O ECS-1 lê de 0 a 4 KB do arquivo X: o ECS-1 acessa o conteúdo do arquivo pela primeira vez e o conteúdo não existe no cache. O ECS-1 lê o conteúdo do servidor e o armazena localmente.
O ECS-2 atualiza de 0 a 4 KB do arquivo X: o ECS-2 grava os dados no servidor e atualiza o mtime no FileAttr.
O ECS-1 lê de 0 a 4 KB do arquivo X novamente: se o intervalo entre a segunda e a primeira leitura de 0 a 4 KB do arquivo X pelo ECS-1 for menor que o tempo T, o FileAttr não expirou. Nesse caso, o ECS-1 lê diretamente os 0 a 4 KB do arquivo X no cache.
O ECS-1 lê de 0 a 4 KB do arquivo X pela terceira vez: se o intervalo entre a terceira e a primeira leitura de 0 a 4 KB do arquivo X pelo ECS-1 for maior que o tempo T, o ECS-1 obtém o novo FileAttr do servidor e constata a alteração do mtime. Nesse cenário, o ECS-1 descarta os dados do cache e lê os dados do servidor.
Exemplo de cache de subdiretório:
O ECS-1 tenta localizar /a: o ECS-1 verifica que "a" não existe na primeira busca e armazena essa informação em cache para o diretório /.
O ECS-2 cria o subdiretório /a.
O ECS-1 tenta localizar /a novamente: se o intervalo entre a segunda e a primeira busca do ECS-1 por /a for menor que o tempo T, o ECS-1 usa diretamente o cache e informa que o subdiretório não existe.
O ECS-1 tenta localizar /a pela terceira vez: se o intervalo entre a terceira e a primeira busca do ECS-1 por /a for maior que o tempo T, o ECS-1 obtém o FileAttr mais recente do subdiretório / e constata a alteração do mtime. Nessa situação, o ECS-1 descarta os dados do cache e busca /a no servidor.
Para obter mais informações sobre o modelo de consistência eventual baseado em tempo limite fornecido pelo NFS, consulte NFS.
Modelo de consistência close-to-open (CTO) baseado em arquivo
O modelo de consistência eventual baseado em tempo limite não garante que o ECS-2 leia imediatamente os dados gravados pelo ECS-1. Para melhorar a consistência, o NFS oferece o modelo CTO baseado em arquivo. Quando dois ou mais nós de computação leem ou gravam dados simultaneamente no mesmo arquivo, o ECS-2 pode não ler imediatamente as alterações feitas pelo ECS-1. No entanto, assim que o ECS-1 abre um arquivo, grava dados nele e o fecha, reabrir esse arquivo em qualquer nó de computação garante acesso aos dados recém-gravados.
Por exemplo, uma instância do ECS produtora gera o arquivo X e executa a operação de fechamento. Em seguida, a instância produtora envia a mensagem X ao Message Queue informando que o arquivo X foi produzido. Uma instância do ECS consumidora inscrita no Message Queue lê a mensagem X (o arquivo X foi produzido). Então, a instância consumidora executa a operação de abertura e lê o arquivo por meio do fd retornado. Dessa forma, a instância consumidora consegue ler definitivamente todo o conteúdo do arquivo X. Suponha que a instância consumidora tenha executado a operação de abertura no arquivo X e obtido o fd antes de a instância produtora concluir a produção do arquivo. Nesse caso, a instância consumidora pode não conseguir ler o conteúdo mais recente usando diretamente o fd após receber a mensagem X.
Para obter informações sobre como resolver a latência na criação de arquivos e na gravação de dados, consulte Latência de criação de arquivos no NFS e Latência de gravação de dados no NFS.