Come posso rimuovere il nodo bilanciato da haproxy dalla riga di comando?


46

Ho haproxy in esecuzione come bilanciamento del carico e dall'interfaccia web stats fornita con haproxy, posso mettere un server web in modalità di manutenzione (e riportarlo di nuovo fuori) - il che è fantastico!

Tuttavia, desidero anche essere in grado di eseguire la stessa azione dalla riga di comando (per l'utilizzo in alcuni flussi di lavoro di distribuzione automatizzata). È possibile, e se sì, come?

Grazie molto

Risposte:


59

Aggiornamento (28 agosto 2012): Tendo a utilizzare oggi haproxyctl , che utilizza i metodi descritti di seguito.


L'ho risolto dopo un po 'più di ricerca, per chiunque abbia lo stesso problema: -

Puoi aggiungere un socket unix nella tua configurazione, quindi interagire con quello ( ecco i possibili comandi ).

Impostare:

sudo nano /etc/haproxy/haproxy.cfg

Nella sezione "globale" aggiungi:

stats socket /etc/haproxy/haproxysock level admin

Riavvia il tuo demone haproxy (ad es. sudo service haproxy restart)

Ora hai bisogno di socat (se non ce l'hai, solo apt-get install socatsu Ubuntu).

Ora tutto ciò che devi fare è disattivare questo comando per eliminare un nodo:

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

Per ripristinarlo, sostituire disabilita con abilita nel comando sopra.


21

Oltre al metodo echo di beardwizzle, puoi anche farlo in modo interattivo:

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

6
Una grande trappola qui è che la socat di Debian non supporta "readline" anche se lo dice nella pagina man. Lo hanno corretto a causa di uno scontro di licenza tra libreadline (GPL) e OpenSSL. In questo caso usi socat /var/run/haproxy.stat stdioper ogni singolo comando
bentolor

7

Se non hai accesso a netcat ( nc) puoi usarlo per interagire con il file socket di HAProxy in modo simile 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

Per disabilitare un server:

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

Assicurarsi che il file socket abbia il livello di accesso appropriato per eseguire quanto sopra. Principalmente qualcosa del genere:

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

Altrimenti otterrai errori di autorizzazione negati:

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

$

Riferimenti


7

Il modo semplice è:

1 - Configura il tuo server web per restituire il codice 503 se esiste un file chiamato maintenance.html (ad esempio). Con apache puoi farlo come segue:

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

2 - Configura il tuo backend haproxy per controllare un URL invece di controllare solo una porta come segue:

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 - Riavvia il server web e il bilanciamento del carico.

4 - Metti il ​​tuo server web in modalità manutenzione.

touch /var/www/maintenance.html

5 - Rimuovere il server Web dalla modalità di manutenzione.

rm -f /var/www/maintenance.html

2

È inoltre possibile "rimuovere" temporaneamente la pagina di controllo dello stato da un server, per arrestare l'endpoint e quindi pubblicare l'applicazione.


0

Se hai debian, readline non funziona, netcat è un'opzione migliore per interattivo:

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
...

Non interattivo:

echo "show info;show stat" | sudo nc -U /etc/haproxy/haproxysock
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.