Gostaria de implantar um balanceador de carga de proxy reverso/HTTP na frente de vários servidores de aplicativos de back-end. O problema é que o conjunto de back-ends pode mudar com o tempo e novos servidores de aplicativos podem ser criados dinamicamente (portanto, o conjunto total não pode ser conhecido antecipadamente). Isso significa algo comoVerniz, que pode realizar verificações de integridade em relação a umconhecidoconjunto de back-ends, não é uma opção.
O melhor que consegui é o prg
RewriteMap
suporte no Apache combinado com RewriteRule
expressões de proxy. Eu criei um mecanismo cliente/servidor simples para os servidores de aplicativos se "registrarem" no front-end e um RewriteMap
programa que seleciona back-ends dessa lista. Funciona, mas cheirarealmentehackeado.
Este parece ser um cenário razoavelmente comum (com tantos provedores de serviços em nuvem por aí que facilitam a criação de novos servidores sob demanda). Como outras pessoas estão resolvendo esse problema? Você está usando apenas um balanceador de carga comercial? Todos estão preparando algo por conta própria?
Responder1
O módulo mod_proxy_balancer integrado (bem fornecido) do Apache fornece a maior parte dessa funcionalidade, incluindo ponderação individual e integração e eliminação controladas de back-ends de membros.
Há também um aplicativo gerenciador de balanceador para visualizar e controlar esse comportamento em tempo de execução.
Veja aqui para detalhes:http://httpd.apache.org/docs/2.2/mod/mod_proxy_balancer.html
Responder2
O nginx não suporta isso imediatamente, mas é muito fácil de implementar. Eu fiz isso abaixo explicado em detalhes
1) crie um arquivo de configuração separado apenas para upstreams (upstreams.conf) e inclua-os no nginx.conf principal 2) agora você pode editar este arquivo manualmente ou script separadamente, escrevi um script perl simples para gerenciar este arquivo adicionar/excluir texto linhas com descrição upstream. 3) enviar sinal HUP para o processo principal do nginx para emitir recarga normal 4) Alguma UI da web foi implementada para controlar essas operações e fornecer verificações de integridade, mas não é FOSS
Dispute que existem alguns módulos secundários que implementam verificação de integridade e interface de gerenciamento, por favor, dê uma olhada em
http://wiki.nginx.org/HttpHealthcheckModule https://bitbucket.org/benjaminws/nginxmgr/ https://github.com/FRiCKLE/ngx_supervisord
Não tenho certeza, mas pode ser que o haproxy também tenha alguma funcionalidade.
Responder3
Quase todas as soluções comerciais de balanceamento de carga (F5, Citrix, A10, etc) possuem APIs de gerenciamento de configuração (baseadas em REST ou SOAP) que podem ser facilmente aproveitadas para esse propósito - os servidores podem adicionar-se aos pools relevantes como parte de seu roteamento de inicialização e excluem-se quando são desligados. Se um servidor travar, o LB o marcaria devido a falhas na verificação de integridade.