Prática recomendada para balanceamento de carga e virtualização

2

Eu fiz algumas pesquisas aqui e não achei nada relevante o suficiente para mim. Vou tentar ser o mais breve possível.

Atualmente tenho servidores OSX, três deles. Estou mudando para um ambiente de virtualização para redundância e já que a Apple cancelou o Xserve. Não tenho experiência anterior com virtualização, mas sou um aprendiz rápido e tenho servidores administrados desde 1997 .

Então, novo servidor dedicado em um novo data center. Hardware Kickass, instalei o VMware ESXi e dentro disso, criei duas redes, "VM Network" e "Switch". "VM Network" está conectado à NIC física e "Switch" é um comutador virtual.

Em seguida, criei um VPS chamado "FW" que tem duas NICs virtuais, uma para cada rede no VMware, instalei o pfSense nessa máquina virtual e conectei a NIC "real" com o Switch interno. Feito.

Então, pretendo criar meu pool de recursos na rede "Switch" e deixar que o pfSense carregue esse equilíbrio.

Meu aplicativo da Web está atualmente contido em um único diretório que pesa aproximadamente 300 GB de dados, meu banco de dados tem cerca de 50 GB a mais. Eles estão atualmente no Xserve 1 e no Xserve 2.

Meu processo de pensamento atual me tem nessas máquinas VPS:

1. Servidor principal (10.0.0.10) Isso contém dois discos rígidos virtuais, um pequeno para o Linux e um grande para o meu aplicativo da web. O maior é montado dentro do Linux como "/ Atlas" (nome do meu CMS) e é exportado para o NFS. VPS tem 2GB de RAM e 2 CPU's

2. Servidor de banco de dados (10.0.0.11) Este é o servidor de banco de dados mestre

3. Servidores da Web (10.0.0.20 - 10.0.0.30) Dez servidores Linux, cada um com 5 GB de HD, 5 GB de RAM e 4 CPUs. Cada montar a exportação NFS de # 1 e pode ler e escrever no meu Atlas.

Minhas perguntas são:

  1. Devo executar o MySQL slaves em cada servidor Web em 3? Eu tenho apenas aproximadamente 900GB no servidor, então o espaço é uma preocupação.

  2. Se não, devo ter servidores de failover escravos do MySQL separados no mesmo VMware, no caso de algo acontecer com # 2?

  3. Eu rsync-backup do servidor principal para um local externo, mas existe uma maneira melhor do que o NFS para permitir que cada servidor web ler e gravar esses dados. O uso de um sistema de arquivos em cluster levaria a preocupações com espaço, rigth?

  4. Devo usar um VPS para balanceamento de carga e usar o próprio LB do Apache? Isso é melhor para um aplicativo da web do que usar o LB do pfSense?

  5. Algum outro ponto fraco em meus pensamentos aqui? Usarei isso como meu servidor principal, mas configurarei um servidor de failover de maneira idêntica em outro local e usarei servidores DNS para redirecionar o tráfego quando necessário (automática ou manualmente).

Não estou construindo o Fort Knox aqui, mas preciso de uma redundância melhor do que a que tenho hoje, e quero fazê-lo o mais "correto" possível. Qualquer ajuda / comentários são muito appriciated!

    
por Sandman 07.05.2011 / 00:05

1 resposta

2
  1. Uma topologia de rede multicamadas significa que você nunca deve executar o MySQL em seu servidor da web. Se você precisar de servidores MySQL redundantes ou de carga balanceada, então crie db1, db2, db3, etc. Não crie mais escravos do que realmente precisa, já que a replicação é uma transação de tudo ou nada com o MySQL padrão.
  2. O que eu normalmente faço é a replicação MASTER-MASTER. Isso normalmente não é recomendado devido aos principais riscos de conflito, mas eu escrevi alguns scripts que o servidor secundário executa no modo read_only para evitar gravações. Assim, se um servidor morrer, é fácil inverter o switch read_only e começar a aceitar as gravações.
  3. O NFS está bem; basta fazer o ajuste de desempenho e testes habituais.
  4. Dê uma olhada no haproxy para fazer o balanceamento de carga do Apache / HTTP e do TCP. Funciona muito bem com o MySQL. . Você pode executar o haproxy em uma VM.
  5. Ter VMs redundantes é ótimo, mas a execução em uma única máquina física ainda é um ponto fraco. Ter 10 VMs Linux idênticas competindo por recursos também pode ser um ponto fraco.

Comentário final: o ESXi é ótimo (não me leve a mal), mas eu não o usaria nessa situação. Dê uma olhada em um sistema de conteinerização como OpenVZ . O Proxmox fornece uma ótima interface de usuário para ele. O desempenho será significativamente melhor; cada VM pode usar todos os núcleos de RAM e CPU. (A menos que você o restrinja, é claro). O OpenVZ só funciona com o Linux, é claro. Mas qualquer webapp que funcione no Xserve também deve funcionar em um container Linux?

    
por 07.05.2011 / 00:26