Tôi đang thiết lập HAProxy trước chỉ có 2 máy chủ phụ trợ, với một cấu hình cụ thể: mọi yêu cầu nên đến máy chủ A; nhưng, nếu máy chủ A trả về mã lỗi 5xx, tất cả yêu cầu sẽ chuyển đến máy chủ dự phòng B. Khi A trả về "lên", tất cả các yêu cầu sẽ chuyển đến A.
Tôi đang thử cấu hình này:
backend example_cluster
balance roundrobin
option httpclose
option forwardfor
option httpchk HEAD /ping.html HTTP/1.0\r\nHost:www.example.com
http-check disable-on-404
default-server error-limit 1 on-error mark-down
redirect scheme https if !{ ssl_fc }
server node1 1.2.3.4:80 check observe layer7
server node_back 5.6.7.8:443 backup ssl verify none
Nhưng nó không hoạt động vì hai lý do:
- Tất cả các yêu cầu được định tuyến đến máy chủ node_back (B), ngay cả khi nút1 (A) bật lên.
- Dường như không có httpcheck nào được thực hiện đối với máy chủ A; hoặc tốt hơn, trong syslog tôi không thấy bất kỳ lỗi nào liên quan đến máy chủ A.
Nếu tôi xóa dòng "tùy chọn httpchk" và hai dòng ngay bên dưới đó; và tôi cũng loại bỏ "quan sát lớp 7" trong máy chủ A; HAProxy hoạt động bằng cách định tuyến tất cả các yêu cầu đến nút A. Nhưng, rõ ràng, khi máy chủ A trả về 500, HAProxy không chuyển sang B. Vì vậy, tôi cho rằng vấn đề có thể nằm ở cấu hình httpchk tùy chọn.