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