Как я могу удалить сбалансированный узел из haproxy через командную строку?

Имейте чтение раздела Debian VMware - Инструкция по установке Гостевой операционной системы и удостоверьтесь, что Инструменты VMware установлены и отмечают следующее:

  • При выполнении 64‐bit гостевая операционная система Linux на аппаратных средствах EM64T, удостоверьтесь, что Вы имеете, Выполняются
    Отключите функциональность, добавленную в хосте BIOS. Это помогает гарантировать, что гостевая операционная система Linux работает без прерывания.
  • Со многими гостевыми операционными системами Linux наблюдались различные проблемы, когда BusLogic виртуальный адаптер SCSI используется с виртуальными машинами VMware. VMware рекомендует использовать Логику LSI виртуальный адаптер SCSI с этой гостевой операционной системой.

Также проверьте Гостя VMware Compatabilty Guide на любые конкретные требования Debian включая рекомендации на типах виртуального аппаратного обеспечения для использования.

46
задан 19 March 2011 в 17:44
7 ответов

Обновление (28 августа 2012): Я теперь склонен использовать haproxyctl в наше время, который использует методы, описанные ниже.


Я зафиксировал его после немного большего количества исследования для кого-либо еще с той же проблемой:-

Можно добавить сокет Unix в конфигурации, затем взаимодействовать с тем (вот возможные команды).

Настраивать:

sudo nano /etc/haproxy/haproxy.cfg

В Вашем 'глобальном' разделе включите:

stats socket /etc/haproxy/haproxysock level admin

Перезапустите своего haproxy демона (например. sudo service haproxy restart)

Теперь Вам нужен socat (если у Вас нет его, просто apt-get install socat на Ubuntu).

Теперь все, что необходимо сделать, исчерпывают эту команду для приведения в нерабочее состояние узла:

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

Для возвращения его заменяют, отключают с, включают в команде выше.

59
ответ дан 28 November 2019 в 19:39

В дополнение к методу эха beardwizzle можно также сделать это в интерактивном режиме:

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
21
ответ дан 28 November 2019 в 19:39

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

2
ответ дан 28 November 2019 в 19:39

Если у вас есть доступ только к 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
ответ дан 28 November 2019 в 19:39

Простой способ:

1 - Настройте свой веб-сервер на возврат кода 503, если существует файл с именем maintenance.html (например). С помощью apache вы можете сделать это следующим образом:

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

2 - Настройте серверную часть haproxy для проверки 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
7
ответ дан 28 November 2019 в 19:39

Если у вас есть 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
0
ответ дан 28 November 2019 в 19:39

В HAProxy 1.8 вы также можете использовать установить состояние сервера:


перевести сервер в режим обслуживания (или слива):

echo "set server backend_name/sever_name state maint" | socat stdio /path_to_admin_socket_file
echo "set server backend_name/sever_name state drain" | socat stdio /path_to_admin_socket_file

перевести сервер обратно в режим готовности:

echo "set server backend_name/sever_name state ready" | socat stdio /path_to_admin_socket_file
0
ответ дан 15 April 2021 в 17:33

Теги

Похожие вопросы