Sorun
Denge web sunucularını yüklemek için haproxy kullanıyorum. Bazı uygulamalar oturum dosyalarını kullandığından ve bunlar sunucular arasında senkronize edilmediğinden oturum çerezlerini ek çerezlerle birlikte kullanıyorum.
Sunucuyu bakım için, ancak oturumları kesmeden devre dışı bırakmak istiyorum. Bu nedenle mevcut istemcilerin uygulama oturumlarına devam etmelerine izin vermek istiyorum, ancak yeni istemcileri kabul etmiyorum.
alkoksi davranışı
- Bir sunucuyu "bakıma" ayarladım
- bir istemcinin çerez seti varsa, "bakıma gidiyor" olarak işaretlenmiş olsa bile sunucuyu kullanın
- yeni bir istemci (çerez olmadan) gelirse, başka bir sunucuya yönlendirilir
- tüm istemciler uygulama oturumlarını bitirdikten sonra, artık hiçbir istemci bu özel sunucuya çerez ayarlayamazdı ve ben kullanıcı kesintisi olmadan kapatmak iyi olurdu.
Bunun bazı haproksi yapılandırmalarıyla gerçekleştirilebileceğini düşünüyor musunuz? Yoksa bunu yapmanın akıllıca bir yolu var mı?
Diğer yollar
Bu ihtiyacı karşılamanın diğer yollarının kapsamlı olmayan listesi:
- oturum dosyalarını sunucular arasında senkronize etme (dosyaları birkaç sunucu arasında senkronize etmenin bir yolu veya ortak bir tek bağlama noktası gerekir)
- oturum bilgilerini depolamak için veritabanını kullan (uygulama davranışını değiştirmesi gerekir)
Daha fazla detay
Bu tür bir yapılandırma kullanıyorum:
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'i (haproxy cli komutuyla) devre dışı bırakırsam, SRV1'de açılan tüm uygulama oturumlarının geçerli HTTP "oturumu" nun bitmesinden sonra kesileceğini düşünüyorum. Bu doğru mu?