Jak mogę usunąć zbalansowany węzeł z haproxy za pomocą wiersza poleceń?

46

Mam haproxy działający jako mój moduł równoważenia obciążenia i z interfejsu internetowego statystyk dostarczanego z haproxy mogę wprowadzić serwer sieciowy w tryb konserwacji (i przywrócić go ponownie) - co jest świetne!

Jednak chcę również móc wykonać tę samą akcję z wiersza polecenia (do użycia w niektórych przepływach pracy automatycznego wdrażania). Czy to możliwe, a jeśli tak, to w jaki sposób?

Wielkie dzięki

isNaN1247
źródło

Odpowiedzi:

59

Aktualizacja (28 sierpnia 2012 r.): Obecnie używam haproxyctl , który wykorzystuje metody opisane poniżej.


Naprawiłem to po trochę więcej badań, dla każdego, kto ma ten sam problem: -

Możesz dodać gniazdo uniksowe do swojej konfiguracji, a następnie wejść w interakcję z nim ( tutaj są możliwe polecenia ).

Ustawić:

sudo nano /etc/haproxy/haproxy.cfg

W sekcji „globalnej” dodaj:

stats socket /etc/haproxy/haproxysock level admin

Uruchom ponownie demona haproxy (np. sudo service haproxy restart)

Teraz potrzebujesz socat (jeśli go nie masz, tylko apt-get install socatna Ubuntu).

Teraz wystarczy, że uruchomisz to polecenie, aby usunąć węzeł:

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

Aby przywrócić go z powrotem, zamień na „enable” w powyższym poleceniu.

isNaN1247
źródło
21

Oprócz metody echa beardwizzle, możesz także zrobić to interaktywnie:

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
źródło
6
Wielka pułapka tutaj jest to, że socat Debiana nie obsługuje „readline” choć tak mówi w manualu. Rozwiązali go z powodu starcia licencji między libreadline (GPL) a OpenSSL. W tym przypadku używasz socat /var/run/haproxy.stat stdiokażdego polecenia
bentolor
7

Przy ncmałej szansie, że masz dostęp tylko do netcat ( ), możesz użyć go do interakcji z plikiem gniazda HAProxy w podobny sposób 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

Aby wyłączyć serwer:

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

Upewnij się, że plik gniazda ma odpowiedni poziom dostępu, aby wykonać powyższe czynności. Głównie coś takiego:

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

W przeciwnym razie otrzymasz błędy odmowy uprawnień:

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

$

Bibliografia

slm
źródło
7

Prosty sposób to:

1 - Skonfiguruj serwer WWW, aby zwracał kod 503, jeśli istnieje plik o nazwie Maintenance.html (na przykład). Z Apache możesz to zrobić w następujący sposób:

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

2 - Skonfiguruj backend haproxy, aby sprawdzał adres URL zamiast tylko sprawdzania portu w następujący sposób:

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 - Uruchom ponownie serwer WWW i moduł równoważenia obciążenia.

4 - Przełącz serwer WWW w tryb konserwacji.

touch /var/www/maintenance.html

5 - Usuń serwer WWW z trybu konserwacji.

rm -f /var/www/maintenance.html
mijhael3000
źródło
2

Możesz także tymczasowo „usunąć” stronę kontroli kondycji z jednego serwera, aby obniżyć punkt końcowy, a następnie opublikować aplikację.

Rafael Oliveira
źródło
0

Jeśli masz Debiana, readline nie działa, netcat jest lepszą opcją dla interaktywnych:

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

Nieinteraktywny:

echo "show info;show stat" | sudo nc -U /etc/haproxy/haproxysock
wjenkins9
źródło