Armazenamento / exibição de imagens distribuídas em um orçamento

2

Não tenho certeza de como fornecer uma solução tolerante a falhas ao veicular arquivos enviados.

Eu tenho um único balanceador de carga, com dois servidores (webserver1, webserver2) como nós, ambos executando o Apache2 e um banco de dados acessível por ambos os nós, mas não pela WAN.

Os servidores da web devem ser dimensionados e o banco de dados deve ser compartilhado.

Replicação geral de arquivos

Neste momento, estou executando um rsync agendado do webserver2 para o webserver1, o webserver1 é o mestre, e os arquivos que estão sendo distribuídos para o webserver2. Neste momento, existem apenas dois servidores, embora isso se destine a escalonar.

Compartilhando Imagens

Eu tenho três diretórios no meu aplicativo da Web que devem ser usados para arquivos gerados pelo usuário que são enviados para o servidor da web1 e o servidor da web2 (essas são exceções para a operação de rsync).

Atualmente, tenho 3 compartilhamentos NFS disponibilizados pelo webserver1, e os compartilhamentos estão sendo montados pelo webserver2.

Sou bastante novo na cena da arquitetura distribuída, mas pelo que vejo, a solução NFS leva a um ponto único de falha - alterei a ponderação no balanceador de carga para garantir que o servidor da web2 receba mais tráfego, portanto, a carga no webserver1 não deve ser maior.

Não tenho mais orçamento para gastar em nenhuma solução de nuvem (como o Amazon S3), portanto, meu único curso de ação é fornecer uma solução de software livre.

Existem soluções de software viáveis? Minha maior prioridade é a remoção do ponto de falha único, mantendo as cargas do servidor no mínimo.

    
por Nick 07.02.2013 / 10:39

4 respostas

0

Nesta situação, gosto de usar servidores NFS dedicados ... Preocupações sobre pontos únicos de falha podem ser compensadas com certas decisões de design ...

  • O que você está tentando proteger? Falha de componente? Falha do servidor? Falhas de rede?
  • Onde esta configuração está hospedada? Uma facilidade de centro de dados? Um escritório? A nuvem?
  • Haverá algum momento em que o orçamento não seja tão restrito?

Se a infraestrutura for virtualizada, terei um par de balanceadores de carga virtuais (ou um único LB de hardware), uma camada de servidores da Web, DBs (talvez) e armazenamento de back-end. Esse armazenamento pode ser fornecido por um servidor NFS virtual, uma caixa física independente, um NAS, etc. Eu raramente uso sistemas de arquivos em cluster.

Parece que você não está na escala em que isso deve ser um problema. Eu entendo a motivação para planejar uma escala maior, mas não há nada de errado com o que você está fazendo. Embora uma exportação NFS não deva ter um impacto tão negativo no desempenho do servidor ...

    
por 07.02.2013 / 11:32
1

Há muito a ser dito para replicar dados entre sistemas de arquivos isolados em termos de desempenho e resiliência. O que exatamente está errado com sua configuração atual?

Eu ficaria longe de sistemas de arquivos compartilhados (GFS2, OCFS etc) Eles não dão um desempenho muito bom. Um sistema de arquivos de replicação, como o Lustre ou o AFS, oferece um compromisso razoável entre desempenho e funcionalidade para esse tipo de função.

Existe algum motivo para você armazenar os dados em um sistema de arquivos? Um cluster db NoSQL pode ser muito mais simples. E, claro, também há HDFS .

    
por 07.02.2013 / 11:22
0

O DRBD no mestre / mestre cobriria a maior parte das suas necessidades, não tem uma sobrecarga alta e o servidor pode gravar ou ler e funcionará sem a presença do outro.

É um pouco complicado começar a trabalhar, mas é uma solução que se adapta à maioria, se não a todos os seus requisitos.

    
por 07.02.2013 / 10:58
0

Parece que você está procurando por algo como MogileFS . É um compartilhamento de arquivos replicados e distribuídos com base no webdav. Lembre-se, isso não é compatível com POSIX e seu aplicativo precisa ser 'mogile aware'. Foi construído para compartilhar imagens para um site.

    
por 07.02.2013 / 11:23