Quão perigoso é o NFS assíncrono quando o RAID BBU e o UPS estão presentes?

2

Eu tenho um servidor NFSv3 e cerca de 15 clientes. Estou procurando por prós e contras, ativando async no lado do servidor. Eu li sobre isso, mas ainda é um pouco claro para mim. Eu sei que isso pode levar a corrupção de dados, se o servidor falhar no meio da operação de gravação. No entanto, também li que o cliente armazena um cache dessa mesma operação e pode recuperá-lo, se necessário. Minhas perguntas são:

  • O que exatamente aconteceria se meu servidor falhasse (isto é, perderia dados pendentes de gravação, corromperia o sistema de arquivos subjacente etc.)?
  • O que aconteceria se o servidor e o cliente falhassem ao mesmo tempo (ou seja, falha / falta de energia e falha no no-break para lidar com isso)?
  • E se o servidor travar, mas eu tenho o RAID BBU. O servidor se recuperaria com segurança?;
  • Existe alguma maneira de detectar essa corrupção (algo semelhante a fsck maybe)?
  • E se o servidor for desligado normalmente pela UPS? Terei chances de corrupção de dados?;
  • O que vocês usam - sync ou async ?

Todas as máquinas são Ubuntu OS 10.04.

Eu estava tentando encontrar uma pergunta semelhante aqui para não disponível. Eu li a página inicial do NFS e dei uma rápida olhada no Managing NFS e no NIS, livro da 2ª edição.

    
por grs 08.11.2011 / 16:55

3 respostas

5

Então, o que a especificação NFSv3 diz, é basicamente para as duas operações de dados NFS a seguir

  • Operação WRITE com o conjunto de bits estável
  • COMMIT

o servidor tem permissão para retornar sucesso ao cliente somente depois que os dados atingirem o armazenamento estável. Isto é o que o servidor Linux NFS implementa com a opção de exportação "sync" padrão. Com "assíncrono", o servidor pode enganar e retornar sucesso, mesmo que os dados não estejam em armazenamento estável.

Ou seja, o problema de corrupção potencial com async é basicamente algo ao longo do seguinte

  1. O servidor retorna sucesso para uma operação WRITE ou COMMIT
  2. O cliente vê o sucesso e, em algum momento, exclui as páginas de seu próprio cache (por que desperdiçar espaço mantendo-as por aí, já que elas já estão no armazenamento do servidor, pensa)
  3. O servidor trava, perdendo, assim, os dados que não foram confirmados no armazenamento estável
  4. O cliente se reconecta ao servidor, mas como não há registro de quais dados foram gravados ou não, não é possível saber exatamente quais dados foram perdidos.

Agora, o último ponto é o mais sério, pois não há como saber quais dados foram perdidos / corrompidos ou não.

OTOH, se o cliente falhar, qualquer dado sujo no cache do cliente (que não tenha sido liberado) será perdido, mas o programador do cliente pode contorná-lo (ou seja, somente após fsync () ou close () retornar sucesso pode o programador assumir que os dados estão em armazenamento estável).

    
por 08.11.2011 / 17:42
1

what exactly would happen if my server crashes (i.e. would it lose pending-to-be-written data, would it corrupt the underlying filesystem, etc)?;

Não relacionado ao fato de que o computador é um servidor NFS, se ele falhar, você perderá os dados no cache de páginas (ou seja, os dados que foram gravados, mas ainda não foram liberados da RAM para o disco). Com um sistema de arquivos de registro no diário, o sistema de arquivos deve ser reparado automaticamente na próxima montagem usando o diário.

janneb escreveu uma boa explicação sobre o que a falha significa no contexto de um servidor NFS.

what would happen if both the server and the client crash at the same time (i.e. power failure/fault and UPS failure to handle it)?;

Você verifica todos os dados importantes.

what if the server crashes, but I have RAID BBU. Would the server recover safely?;

Não. Exportar com async significa que o servidor informa ao cliente "Eu armazenei o que você me deu no armazenamento estável, você pode parar de se preocupar com isso agora" antes mesmo de tentar gravar os dados em seu RAID.

is there any way to detect such a corruption (something similar to fsck maybe)?;

Como Janneb diz, não.

what if the server shutdown gracefully by UPS? Will I have chances of data corruption then?;

Não, porque, nesse caso, o servidor NFS gravará todos os dados no armazenamento estável.

    
por 09.11.2011 / 16:20
1

No. Exporting with async means the server tells the client "I've stored what you gave me on stable storage, you can stop worrying about it now" before it's even tried to write the data to your RAID.

Para expandir isso um pouco, já que você tem uma placa RAID BBU, você obterá um desempenho do NFS muito mais rápido ativando o cache de gravação. É para isto que a BBU serve, para manter os dados neste cache ativos após a perda de energia. Eu não habilitaria async na produção. como os estados do autor acima, esta é uma parte separada da cadeia.

Eu recomendo este artigo do ZFS que inclui um bom número de informações genéricas sobre NFS e desempenho:

link

    
por 09.11.2011 / 22:29