2015-03-25 17 views
5

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?

+1

Bạn đã giải quyết vấn đề này chưa? Tôi có cùng một vấn đề. –

+0

@CosmicOssifrage Xem câu trả lời dưới đây của Willy Tareau. –

Trả lời

4

Không có quy tắc nào để cho biết những gì cần lưu giữ trong cấu hình này. Thông thường bạn sẽ sử dụng kết hợp này với sự kiên trì dựa trên cookie. Ví dụ:

cookie SERVERID insert indirect nocache 
server srv1 1.1.1.1:80 cookie s1 check 
server srv2 2.2.2.2:80 cookie s2 check 
acl from_management_net src 10.0.0.0/8 
force-persist if from_management_net 

Sau đó, trên máy khách, truy cập máy chủ đầu tiên, nhận cookie, tắt máy chủ và truy cập lại, và bạn sẽ tiếp tục đến đó. Thông thường, mọi người triển khai một trang HTML cụ thể liệt kê tất cả các máy chủ và cookie tương ứng của họ, giúp chọn các máy chủ từ máy khách bằng cách chỉ cần nhấp vào chúng.

Các vấn đề liên quan