web-dev-qa-db-ja.com

haproxyおよび持続的接続

HAproxyを使用して、より多くのWebサーバー間の負荷分散を行っています。これらのWebサーバーは、セッションを開いたままにするためにPHPおよびセッションを使用しています。

さて、私はthinkユーザーがページを更新すると、それらのサーバーの1つに送信されますが、別のサーバーに送信されると、もちろんセッションが失われますね。

問題は主に、クライアントが同じサーバーに接続するようにするにはどうすればよいかということです。

これがバックエンドの構成です。

backend social_backend
mode http
option httplog
option http-server-close
option forceclose
no option httpclose
balance roundrobin
option forwardfor
timeout queue 5000
timeout server 86400000
timeout connect 86400000
timeout check 1s

server socket1 10.10.10.1:81 weight 1 maxconn 1024 check
server socket2 10.10.10.2:81 weight 1 maxconn 1024 check
server socket3 10.10.10.3:81 weight 1 maxconn 1024 check
1

あなたが探しているのは「スティッキーセッション」であり、HAProxyのappsessionパラメータを使用してそれを有効にすることができます。

appsession <cookie> len <length> timeout <holdtime> 
           [request-learn] [prefix] [mode <path-parameters|query-string>]

アプリケーションCookieがバックエンドで定義されている場合、HAProxyは、サーバーがそのようなCookieを設定するタイミングを確認し、その値をテーブルに格納して、サーバーの識別子に関連付けます。値から最大文字が保持されます。各接続で、haproxyは「Cookie:」ヘッダーとURLパラメーター(使用されるモードに応じて)の両方でこのCookieを検索します。既知の値が見つかった場合、クライアントはこの値に関連付けられたサーバーに転送されます。それ以外の場合は、負荷分散アルゴリズムが適用されます。 Cookieは、。より長い期間使用されていない場合、メモリから自動的に削除されます。

アプリケーションCookieの定義は、バックエンドごとに1つに制限されています。

例:appsession JSESSIONID len 52 timeout 3h

詳細については、HAProxy ドキュメント を参照してください。

2
BluesRockAddict