Como compartilhar ativos entre vários servidores da web?

16

Tenho vários servidores da Web Linux conectados a um balanceador de carga e gosto de compartilhar recursos (como imagens, vídeos e outras coisas) entre esses servidores. Qual é a melhor maneira de fazer isso?

Atualmente, montei em um servidor de arquivos para todos os servidores da web, mas estou preocupado com o fato de ele ficar sob tráfego intenso. Como posso evitar que isso aconteça?

Obrigado antecipadamente.

    
por getmizanur 08.02.2015 / 16:10

6 respostas

12

Existem várias maneiras de fazer isso com base em suas necessidades.

  • Use um servidor de arquivos central montado com o fx NFS nos servidores da Web
  • O mesmo que acima, mas redundante, por isso, se um desce, o outro assume
  • Use algum tipo de ferramenta de sincronização (rsync, por exemplo) e hospede os arquivos localmente nos servidores da web. Em seguida, configure um cronjob para sincronizar os arquivos entre os servidores em um intervalo específico.
  • Use um CDN como o Amazon S3, Akamai etc.

Os dois primeiros são melhores se você tiver muitos novos arquivos chegando. O terceiro seria a solução ideal se você não adicionar ou alterar arquivos com frequência, pois os usuários receberão o conteúdo estático 404 ainda não sincronizado.

A última opção pode ser ideal de muitas maneiras, mas também pode se tornar a mais cara das quatro. Você também precisa reescrever seus sites para apoiar isso.

    
por 08.02.2015 / 17:12
2

Outra ótima maneira de diminuir a carga em servidores da Web e realizar o balanceamento de carga é com o squid (ou seja, o squid3). Configure-o como um proxy reverso com armazenamento em cache. Ele armazenará em cache o conteúdo estático, como imagens, etc., no HDD (padrão) ou na RAM (mais rápido e melhor), se você configurá-lo dessa maneira. É capaz de rodar o robin para outros servidores de squid, bem como se qualquer um dos nós em particular estiver sobrecarregado.

    
por 08.02.2015 / 21:01
1

Como geralmente a necessidade de mais servidores é proveniente dos recursos necessários para executar sites / aps dinâmicos, considere hospedar os recursos estáticos em outro subdomínio / domínio. (como static.yourdomain.com)

Você pode então usar outro servidor / servidor para hospedá-los. A hospedagem de arquivos estáticos não usa muitos recursos, portanto, você precisará de consideravelmente menos servidores para o seu conteúdo estático. Você também liberará alguns recursos nos servidores para seu conteúdo dinâmico.

Dependendo do seu balanceador de carga, você também poderá fazer isso no mesmo domínio com o balanceador de carga decidindo qual servidor usar para qual solicitação, mas se usar um domínio separado, poderá colocar seus ativos estáticos em um CDN fácil, se houver necessidade!

    
por 09.02.2015 / 10:42
1

Uma solução para esse desafio que utilizei é ter a cópia principal de leitura / gravação dos arquivos em uma unidade NFS compartilhada, mas também manter uma cópia somente leitura em cada servidor da Web para que uma falha do host NFS seja acesso a arquivos em modo somente leitura, em vez de perdê-los completamente.

  • Arquivos ao vivo no host central, compartilhados com hosts da web via montagem NFS
  • rsync executa 15 minutos para manter a cópia somente leitura em cada host fresco.
  • Um script check_link bash é executado a cada minuto para garantir que a montagem do NFS ainda esteja lá e, se não, trocar um link simbólico para a cópia somente leitura.

Mais detalhes são encontrados em este artigo de quando eu primeiro configure este sistema.

Upsides:

  • As leituras de arquivos são altamente disponíveis
  • Não há condições de corrida para gravações de arquivos
  • Novos arquivos são disponibilizados instantaneamente para todos os hosts da web.

Desvantagens:

  • um pouco complexo.
  • o número de cópias somente leitura é dimensionado com o número de hosts da Web, o que pode ser excessivo se você tiver muito mais do que dois.
  • As gravações de arquivos não são altamente disponíveis.
  • Possibilidade de até 1 minuto de inatividade antes de alternar para a cópia somente leitura.
por 12.03.2015 / 05:05
0

Você pode querer considerar um banco de dados NoSQL. Eles são projetados para trabalhar em clusters, fornecer consistência eventual. Mas tenha cuidado, eles não são ACID.

Aqui está uma introdução que ajudará você a decidir que tipo de banco de dados NoSQL você pode querer seu propósito.

Aqui está uma lista de recursos relacionada ao NoSQL disponível.

    
por 09.02.2015 / 08:54
0

Por que você não experimenta uma solução DFS, eles fornecem alto nível de redundância e o volume pode ser compartilhado entre quantos você quiser. O Gluster é o meu favorito e é muito fácil de instalar e configurar em qualquer distribuição Linux famosa

    
por 12.09.2017 / 21:43