ปัญหา
ฉันใช้ haproxy เพื่อโหลดเว็บเซิร์ฟเวอร์ที่มีความสมดุล ฉันใช้การคงอยู่ของเซสชันกับคุกกี้เพิ่มเติมเนื่องจากบางแอปพลิเคชันใช้ไฟล์เซสชันและสิ่งเหล่านี้จะไม่ซิงโครไนซ์ระหว่างเซิร์ฟเวอร์
ฉันต้องการที่จะปิดการใช้งานเซิร์ฟเวอร์เพื่อการบำรุงรักษา แต่ไม่มีการทำลายเซสชัน ดังนั้นฉันต้องการอนุญาตให้ลูกค้าที่มีอยู่เพื่อดำเนินการต่อแอปพลิเคชันของพวกเขา แต่ไม่ยอมรับลูกค้าใหม่
พฤติกรรม haproxy
- ฉันตั้งเซิร์ฟเวอร์เป็น "กำลังบำรุงรักษา"
- หากลูกค้ามีชุดคุกกี้ให้ใช้เซิร์ฟเวอร์แม้ว่าทำเครื่องหมายว่า "กำลังเข้าสู่การบำรุงรักษา"
- หากมีลูกค้าใหม่ (ไม่มีคุกกี้) จะถูกส่งไปยังเซิร์ฟเวอร์อื่น
- หลังจากไคลเอนต์ทั้งหมดจบเซสชันแอปพลิเคชันแล้วจะไม่มีลูกค้าตั้งคุกกี้ไว้ที่เซิร์ฟเวอร์นี้อีกต่อไปและฉันก็ยินดีที่จะปิดมันโดยไม่ทำให้ผู้ใช้หยุดชะงัก
คุณคิดว่าสิ่งนี้สามารถทำได้ด้วยการกำหนดค่า haproxy บ้างไหม? หรือมีวิธีที่ชาญฉลาดที่จะทำมัน?
ทางอื่น
รายการอื่น ๆ ที่ไม่ครบถ้วนสมบูรณ์เพื่อให้บรรลุความต้องการนี้
- ซิงโครไนซ์ไฟล์เซสชันระหว่างเซิร์ฟเวอร์ (ต้องการวิธีการซิงโครไนซ์ไฟล์ระหว่างเซิร์ฟเวอร์หลายเครื่องหรือจุดเมานต์เดียวทั่วไป)
- ใช้ฐานข้อมูลเพื่อเก็บข้อมูลเซสชัน (จำเป็นต้องเปลี่ยนพฤติกรรมของแอปพลิเคชัน)
รายละเอียดเพิ่มเติม
ฉันใช้การกำหนดค่าประเภทนี้:
frontend https-in
bind xxx.xxx.xxx.xxx:443 ssl crt /etc/haproxy/ssl/_default.pem crt /etc/haproxy/ssl
reqadd X-Forwarded-Proto:\ https
acl APP1 hdr(host) -i APP1.atac.local
use_backend APP1 if APP1
default_backend _default
backend APP1
redirect scheme https if !{ ssl_fc }
mode http
balance roundrobin
cookie HAPROXY_SESSION insert indirect
option httpchk HEAD /haproxy_test_page.php HTTP/1.0\nUser-Agent:\ HAProxy
server SRV1 SRV1_IP:PORT cookie SRV1 check
server SRV2 SRV2_IP:PORT cookie SRV2 check
ถ้าฉันเพิ่งปิดการใช้งาน SRV1 (ด้วยคำสั่ง haproxy cli) ฉันคิดว่าแอปพลิเคชันเซสชันทั้งหมดที่เปิดบน SRV1 จะแตกหลังจากสิ้นสุด HTTP "เซสชัน" ปัจจุบัน นั่นถูกต้องใช่ไหม?