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
あなたが探しているのは「スティッキーセッション」であり、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 ドキュメント を参照してください。