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.
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