Làm thế nào tôi có thể loại bỏ nút cân bằng khỏi haproxy thông qua dòng lệnh?


46

Tôi có haproxy chạy như bộ cân bằng tải của tôi và từ giao diện web thống kê đi kèm với haproxy, tôi có thể đặt một máy chủ web vào chế độ bảo trì (và đưa nó trở lại một lần nữa) - thật tuyệt!

Tuy nhiên, tôi cũng muốn có thể thực hiện hành động tương tự từ dòng lệnh (để sử dụng trong một số quy trình triển khai tự động). Điều này là có thể, và nếu vậy làm thế nào?

Cảm ơn nhiều

Câu trả lời:


59

Cập nhật (28 tháng 8 năm 2012): Hiện tại tôi có xu hướng sử dụng haproxyctl , sử dụng các phương pháp được mô tả dưới đây.


Tôi đã sửa nó sau khi nghiên cứu thêm một chút, cho bất kỳ ai khác có cùng vấn đề: -

Bạn có thể thêm một ổ cắm unix trong cấu hình của mình, sau đó tương tác với nó ( đây là các lệnh có thể ).

Để thiết lập:

sudo nano /etc/haproxy/haproxy.cfg

Trong phần 'toàn cầu' của bạn, hãy thêm vào:

stats socket /etc/haproxy/haproxysock level admin

Khởi động lại daemon haproxy của bạn (ví dụ sudo service haproxy restart)

Bây giờ bạn cần socat (nếu bạn không có nó, chỉ apt-get install socattrên Ubuntu).

Bây giờ tất cả những gì bạn cần làm là tắt lệnh này để gỡ xuống một nút:

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

Để đưa nó trở lại, thay thế vô hiệu hóa bằng enable trong lệnh trên.


21

Ngoài phương thức echo của râu, bạn cũng có thể thực hiện việc này một cách tương tác:

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
Một cạm bẫy lớn ở đây là socat của Debian không hỗ trợ "readline" mặc dù nó nói như vậy trong trang man. Họ đã vá nó do xung đột giấy phép giữa libreadline (GPL) và OpenSSL. Trong trường hợp này, bạn sử dụng socat /var/run/haproxy.stat stdiocho mọi lệnh đơn
bentolor

7

Nếu bạn chỉ có quyền truy cập vào netcat ( nc), bạn có thể sử dụng nó để tương tác với tệp ổ cắm của HAProxy theo cách tương tự 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

Để vô hiệu hóa máy chủ:

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

Hãy cẩn thận để đảm bảo rằng tệp ổ cắm có mức truy cập phù hợp để thực hiện các thao tác trên. Chủ yếu là một cái gì đó như thế này:

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

Nếu không, bạn sẽ nhận được quyền từ chối lỗi:

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

$

Người giới thiệu


7

Cách dễ dàng là:

1 - Định cấu hình máy chủ web của bạn để trả về mã 503 nếu một tệp có tên là bảo dưỡng.html (ví dụ) tồn tại. Với apache bạn có thể làm như sau:

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

2 - Định cấu hình phụ trợ haproxy của bạn để kiểm tra URL thay vì chỉ kiểm tra một cổng như sau:

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 - Khởi động lại máy chủ web của bạn và cân bằng tải.

4 - Đặt máy chủ web của bạn ở chế độ bảo trì.

touch /var/www/maintenance.html

5 - Loại bỏ máy chủ web của bạn khỏi chế độ bảo trì.

rm -f /var/www/maintenance.html

2

Bạn cũng có thể tạm thời "xóa" trang kiểm tra sức khỏe khỏi một máy chủ, để lấy điểm cuối xuống và sau đó xuất bản ứng dụng của bạn.


0

Nếu bạn có debian, readline không hoạt động, netcat là một lựa chọn tốt hơn để tương tác:

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

Không tương tác:

echo "show info;show stat" | sudo nc -U /etc/haproxy/haproxysock
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.