명령 행을 통해 haproxy에서 밸런스 노드를 제거하려면 어떻게해야합니까?


46

haproxy를 내로드 밸런서로 실행하고 haproxy와 함께 제공되는 통계 웹 인터페이스에서 웹 서버를 유지 관리 모드로 설정하고 다시 다시 가져올 수 있습니다.

그러나 또한 일부 자동화 된 배포 워크 플로에서 사용하기 위해 명령 줄에서 동일한 작업을 수행 할 수 있기를 원합니다. 이것이 가능합니까? 그렇다면 어떻게됩니까?

많은 감사

답변:


59

업데이트 (2012 년 8 월 28 일) : 요즘 haproxyctl 을 사용하는 경향이 있으며 , 아래에서 설명하는 방법을 사용합니다.


나는 같은 문제를 가진 다른 사람들을 위해 조금 더 연구 한 후에 고쳤습니다.

구성에 유닉스 소켓을 추가 한 다음 상호 작용할 수 있습니다 ( 여기 가능한 명령이 있습니다 ).

설정하기:

sudo nano /etc/haproxy/haproxy.cfg

'전역'섹션에서 다음을 추가하십시오.

stats socket /etc/haproxy/haproxysock level admin

(예를 들어, 당신의 haproxy 데몬을 다시 시작합니다 sudo service haproxy restart)

이제 socat이 필요합니다 ( apt-get install socat우분투 가 없다면 우분투 에서만 ).

이제이 명령을 해제하여 노드를 중단하기 만하면됩니다.

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

다시 불러 오려면 위의 명령에서 disable을 enable로 바꾸십시오.


21

beardwizzle의 echo 방법 외에도 대화식 으로이 작업을 수행 할 수 있습니다.

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
여기서 가장 함정은 데비안의 socat이 man 페이지에서 "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-이름이 maintenance.html (예 :) 인 파일이 존재하면 503 코드를 반환하도록 웹 서버를 구성하십시오. 아파치를 사용하면 다음과 같이 할 수 있습니다.

<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을 확인하도록 haproxy 백엔드를 구성하십시오.

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

데비안이 있고 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.