Webサーバーの負荷分散にhaproxyを使用しています。一部のアプリケーションはセッションファイルを使用し、これらはサーバー間で同期されないため、追加のCookieでセッション永続性を使用しています。
メンテナンスのためにサーバーを無効にしたいが、セッションを中断しない。したがって、既存のクライアントがアプリケーションセッションを続行できるようにしたいが、新しいクライアントは受け入れないようにしたい。
これはいくつかの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 "セッション"の終了後に中断します。そうですか?
Web管理インターフェースを使用して、サーバーをドレインモードにします。それはあなたが探している正確な機能を提供します。
他の方法
サーバー間でセッションファイルを同期する(複数のサーバー間でファイルを同期する方法、または共通の単一マウントポイントが必要)
バックエンドサーバーでアプリケーションにPHP=)を使用している場合は、Memcacheを使用して、サーバー間でセッションを同期できます。
また、 Couchbase-Server は、そのままでmemcacheレプリケーションを実行できます。
もちろん、セッションのレプリケーションのためだけにcouchbase-serverを使用するのは一種のやり過ぎです:)