Como posso remover o nó balanceado do haproxy via linha de comando?

46

Tenho o haproxy em execução como meu balanceador de carga e, a partir da interface da web de estatísticas que vem com o haproxy, posso colocar um servidor da web em modo de manutenção (e trazê-lo de volta novamente) - o que é ótimo!

No entanto, também quero poder executar a mesma ação na linha de comando (para uso em alguns fluxos de trabalho de implantação automatizada). Isso é possível e, em caso afirmativo, como?

Muito Obrigado

isNaN1247
fonte

Respostas:

59

Atualização (28 de agosto de 2012): Atualmente, uso o haproxyctl hoje em dia, que utiliza os métodos descritos abaixo.


Corrigi-o após um pouco mais de pesquisa, para qualquer pessoa com o mesmo problema: -

Você pode adicionar um soquete unix na sua configuração e interagir com isso ( aqui estão os comandos possíveis ).

Para configurar:

sudo nano /etc/haproxy/haproxy.cfg

Na sua seção "global", adicione:

stats socket /etc/haproxy/haproxysock level admin

Reinicie seu daemon haproxy (por exemplo sudo service haproxy restart)

Agora você precisa do socat (se não o tiver, apenas apt-get install socatno Ubuntu).

Agora tudo que você precisa fazer é disparar este comando para derrubar um nó:

echo "disable server yourbackendname/yourservername" | socat stdio /etc/haproxy/haproxysock

Para trazê-lo de volta, substitua desativar por ativar no comando acima.

isNaN1247
fonte
21

Além do método de eco do beardwizzle, você também pode fazer isso de forma interativa:

root@ny-lb01:/etc/haproxy# sudo socat readline /var/run/haproxy.stat 

prompt
> set timeout cli 1d
> disable server foo/web01
> help
Unknown command. Please enter one of the following commands only :
  clear counters : clear max statistics counters (add 'all' for all counters)
  clear table    : remove an entry from a table
  help           : this message
  prompt         : toggle interactive mode with prompt
  quit           : disconnect
  show info      : report information about the running process
  show stat      : report counters for each proxy and server
  show errors    : report last request and response errors for each proxy
  show sess [id] : report the list of current sessions or dump this session
  show table [id]: report table usage stats or dump this table's contents
  get weight     : report a server's current weight
  set weight     : change a server's weight
  set timeout    : change a timeout setting
  disable server : set a server in maintenance mode
  enable server  : re-enable a server that was previously in maintenance mode
Kyle Brandt
fonte
6
Uma grande armadilha aqui é que o socat do Debian não suporta "linha de leitura", embora o diga na página de manual. Eles o corrigiram devido a um conflito de licença entre libreadline (GPL) e OpenSSL. Neste caso você usa socat /var/run/haproxy.stat stdiopara cada comando único
bentolor
7

Se você tiver apenas acesso ao netcat ( nc), poderá usá-lo para interagir com o arquivo de soquete do HAProxy de maneira semelhante a socat.

$ echo "show info" | nc -U /var/lib/haproxy/stats | head -10
Name: HAProxy
Version: 1.5.2
Release_date: 2014/07/12
Nbproc: 1
Process_num: 1
Pid: 29745
Uptime: 0d 0h14m35s
Uptime_sec: 875
Memmax_MB: 0
Ulimit-n: 8034

Para desativar um servidor:

$ echo "enable server bk_dservers/ds02" | nc -U /var/lib/haproxy/stats

Tome cuidado para garantir que o arquivo de soquete tenha o nível de acesso apropriado para executar o procedimento acima. Principalmente algo parecido com isto:

stats       socket /var/lib/haproxy/stats level admin

Caso contrário, você receberá erros de permissão negada:

$ echo "disable server bk_dservers/ds02" | nc -U /var/lib/haproxy/stats
Permission denied

$

Referências

slm
fonte
7

O caminho mais fácil é:

1 - Configure seu servidor da web para retornar o código 503 se existir um arquivo chamado maintenance.html (por exemplo). Com o apache, você pode fazer o seguinte:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{ENV:REDIRECT_STATUS} !=503
  RewriteCond "/var/www/maintenance.html" -f
  RewriteRule ^(.*)$ /$1 [R=503,L]
</IfModule>

2 - Configure seu back-end haproxy para verificar uma URL em vez de apenas verificar uma porta da seguinte maneira:

backend site
    balance roundrobin
    option httpchk GET /index.html
    server myserver1.example.com 192.0.2.1:80 cookie S1 check inter 2000 fall 3
    server myserver2.example.com 192.0.2.2:80 cookie S2 check inter 2000 fall 3

3 - Reinicie o servidor da web e o balanceador de carga.

4 - Coloque seu servidor web em modo de manutenção.

touch /var/www/maintenance.html

5 - Remova o servidor da Web do modo de manutenção.

rm -f /var/www/maintenance.html
mijhael3000
fonte
2

Você também pode "remover" temporariamente a página de verificação de integridade de um servidor, para baixar o terminal e publicar seu aplicativo.

rafael oliveira
fonte
0

Se você possui o debian, o readline não funciona, o netcat é uma opção melhor para o interativo:

user@server:/etc/haproxy$ sudo nc -U /etc/haproxy/haproxysock
prompt
> show info
Name: HAProxy
Version: 1.7.11-1ppa1~xenial
Release_date: 2018/04/30
Nbproc: 1
Process_num: 1
Pid: 12307
Uptime: 0d 10h33m22s
...

Não interativo:

echo "show info;show stat" | sudo nc -U /etc/haproxy/haproxysock
wjenkins9
fonte