A melhor maneira de compartilhar um diretório de uploads de arquivos em servidores da Web com dimensionamento horizontal

9

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

O balanceador de carga implementa sessões fixas, de modo que um usuário mantém o estado quando recebe um servidor 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 HA com DRBD, e hearbeat, de modo que perder um não derrubará toda a plataforma.

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

Como a escala de armazenamento de arquivos deve ser horizontal?

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 uma vez esteja disponível em todos eles. Estou pensando no NFS porque ele existe há muito tempo e não tenho experiência com o MogileFS ou o GlusterFS, e é algo que já usamos antes, então estamos mais familiarizados com ele.

Existe alguma diretriz a seguir para descobrir quantos servidores é conveniente compartilhar um diretório sobre o NFS dessa maneira?

Como HA deve ser fornecido no armazenamento de arquivos compartilhados aqui?

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

Já estamos usando Heartbeat e DRBD nos servidores Mysql, e eu preferiria manter o número de tecnologias envolvidas em uma pilha o mais baixo possível - que armadilhas haveria se eu usasse a mesma estratégia de HA para os servidores de arquivos 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 períodos curtos, quando uma iniciativa interna é iniciada. Então, isso não precisa ser dimensionado infinitamente como uma startup.

Dado que

  • há um limite superior para o tráfego que podemos esperar
  • adicionando 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 da Web mais robustos, de forma que eles lidem com o pico de carga entre eles e configurem o uníssono, ou rsync entre os dois em uma tarefa do cron, para que:

  • os arquivos ainda estão em sincronia (as sessões persistentes mantêm um usuário no mesmo servidor para o qual enviaram um arquivo)
  • perder um significa que o site ainda está operacional.

Isso soa como uma possível maneira de contornar qualquer possível dor de cabeça de complexidade do NFS / DRBD HA?

Obrigado,

C

    
por Chris Adams 28.05.2011 / 12:07

3 respostas

3

O servidor NFS terá pelo menos a mesma provisão que o servidor MySQL, uma vez que eles têm basicamente as mesmas funções e limitações (ambos são lugares onde você escreve dados). Eu não gosto da ideia de vários escritores para o NFS, isso torna muito complexo o gerenciamento de bloqueios de arquivos e minhas experiências não foram muito bem nesse ponto.

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

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

    
por 28.05.2011 / 13:23
0

Você pode tentar o mogileFS. Eu usei um dos nossos projetos. É fácil de usar e configurar e pode escalar e não há pontos únicos de falha.

link

    
por 28.05.2011 / 13:22
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 e fontes de energia gigabit (confira algumas soluções corporativas).

Se você realmente levar a sério seu aplicativo, sua melhor opção é verificar algumas soluções de SAN, mas isso pode ser muito caro, já que é necessário um hardware especial (isso pode ser feito com hardware pronto, mas pode ser muito lento) .

    
por 09.05.2014 / 20:11