Vraag Hoe kan ik gebalanceerd knooppunt van haproxy via de opdrachtregel verwijderen?


Ik heb haproxy als mijn load-balancer en vanuit de webinterface van statistieken die met haproxy wordt meegeleverd, kan ik een webserver in de onderhoudsmodus plaatsen (en weer terughalen) - geweldig!

Ik wil echter ook diezelfde actie kunnen uitvoeren vanaf de opdrachtregel (voor gebruik in sommige geautomatiseerde implementatiewerkstromen). Is dit mogelijk en zo ja, hoe?

Erg bedankt


44
2018-03-19 15:44


oorsprong




antwoorden:


Update (28 augustus 2012): Ik heb nu de neiging om te gebruiken haproxyctl tegenwoordig, die gebruik maakt van de hieronder beschreven methoden.


Ik heb het verholpen na wat meer onderzoek, voor iemand anders met hetzelfde probleem:

U kunt een Unix-socket toevoegen aan uw configuratie en daar vervolgens mee omgaan (hier zijn de mogelijke commando's).

Opzetten:

sudo nano /etc/haproxy/haproxy.cfg

Voeg in je 'globale' sectie toe:

stats socket /etc/haproxy/haproxysock level admin

Start uw haproxy-daemon opnieuw (bijv. sudo service haproxy restart)

Nu heb je socat nodig (als je het niet hebt, gewoon apt-get install socat op Ubuntu).

Nu hoeft u alleen nog maar dit commando af te vuren om een ​​node te verwijderen:

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

Om de back-up te herstellen, vervang je Disable met enable in de bovenstaande opdracht.


53
2018-03-19 17:26





Naast de echo-methode van beardwizzle, kun je dit ook interactief doen:

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

20
2018-03-20 14:29



EEN groot valkuil hier is dat de socat van Debian geen "leesregel" ondersteunt, hoewel het zo staat in de man-pagina. Ze patched itout vanwege een licentieclash tussen libreadline (GPL) en OpenSSL. In dit geval gebruik je socat /var/run/haproxy.stat stdio voor elke afzonderlijke opdracht - Ben Tebulin


Voor de kans dat je alleen toegang hebt tot netcat (nc) u kunt het gebruiken om op dezelfde manier als in het contactbestand van HAProxy te communiceren 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

Om een ​​server uit te schakelen:

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

Zorg ervoor dat het socketbestand het juiste toegangsniveau heeft om het bovenstaande uit te voeren. Voornamelijk zoiets als dit:

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

Anders krijg je fouten waarvoor toestemming is geweigerd:

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

$

Referenties


6
2018-06-09 21:40





De gemakkelijke manier is:

1 - Configureer uw webserver om 503-code te retourneren als er een bestand met de naam maintenance.html (bijvoorbeeld) bestaat. Met apache kun je het als volgt doen:

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

2 - Configureer uw haproxy-backend om een ​​URL te controleren in plaats van alleen een poort als volgt te controleren:

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

3 - Start uw webserver opnieuw en laad balancer.

4 - Zet uw webserver in onderhoudsmodus.

touch /var/www/maintenance.html

5 - Verwijder uw webserver uit de onderhoudsmodus.

rm -f /var/www/maintenance.html

5
2017-07-11 05:10





U kunt de healthcheck-pagina ook tijdelijk van de ene server "verwijderen" om het eindpunt te vinden en vervolgens uw toepassing te publiceren.


2
2018-01-28 17:39