A melhor maneira de compartilhar um diretório de upload de arquivos entre servidores da Web com escala horizontal

9

Atualmente, estou tentando especificar um cluster escalável horizontalmente para um aplicativo Web baseado em drupal, que se parece com o diagrama colorido abaixo:

O balanceador de carga implementa sessões persistentes, para que um usuário mantenha o estado depois de ter um servidor alocado para trabalhar.

Cada servidor de aplicativos tem o seguinte:

  • verniz na frente
  • drupal 6 no meio correndo na pilha de lâmpadas
  • memcached na parte de trás

Os dois servidores de banco de dados mysql estão em um IP compartilhado e estão em um cluster de alta disponibilidade com DRBD e hearbeat, de modo que a perda de um não derrubará toda a plataforma.

insira a descrição da imagem aqui

Há algumas coisas que não tenho certeza sobre as quais eu apreciaria suas opiniões:

Como o armazenamento de arquivos deve ser escalado horizontalmente?

Estou pensando em usar o NFS para montar um diretório de arquivos compartilhados em cada servidor de aplicativos, para que um arquivo carregado em um único local esteja disponível em todos eles. Estou pensando no NFS porque ele existe há séculos e não tenho experiência com o MogileFS ou GlusterFS, e é algo que já usamos antes, por isso estamos mais familiarizados com ele.

Existem diretrizes a seguir para determinar quantos servidores é sensato compartilhar um diretório pelo NFS dessa maneira?

Como o HA deve ser fornecido no armazenamento de arquivo compartilhado aqui?

Um problema aqui é que o servidor NFS é um ponto único de falha.

Já estamos usando Heartbeat e DRBD nos servidores Mysql, e eu prefiro manter o número de tecnologias envolvidas em uma pilha o mais baixo possível - que armadilhas existiriam se eu usasse a mesma estratégia de alta disponibilidade para o arquivo servidores também?

Uma abordagem alternativa

Isso é para um site interno, com um número finito de usuários que ocasionalmente usam o site intensivamente por curtos períodos, quando uma iniciativa interna é ativada. Portanto, isso não precisa ser escalado infinitamente como em uma inicialização.

Dado que

  • existe um limite superior ao tráfego que podemos esperar
  • adicionar a adição de HA aos servidores de arquivos e projetar uma configuração para dimensionar horizontalmente como essa introduz uma complexidade considerável

Também estou pensando em tornar os dois servidores Web mais robustos para que eles possam lidar com o pico de carga entre eles e configurar uníssono ou rsync entre os dois em um trabalho cron, para que:

  • os arquivos ainda estão sincronizados (as sessões permanentes mantêm o usuário no mesmo servidor para o qual o upload foi feito)
  • perder um significa que o site ainda está operacional.

Isso soa como uma maneira possível de contornar possíveis dores de cabeça com complexidade de NFS / DRBD HA?

Obrigado,

C

Chris Adams
fonte

Respostas:

3

O servidor NFS terá pelo menos a mesma provisão que o servidor MySQL, já que eles têm basicamente a mesma função e limitações (ambos são locais onde você grava dados). Não gosto da ideia de vários gravadores para o NFS, torna muito complexo gerenciar bloqueios de arquivos e minhas experiências não foram muito boas nesse ponto.

Minha sugestão seria concentrar todas as gravações em um dos servidores de aplicativos (talvez tenha um servidor de aplicativos dedicado à gravação no servidor NFS) e vários servidores de aplicativos leitores montando-o somente leitura (eu sei que o drupal tem algumas miniaturas dinâmicas que precisam ser ser escrito, mas você pode manter o máximo disso em um RO fs). Você precisará de pelo menos um segundo servidor NFS (usar DRBD é a melhor opção aqui se você não tiver um armazenamento compartilhado como uma SAN) para garantir a HA.

Por último, dê uma olhada no Gluster e outros sistemas distribuídos.

coredump
fonte
0

Você pode tentar o mogileFS. Eu tinha usado um dos nossos projetos. É fácil de usar e configurar, pode ser dimensionado e não há pontos únicos de falha.

http://danga.com/mogilefs/

Sameer
fonte
0

A melhor maneira é encontrar uma boa solução de armazenamento. Dependendo da escala e do tipo de aplicativo, você pode usar um bom NAS, com suporte para NFS e pelo menos duas portas de gigabit e fontes de alimentação (confira algumas soluções corporativas).

Se você realmente leva a sério seu aplicativo, sua melhor aposta é verificar algumas soluções de SAN, mas isso pode ser muito caro, pois requer hardware especial (isso pode ser feito com o hardware de prateleira, mas pode ser muito lento).

André S.
fonte