Servidor de balanceamento de carga, como posso implementá-lo?

Pesquisei no Google para equilibrar cargas, mas a única coisa que consigo encontrar é a teoria do trabalho, que neste momento é a parte "fácil" para mim. Mas zero exemplos de como implementar um.

Tenho várias questões relacionadas com a compensação de cargas:

  1. Eu tenho um domínio (example.com) e eu por trás disso eu tenho um servidor de balanceamento de carga (vamos chamá-lo a) que, de acordo com a teoria, vai pedir ao cliente para fechar a conexão com A, e conectar-se a B, Um sub-servidor e continue o pedido com B. O cliente, em um navegador da web, deixará de ver "example.com/page.html" na barra de endereços e começar a ver " B_ip_address / page.html " instead?

  2. Como posso implementar um simples balancer de carga do zero? A minha dúvida aponta para a parte HTTP. Há alguma mensagem específica ou conjunto de mensagens que preciso enviar ao cliente que o faça desligar-se de mim e ligar-se a um sub-servidor?

  3. Que tal protocolos de nível mais baixo do que HTTP, tais como TCP / IP, existem pacotes padrão para dizer ao cliente que ele acabou de se conectar a um servidor balancer de carga e agora ele precisa se conectar ao xxx.xxx.xxx.xxx para continuar o pedido?

  4. Qual é o método mais utilizado? (1) o cliente se conecta ao servidor de balanceamento de carga, e pede ao cliente para conectar diretamente a um dos sub-servidores, ou (2) o servidor de balanceamento de carga inicia-ponte todo o tráfego do cliente para o sub-servidor e vice-versa, de forma transparente moda?

então a pergunta 2, 3 e 4 considera o protocolo de equilibragem de carga, e a primeira a forma como um nome de domínio pode ser ligado a um balancer de carga e quais são as consequências subjacentes.

Author: vhu, 2015-07-28

1 answers

A tua abordagem é uma espécie de balanceamento de carga estática, redireccionando as chamadas para outro servidor. Todas as chamadas seguintes podem usar este outro servidor ou são enviadas para o balancer de carga novamente para redirecionar.

Uma implementação depende da implementação do seu sistema. Um balancer de carga funciona melhor para pedidos independentes sem estado de sessão. Você precisa sincronizar o estado de sessão de outra forma entre os servidores" end". Ou usar uma loja de sessões partilhada para fornecer o estado de sessão a todos servidor.

Existe uma solução simples e transparente para equilibrar a carga do Servidor HTTP. Você pode usar o módulo de balanceamento de carga de um servidor nginx ( http://nginx.org/en/docs/http/load_balancing.html ). isto pode ser usado para os pedidos de HTTP e HTTPS. E pode ser estendido com servidores extras dinamicamente se a carga aumentar. Precisa de editar a configuração do nginx e reiniciar o servidor. Isto pode ser transparente para as conexões existentes. E nginx não causa problemas com a alterar os nomes dos domínios ou máquinas.

Outros protocolos precisam de algum suporte do cliente e do servidor. A equilibragem de carga pode ser transparente se um dispositivo especializado estiver entre o cliente e o servidor. Ou o protocolo de comunicação precisa suportar redirecionamentos de conexão.

Editar: Balanceamento de carga também pode ser implementado pelo DNS round robin. Cada chamada de pesquisa DNS retorna outro endereço IP para o mesmo nome de domínio. O cliente escolhe um IP e liga-se a este servidor. Outro cliente pode usar o próximo IP. O nome da barra de endereços é sempre o mesmo.

Exemplo:

Non-authoritative answer:
Name:    www.google.com
Addresses:  2a00:1450:4001:80f::1010
      173.194.116.209
      173.194.116.210
      173.194.116.212
      173.194.116.211
      173.194.116.208

Non-authoritative answer:
Name:    www.google.com
Addresses:  2a00:1450:4001:80f::1010
      173.194.116.210
      173.194.116.212
      173.194.116.211
      173.194.116.208
      173.194.116.209

Non-authoritative answer:
Name:    www.google.com
Addresses:  2a00:1450:4001:80f::1010
      173.194.116.212
      173.194.116.211
      173.194.116.208
      173.194.116.209
      173.194.116.210

O intervalo de endereços IP roda. A maioria dos balancers de carga HTTP funcionam como balancer de carga transparente como nginx ou outras implementações de proxy inversas. Um balancer de carga redirecionado é mais uma implementação de baixa tecnologia, eu acho.

O TCP / IP não é um protocolo. É a camada de transporte usada para transferir dados implementando um protocolo de comunicação específico. Enquanto o próprio TCP / IP é um protocolo para os componentes de rede. Mas não as candidaturas. Pode verificar https://en.wikipedia.org/wiki/OSI_model

 3
Author: Konrad, 2015-07-28 19:10:53