Як я можу видалити врівноважений вузол з haproxy за допомогою командного рядка?


46

У мене haproxy працює як мій балансир завантаження, і з веб-інтерфейсу статистики, який постачається з haproxy, я можу перевести веб-сервер у режим обслуговування (і знову повернути його назад) - що чудово!

Однак я також хочу мати можливість виконувати ту саму дію з командного рядка (для використання в деяких робочих процесах автоматизованого розгортання). Чи можливо це, і якщо так, як?

Дуже дякую

Відповіді:


59

Оновлення (28 серпня 2012 р.): Я зараз схильний використовувати хапроксиктл , який використовує описані нижче методи.


Я виправив це після ще кількох досліджень для тих, хто ще з тим же питанням: -

Ви можете додати unix-сокет у свій конфігурацію, а потім взаємодіяти з цим ( ось можливі команди ).

Встановлювати:

sudo nano /etc/haproxy/haproxy.cfg

У свій "глобальний" розділ додайте:

stats socket /etc/haproxy/haproxysock level admin

Перезавантажте свій хапрокси-демон (наприклад sudo service haproxy restart)

Тепер вам потрібен socat (якщо у вас його немає, просто apt-get install socatна Ubuntu).

Тепер все, що вам потрібно зробити, це запустити цю команду, щоб зняти вузол:

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

Щоб повернути його, замініть відключити функцією enable в команді вище.


21

Окрім методу відлуння від бородавки, ви також можете це робити інтерактивно:

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
Велика пастка тут є те , що Соката Debian не підтримує «Readline» , хоча він каже , що так на сторінці людини. Вони виправили це через зіткнення ліцензії між libreadline (GPL) та OpenSSL. У цьому випадку ви використовуєте socat /var/run/haproxy.stat stdioдля кожної команди
bentolor

7

За винятком випадків, що у вас є лише доступ до netcat ( nc), ви можете використовувати його для взаємодії з файлом сокетів HAProxy аналогічним чином 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

Щоб відключити сервер:

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

Слідкуйте за тим, щоб файл сокета мав відповідний рівень доступу для виконання вищевказаного. В основному щось подібне:

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

В іншому випадку ви отримаєте відхилені в дозволі помилки:

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

$

Список літератури


7

Найпростіший спосіб:

1 - Налаштуйте веб-сервер для повернення коду 503, якщо існує файл з назвою support.html (наприклад). З апашем ви можете це зробити так:

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

2 - Налаштуйте свій проспект хапрокси, щоб перевірити URL, а не перевіряти порт, як описано нижче:

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 - Перезавантажте веб-сервер і балансир завантаження.

4 - Переведіть веб-сервер у режим обслуговування.

touch /var/www/maintenance.html

5 - Вийміть веб-сервер з режиму обслуговування.

rm -f /var/www/maintenance.html

2

Ви також можете тимчасово "видалити" сторінку перевірки стану здоров'я з одного сервера, щоб знизити кінцеву точку, а потім опублікувати свою заявку.


0

Якщо у вас debian, readline не працює, netcat - кращий варіант для інтерактивних:

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

Не інтерактивний:

echo "show info;show stat" | sudo nc -U /etc/haproxy/haproxysock
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.