Tôi có hai bộ chứa docker, mỗi bộ chứa một ứng dụng đang chạy trên cổng 8080. Ứng dụng này có điểm cuối REST "/ status" có thể báo hiệu nếu ứng dụng vẫn có tài nguyên để chấp nhận yêu cầu khác của người dùng. Yêu cầu của người dùng sẽ được chuyển tiếp và cân bằng tới hai vùng chứa bằng một proxy Apache cân bằng tải.
Những gì tôi muốn đạt được:
- Nếu ứng dụng trong vùng chứa báo hiệu rằng nó không muốn nhận thêm yêu cầu thì bộ cân bằng sẽ không chuyển tiếp yêu cầu tới vùng chứa này
- Nếu mọi đang chạy tín hiệu máy chủ ứng dụng để không nhận bất kỳ yêu cầu nào, dù sao thì một trong những máy chủ đó sẽ nhận được yêu cầu.
Những gì tôi đã cấu hình:
<VirtualHost *:80>
ProxyRequests off
ProxyPreserveHost On
ProxyHCExpr status_ok {hc('body') ~ /Status: ok/}
<Proxy balancer://application-cluster>
BalancerMember http://application1:8080 route=worker1 hcexpr=status_ok hcmethod=get hcuri=/status
BalancerMember http://application2:8080 route=worker2 hcexpr=status_ok hcmethod=get hcuri=/status
BalancerMember http://application1:8080 route=standby status=+H
ProxySet lbmethod=byrequests
</Proxy>
<Location /balancer-manager>
SetHandler balancer-manager
</Location>
ProxyPass /balancer-manager !
ProxyPass / balancer://application-cluster/
ProxyPassReverse / balancer://application-cluster/
</VirtualHost>
Như bạn có thể thấy ở đây, ứng dụng1 được xác định là dự phòng nóng và phải là "nạn nhân" để xử lý các yêu cầu nếu tất cả các Thành viên Cân bằng khác đang "ngoại tuyến" cho các yêu cầu mới
Những gì hoạt động:
- Các yêu cầu được cân bằng tải cho cả hai thành viên Balancer.
- application1 và application2 có thể báo hiệu không nhận bất kỳ yêu cầu nào. Trong trường hợp này, cả hai Thành viên cân bằng đều hiển thị trạng thái dự kiến "Khởi tạo HcFl" trên trang Trình quản lý cân bằng.
Những gì không hoạt động:
- ứng dụng1 không hiển thị dưới dạng chế độ chờ nóng trên trang Trình quản lý số dư
- Do đó, các yêu cầu sẽ không được chuyển tiếp đến ứng dụng1
Điều gì là có thể nhưng tôi không muốn làm:
- Nếu tôi định cấu hình chế độ chờ nóng để chuyển tiếp sang một cổng khác trên ứng dụng1, nó sẽ hiển thị và chuyển tiếp các yêu cầu tới cổng này.
Có vẻ như Apache chỉ xóa một BalancerMember nếu máy chủ và cổng bằng với một BalancerMember khác. Tôi có bỏ lỡ điều gì hay có cách nào khác để đạt được điều tôi muốn không?