ฉันมีคอนเทนเนอร์นักเทียบท่าสองคอนเทนเนอร์ แต่ละคอนเทนเนอร์มีแอปพลิเคชันที่รันบนพอร์ต 8080 แอปพลิเคชันนี้มีปลายทาง REST "/ สถานะ" ที่สามารถส่งสัญญาณหากแอปพลิเคชันยังมีทรัพยากรที่จะยอมรับคำขออื่นจากผู้ใช้ คำขอของผู้ใช้จะถูกส่งต่อและปรับสมดุลไปยังคอนเทนเนอร์ทั้งสองโดยพร็อกซี Apache ที่จัดสรรภาระงาน
สิ่งที่ฉันต้องการบรรลุ:
- หากแอปพลิเคชันในคอนเทนเนอร์ส่งสัญญาณว่าไม่ต้องการรับคำขอเพิ่มเติม บาลานเซอร์จะไม่ส่งต่อคำขอไปยังคอนเทนเนอร์นี้
- ถ้า ทั้งหมด เรียกใช้สัญญาณเซิร์ฟเวอร์แอปพลิเคชันเพื่อไม่รับคำขอใด ๆ เซิร์ฟเวอร์ใดเซิร์ฟเวอร์หนึ่งควรได้รับคำขออยู่ดี
สิ่งที่ฉันกำหนดค่า:
<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>
ดังที่คุณเห็นที่นี่ application1 ถูกกำหนดให้เป็น hot standby และควรเป็น "เหยื่อ" ในการจัดการคำขอหาก BalanceMembers อื่น ๆ ทั้งหมด "ออฟไลน์" สำหรับคำขอใหม่
งานอะไร:
- คำขอมีการโหลดที่สมดุลกับ BalancerMembers ทั้งสอง
- application1 และ application2 สามารถส่งสัญญาณไม่รับคำขอใดๆ ในกรณีนี้ BalancerMembers ทั้งสองจะแสดงสถานะ "Init HcFl" ที่คาดไว้บนหน้า Balancer Manager
อะไรไม่ทำงาน:
- application1 ไม่แสดงเป็น hot standby บนหน้า Balance Manager
- ดังนั้นคำขอจะไม่ถูกส่งต่อไปยังแอปพลิเคชัน1
เป็นไปได้ แต่ฉันไม่ต้องการทำ:
- ถ้าฉันกำหนดค่า hot standby เพื่อส่งต่อไปยังพอร์ตอื่นบน application1 มันจะแสดงและส่งต่อคำขอไปยังพอร์ตนี้
ดูเหมือนว่า Apache เพิ่งลบ BalancerMember หากโฮสต์และพอร์ตเท่ากับ BalancerMember อื่น ฉันพลาดอะไรไปหรือมีวิธีอื่นในการบรรลุสิ่งที่ฉันต้องการหรือไม่?