Múltiplos VPS com banco de dados espelhado e sistema de arquivos

4

Eu desenvolvi interesse em clusters de VPS recentemente e pareceu uma ótima idéia tentar configurar um multi-VPS, que descreverei abaixo. Não é realmente destinado ao uso em produção, mas mais como um experimento para melhorar as habilidades e conhecimentos relevantes de sistemas multi-servidor. No entanto, como me falta o conhecimento, preciso de algumas informações gerais.

Descrição da configuração

Como eu lido diariamente com aplicativos Node.js que usam o Redis como armazenamento de dados, isso serviria de base para a configuração. O que eu tinha em mente era basicamente um mínimo de 2 configurações VPS. Cada um dos servidores estaria executando os mesmos serviços do Node (digamos, 5 serviços diferentes de uma vez em ambos os servidores), e cada VPS também executa uma instância do Redis, que é usada pelos serviços do Node para armazenar dados. O objetivo dessa configuração é habilitar o espelhamento de dados entre os dois servidores (se o serviço de nó nº 1 no primeiro servidor adicionou algo ao Redis, a alteração também deve ser refletida no segundo servidor). Isso também significa que os arquivos enviados etc. devem ser espelhados em ambos os servidores (no sentido de que as alterações nos datastores e sistemas de arquivos devem ser refletidas no outro).

Idealmente, isso permitiria balanceadores de carga simples que compartilhassem a carga entre os servidores e, no caso de uma única falha do servidor, os outros servidores continuariam em execução e, portanto, manteriam os serviços do Nó online. A velocidade com que as mudanças precisam ser espelhadas não é alta e até mesmo um atraso de um minuto não importaria. No entanto, se um usuário estiver atualizando ativamente os dados, ele deverá receber os dados que acabou de alterar (no sentido de que ele deve ser forçado a se comunicar com o servidor no qual atualizou os dados, pois as alterações podem não ter sido espelhadas no outros servidores ainda).

Perguntas

  1. Quais são as maneiras razoáveis de alcançar o balanceamento de carga? eu ouvi sobre o uso de alguma mágica do DNS, mas realmente não entendo isso. Simplesmente atualizando o DNS os registros seriam muito lentos, pois são armazenados em cache em vários lugares. Eu também leia sobre o uso de um servidor "proxy principal" que lidaria com o equilíbrio entre outros servidores. Isso parece um pouco arriscado, porque se o principal servidor falhou, tudo estaria offline.

  2. Como espelhar partes do sistema de arquivos em diferentes VPSs para que upload de imagens etc estaria presente em ambos os servidores. Há alguns amplas opções de software, ou seria um script simples que detecta carrega e, em seguida, replica esses arquivos em diferentes servidores de trabalho muito bem?

  3. O Redis ainda suporta o tipo de espelhamento que descrevi? eu apenas encontrou informações sobre a replicação mestre-escravo, que, se eu entendido corretamente, significa que as atualizações são unidirecionais, no sentido que o mestre pode atualizar o escravo, mas o escravo não pode atualizar o mestre.

Obrigado!

    
por zatatatata 02.11.2011 / 13:13

2 respostas

2

Pode ajudar apenas com a questão 1.

Existem várias abordagens para balanceamento de carga e failover (simpliest-first)

  1. round robing de DNS (balanceamento de carga e failover)
  2. DNS dinâmico (failover)
  3. Proxies (balanceamento de carga e failover)
  4. Failover de IP local (failover)
  5. BGP Anycast (balanceamento de carga e failover)
O

balanceamento de carga DNS é simples: digamos que você tenha dois (ou mais) servidores com IPs 1.1.1.1 e 2.2.2.2. Para configurar o balanceamento de carga DNS, você cria registros DNS para seu nome de host, por exemplo, www.example.com:

www.example.com. A 1.1.1.1
                 A 2.2.2.2

(Além disso, o servidor DNS deve ser configurado para servir esse nome no modo round-robin, mas geralmente é o padrão de qualquer maneira).

Agora, cada solicitação de DNS para www.example.com será respondida com dois endereços, em uma ordem pseudoaleatória, e, assim, seus clientes provavelmente se espalharão igualmente entre os servidores.

Não há necessidade de atualizar registros com frequência, uma vez configurado, funciona para sempre. Ele também fornece algum grau de failover, como se um dos hosts estivesse desativado, os navegadores expirassem e tentassem o segundo host, MAS pode haver um atraso considerável e os usuários não gostarão dele.

DNS dinâmico. Adição possível para 1., é uma vez dado host falhar, atualizar dinamicamente os registros DNS e remover a referência para o host com falha, mas muita cache no sistema DNS faz com que haja algum período de comportamento degradado que mencionei acima. Usando muito baixo TTL melhora a situação, mas ainda há caching dentro do sistema operacional do cliente / navegador que não vai considerar TTL, também alguns ISPs não desconsideram TTLs baixos também. De qualquer forma, bottomline - é uma maneira muito fácil e acessível de obter um balanceamento e um failover básico .

Proxies. Simples e popular para balanceamento de carga. Para eliminar o ponto único de falha, você precisa combiná-lo com outra (s) abordagem (s).

Failover de IP. Como adição a 2., para lidar com a falha do próprio proxy, dois proxies usados na configuração "IP failover" - a ideia básica é ter um endereço IP que normalmente aparece host1, mas quando ele falha, o host2 detecta e o IP aparece no host2. Procure pelo projeto "heartbeat" do Linux. (Você também pode fazer failover de servidores sem proxies, mas não terá balanceamento). Normalmente os dois PCs precisam estar na mesma sub-rede (mesmo datacenter).

A idéia do Anycast. é anunciar rotas para um único endereço IP (na verdade, uma única sub-rede) em alguns locais físicos. Você precisa da sua própria sub-rede / 24 e da capacidade de configurar o BGP. Anycast frequentemente usado para servidores DNS. Há dificuldades com conexões TCP persistentes e, portanto, mais facilmente se adapta a UDP e DNS, mas ainda às vezes usado para web também.

Essas são as ideias básicas. Como você vê, todo método tem limitações e complicações. E se não for complicado o suficiente, você pode construir qualquer combinação imaginável das abordagens acima:)

    
por 02.11.2011 / 15:52
2
  1. Leia sobre o marcapasso ( www.clusterlabs.org ). Ele pode gerenciar o recurso de cluster para balanceamento de carga e failover (serviços em execução e em movimento, ip, etc.)
  2. Há a próxima solução:
    • para o cluster de 2 nós, você pode usar o DRBD no modo ativo / passivo ( link );
    • para vários servidores, você pode usar o sistema de arquivos de cluster (por exemplo, GFS2);
    • se você tiver muitos arquivos e quiser uma sincronização muito rápida para vários nós, sugiro que a solução seja lsyncd .
  3. Eu não sei agora essa solução para os redis. Você pode usar o MongoDB e o conjunto de réplicas para essa finalidade.
por 09.11.2011 / 23:12