Existe um balanceador de carga que me permita derrubar um servidor manualmente ao implantar? [fechadas]

2

Parece que o HAProxy não permite isso. Temos servidores Tomcat no backend e planejamos usar o Apache + mod_jk para balancear a carga. Estamos pensando em migrar para algo mais completo, como o Netscaler, mas não estou sendo vendido, já que parte do que estou procurando é a capacidade de fazer uma implantação perfeita onde eu poderia remover um dos servidores Tomcat do balanceador de carga antes reinicializando-o.

    
por scott 26.10.2011 / 22:07

6 respostas

7

O HAProxy permite que você faça isso passando um comando para o soquete de estatísticas para desabilitar o servidor. Isso drenará as conexões (as conexões existentes para este servidor persistirão, mas nenhuma conexão nova será feita para ele).

Esta página fornece um bom resumo dos comandos disponíveis: link

e um exemplo de desativação:

echo "disable server <backend_name>/<server_name>" | socat stdio /var/run/haproxy.stat

onde /var/run/haproxy.stat é o soquete do domínio UNIX para os comandos, que é configurado no arquivo de configuração haproxy da seguinte forma:

global
    stats socket /var/run/haproxy.stat mode 600 level admin

ao lado de outras opções globais.

Se você não tiver para se comunicar no soquete via socat, você pode se conectar a ele como qualquer outro soquete de domínio UNIX, o que é bastante simples em Python, Perl, PHP, C, etc. socat é usado principalmente em exemplos por conveniência.

    
por 26.10.2011 / 22:39
3

O Apache pode fazer isso se você usar mod_proxy em vez de mod_jk ; mod_proxy_balancer pode integrar com mod_status para uma página de bagunça com nós balanceadores. Veja aqui .

    
por 26.10.2011 / 22:23
1

Eu uso o LVS (www.linuxvirtualserver.org), que permite alterar o peso de um servidor ou removê-lo da rotação a qualquer momento. Muito útil quando preciso instalar atualizações em servidores da Web.

    
por 26.10.2011 / 22:16
1

Desde que seu aplicativo permita que o estado de sessão do usuário seja atendido por todos os servidores por trás do balanceador de carga, praticamente todos os balanceadores de carga suportam isso. Se as sessões do aplicativo estiverem fixas no servidor físico com o qual o usuário está se comunicando, sua melhor opção é proibir novas conexões com o servidor que você deseja desativar e esperar até que todas as sessões tenham sido encerradas. Dependendo do seu aplicativo, isso pode ser em segundos ou horas.

    
por 26.10.2011 / 22:30
1

O NGINX permitirá que você faça isso e faça balanços de carga não justos.

Os blocos Defintion upstream permitem que você defina várias configurações sobre os servidores upstream para os quais as solicitações serão enviadas.

  • Este servidor está inativo
  • Este servidor é apenas para backup, não use se algum outro servidor estiver ativo
  • pare de usar este servidor se ele falhar mais de X vezes
  • com que frequência testar novamente um envio para ver se está em backup
  • ponderando cada servidor, permitindo direcionar o tráfego para onde sua capacidade está.
  • use 'ip_hash', o que tornará os clientes "fixos" em um back-end, desde que ele esteja ativo. O mesmo cliente sempre irá para o mesmo back-end, isso é requerido por alguns aplicativos que possuem dados de sessão persistentes que não são replicados para os outros fluxos de criação

Existe também a configuração proxy_next_upstream que permite que você faça com que o NGINX tente automaticamente um back-end diferente se retornar um resultado insatisfatório .

    
por 27.10.2011 / 05:21
1

Uma alternativa à sugestão de Socat do @James Little é que você também pode usar hatop para conectar-se à CLI do HAProxy para executar a desativação (ou qualquer um dos outros comandos):

hatop -s /var/run/haproxy.stat

Em seguida, aperte 5 (listado como 5-CLI na barra de menu inferior esquerda). Isto irá fornecer-lhe um prompt onde você pode inserir comandos para o HAProxy.

    
por 24.12.2012 / 06:27