Tôi không chắc chắn nếu tôi thiếu một số cấu hình chính hoặc am hiểu về cơ bản mục đích của lực tồn tại trong haproxy (sử dụng phiên bản 1.5.11 trên Ubuntu 14.04) . Từ các tài liệu:cấu hình hoạt động cho haproxy với thiết lập lực kéo dài
Các "lực kéo dài" tuyên bố cho phép một tuyên bố khác nhau ACL dựa trên điều kiện mà khi gặp nhau, sẽ gây ra một yêu cầu để bỏ qua tình trạng xuống của một máy chủ và vẫn cố gắng kết nối cho nó. Điều đó làm cho nó có thể để bắt đầu một máy chủ , vẫn còn trả lời một lỗi để kiểm tra sức khỏe, và chạy một đặc biệt trình duyệt được cấu hình để kiểm tra dịch vụ.
Điều này nghe giống như hành vi tôi muốn, nơi tôi có thể đặt tất cả máy chủ ứng dụng vào "chế độ bảo trì" để giới thiệu mã, cho phép một số IP nhất định vẫn kết nối để kiểm tra, phát hành lại, trước khi cho mọi người truy cập lại. Dưới đây là cấu hình tôi đã thiết lập:
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
# Default ciphers to use on SSL-enabled listening sockets.
# For more information, see ciphers(1SSL).
ssl-default-bind-ciphers kEECDH+aRSA+AES:kRSA+AES:+AES256:RC4-SHA:!kEDH:!LOW:!EXP:!MD5:!aNULL:!eNULL
ssl-default-bind-options no-sslv3
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 300s
timeout client 50000
timeout server 50000
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
listen mysite
bind *:80
bind *:443 ssl crt mysite.pem
http-request set-header X-Forwarded-Port %[dst_port]
http-request add-header X-Forwarded-Proto https if { ssl_fc }
redirect scheme https if !{ ssl_fc }
balance roundrobin
option forwardfor
option httpchk HEAD /haproxy_health_check.php
acl whitelist src -f /etc/haproxy/whitelist.lst
force-persist if whitelist
server app-1 10.1.4.32:80 maxconn 20 check inter 10000
Với cấu hình này, tôi nghĩ tôi sẽ có thể thực hiện lệnh sau:
echo "disable server mysite/app-1" | socat /run/haproxy/admin.sock stdio
lấy máy chủ ứng dụng duy nhất ra khỏi luân chuyển, và miễn là tôi đến từ một địa chỉ IP được liệt kê trong /etc/haproxy/whitelist.lst, tôi vẫn có thể xem trang web như thể máy chủ vẫn được kích hoạt. Tuy nhiên, những gì tôi nhìn thấy cuối cùng là trang lỗi 503, mà tôi mong đợi bình thường nếu tôi là người dùng thông thường, nhưng không đến từ IP được đưa vào danh sách trắng. Để loại bỏ khả năng rằng tôi đã sai quy định cụ thể các địa chỉ IP, hoặc bằng cách sử dụng lệnh acl không đúng cách, tôi đã cố gắng một biến thể, nơi tôi chỉ cần đặt:
force-persist if TRUE
Từ đọc sách của tôi các tài liệu, tôi nghĩ rằng điều này sẽ hành động như thể tôi không bao giờ tắt máy chủ cho dù IP tôi đến từ đâu. Rất tiếc, tôi vẫn nhận được số điện thoại 503.
Có nhiều cách khác nhau, liên quan đến việc cấu hình thêm và tải lại haproxy, mà tôi có thể sử dụng để làm việc này, nhưng "lực kéo" cùng với khả năng vô hiệu hóa thông qua lệnh dòng có vẻ giống như một cách tiếp cận thanh lịch hơn nhiều, và tôi chắc chắn sẽ thích nó nếu tôi có thể làm cho nó hoạt động.
Có ai khác đã cố gắng làm cho haproxy hoạt động theo cách này không? Tôi có sai để giải thích "lực kéo dài" theo cách này không? Tôi có cần thêm một chút cấu hình để nó hoạt động không?
Bạn đã giải quyết vấn đề này chưa? Tôi có cùng một vấn đề. –
@CosmicOssifrage Xem câu trả lời dưới đây của Willy Tareau. –