Como configurar vários servidores web e de banco de dados?

3

Meus sites têm crescido em termos de tráfego e a carga no mysql tem aumentado. Eu queria uma solução que ajudasse a lidar com o aumento de carga no mysql (todas as consultas já otimizadas) por causa do aumento no tráfego + servidores de backup que poderiam servir como um failover se meu servidor principal falhar.

Eu li sobre a configuração de vários servidores da Web e de bancos de dados, mas tinha algumas perguntas:

1) Como você configura vários servidores web mantendo o mesmo conteúdo (eu teria que carregar os arquivos para todos os servidores toda vez que eles fossem atualizados ou houvesse outra maneira?)

2) Da mesma forma, se eu tivesse que escalar o banco de dados em mais de um servidor, existe alguma outra maneira além da replicação ou a replicação do mysql é a melhor maneira de fazê-lo.

3) Eu li que separar o banco de dados do servidor web é uma boa idéia, por que isso? Se eu tivesse 2 servidores, não posso ter o banco de dados e os arquivos em ambos os servidores.

4) É algo conhecido como um balanceador de carga necessário e ajudaria a equilibrar as consultas do mysql também se a replicação fosse configurada?

Apenas muito confuso, gostaria de ajuda.

    
por Sam 30.09.2010 / 14:41

2 respostas

3

A configuração tradicional seria separar seu servidor web / de aplicativos e seu servidor de banco de dados. Tê-los na mesma caixa vai ser bastante restritivo. Se o seu aplicativo da Web consistir em uma mistura de conteúdo estático e dinâmico, a separação posterior (um servidor da web, servidor de aplicativos e servidor de conteúdo separados) melhorará o desempenho.

Tanto quanto o MySQL, você pode querer tentar estes:

  • Definitivamente, o MySQL tem seu próprio servidor dedicado.
  • Coloque o máximo de memória possível e a máquina pode aguentar, o MySQL ama a memória.
  • Coloque seu sistema operacional, registros de caixa e dados em três discos físicos separados.
por 30.09.2010 / 14:55
2

1) How do you set up multiple web servers while maintaining the same content (would I have to upload the files to all the servers everytime they were updated or is there another way?)

As situações ficam mais complicadas com a escala. Começando, você simplesmente implantaria todo o conteúdo em todos os servidores ao mesmo tempo manualmente. Você poderia escrever um script para fazer isso.

Como você pode fazer maiores, software de gerenciamento de configurações pode ajudar. Além disso, o OpenEFS seria uma solução adequada.

Com conteúdo estático e determinados tipos de conteúdo, há mais opções disponíveis. Estas decisões porque mais gritante quando você tenta modificar ou enviar conteúdo através do próprio aplicativo de carga balanceada, como se você não lidar com isso bem, você irá resultar em partição de dados. Por exemplo, um arquivo enviado só estará em um dos servidores com carga balanceada.

Em nenhuma ordem específica:

  • Use uma rede de distribuição de conteúdo .
  • Proxy seu conteúdo estático com cache você mesmo.
  • Resumo do armazenamento de dados para um sistema de arquivos altamente disponível.
  • Muitas vezes, idealmente, a solução preferida é armazenar o conteúdo em um banco de dados.

2) Similarly, if I had to scale out the DB into more than one server, is there any other way apart from replication or is mysql replication the best way to go about it.

Depende do seu objetivo final: consistência, disponibilidade ou tolerância à partição. Compromissos provavelmente serão necessários. Este é um assunto amplo, em que você se beneficiaria lendo um livro como High Performance MySQL . Opções comuns:

  • Replicação master dual usando uma tecnologia como Linux-HA , VRRP , ou multi-mestre do MySQL . Isso teria um IP flutuante. Você precisaria implementar o deslocamento de ID automático e estar ciente do desempenho do aplicativo.
  • Usando uma solução como DRBD para replicação de armazenamento em nível de bloco e, em seguida, novamente usando uma tecnologia como o Linux-HA para fazer failover dos recursos, caso de falha.

O MySQL também tem vários white papers publicados.

3) I have read that separating the database from the web server is a good idea, why is that? If I had 2 servers, can't I have both the DB and the files on both servers.

É melhor dedicar papel à finalidade, pois reduz a complexidade e o risco de segurança. Você provavelmente se beneficiaria de um mínimo de dois balanceadores de carga, dois servidores de banco de dados e dois servidores da Web. Esteja ciente dos pontos adicionais de falha, pois a alta disponibilidade não será interrompida. Sua rede provavelmente será o próximo ponto óbvio de falha.

Ele também permite construir, dimensionar e transferir funções padrão com menos complicações. No entanto, esses recursos não são exclusivos para separar as funções do servidor.

4) Is something known as a load balancer needed and would it help balance mysql queries as well if replication were set up?

Para consultas de gravação e MySQL, muitas vezes é mais fácil aumentar verticalmente. Para expandir horizontalmente, o que seria preferido em muitas soluções modernas, você precisa empregar uma arquitetura como sharding . Idealmente, seu aplicativo teria que ser projetado para suportar isso. Há também várias soluções de middleware das quais geralmente sou cauteloso.

Você poderia balancear a carga facilmente para servidores escravos de replicação MySQL, o que permitiria usar um VIP com carga balanceada para consultas somente leitura.

    
por 30.09.2010 / 15:39