Servindo arquivos estáticos com nginx sobre NFS?

8

Eu tenho um site que está recebendo cerca de 7 mil solicitações por segundo em um servidor nginx. Esse servidor manipula reescrevendo a um servidor Apache, além de servir arquivos estáticos, imagens etc. diretamente. Os arquivos estáticos são a maior parte deles com cerca de 5 mil pedidos.

Com uma atualização de arquitetura, penso em usar um servidor de arquivos central que exporte um diretório contendo esses arquivos estáticos via NFS. Não haverá acesso de gravação a esses arquivos, portanto, o diretório pode ser montado somente para leitura na máquina nginx. Minha principal preocupação é:

O NFS é rápido o suficiente para isso? Existe um limite em quantas solicitações o NFS pode manipular? Existem algumas opções "imprescindíveis" quando se segue desta maneira?

Bônus: existem outras alternativas para essa configuração além do NFS?

Obrigado!

    
por j0nes 15.11.2011 / 15:10

4 respostas

2

Ao configurar um servidor NFS central, você introduz um único ponto de falha em seu design. Isso por si só deveria ser um disjuntor de negócio. Se não, o NFS pode ser rápido o suficiente para uma carga como essa. Os fatores críticos serão ter RAM suficiente para armazenar arquivos em cache, interconexões de baixa latência (Gig-E ou superior) e ajuste (menos do que o anterior).

Você também deve considerar o uso do rsync ou de uma ferramenta semelhante para manter cópias locais das atualizações de arquivos estáticos em cada servidor da Web individual. Outra opção pode ser uma solução de servidor NFS redundante ou SAN (ambas as quais serão muito mais complicadas e caras do que a idéia de rsync).

    
por 15.11.2011 / 15:25
2

Eu uso cachefilesd (e um kernel linux recente, com cachefs) para armazenar em cache arquivos NFS em um HD local . Desta forma, toda leitura no nfs copiará o arquivo para um diretório / var / cache / fs e as próximas leituras serão entregues a partir daí, com o kernel verificando o nfs se o conteúdo ainda é válido.

Desta forma, você pode ter um NFS central, mas sem perder o desempenho dos arquivos locais

Cachefilesd cuidará da limpeza de arquivos antigos quando o tamanho / inodes livres atingirem um nível configurado, para que você possa servir dados incomuns do NFS e solicitações comuns do HD

Naturalmente, use também um verniz para armazenar em cache as solicitações mais comuns e salvar o Nginx / NFS de ser exibido.

Aqui é um pequeno cachefilesd howto

    
por 14.07.2015 / 18:36
1

A velocidade depende de muitos fatores:

  • Como seus servidores serão conectados ao alvo do NFS? Um único disco SAS de porta dupla pode utilizar 6gbit / s de velocidade de transferência. Tenha isso em mente se você estiver planejando usar 1gig Ethernet (do qual você pode subtrair 20% de sobrecarga TCP).
  • Que tipo de cache o servidor NFS obterá? Você está usando um controlador de matriz de classe empresarial com muito cache? O cache de leitura é fundamental nesta configuração
  • Quantos servidores acessarão o mesmo arquivo simultaneamente? Bloqueio de NFS pode machucar - mal

O limite de arquivos abertos via NFS é uma limitação do sistema operacional do host. O FreeBSD tem, por exemplo, muitas opções diferentes de ajuste para suportar um número grande de arquivos abertos, mas isso depende da quantidade de RAM no seu servidor.

Uma alternativa a um servidor de arquivos central é usar a sincronização / replicação entre seus servidores da Web (como Chris S sugere). O rsync ou DRBD pode ser uma ótima opção de custo benefício.

    
por 15.11.2011 / 15:29
1

Eu aconselharia contra o NFS, a menos que você coloque um pouco de cache nele. O cache nginx é melhor que nada, mas o verniz é melhor.

Com isso dito, se sua carga for alterada para um conteúdo mais dinâmico do que estático, será mais importante veicular arquivos de aplicativos do disco local.

Se você colocar o NFS, certifique-se de ter redundância.

    
por 15.11.2011 / 15:39

Tags