19

アプリを複数のサーバーにスケールアウトする作業を行っています。1 つの要件は、クライアントが常に同じサーバーと通信していることです (サーバー間で効率的にバウンスできるようにするには、ライブ データが多すぎます)。

私の現在のセットアップは小さなサーバー クラスターです (Linode を使用)。IPが常に同じノードを指すように、「バランスソース」を使用してHAProxyを実行しているフロントエンドノードがあります。

「バランス ソース」があまり均等に分布していないことに気付きました。現在のテスト セットアップ (バックエンド サーバー 2 台) では、80 ~ 100 のソース IP のサンプル サイズを使用すると、1 台のサーバーの接続数が 3 ~ 4 倍になることがよくあります。

よりバランスの取れた配布を実現する方法はありますか? 粘着性のあるセッションでは「完璧な」バランスが取れないことは明らかですが、25/75 の分割よりも 40/60 の分割の方が好ましいでしょう。

4

2 に答える 2

27

HAProxy は、Cookie の変更または挿入をサポートして、cookieパラメータでセッションの永続性を提供します。

backend セクションまたは listen セクションのいずれかに、次を追加します。

cookie COOKIENAME prefix

この例では、サーバーの名前を という名前の Cookie に追加することにより、既存の Cookie を変更しますCOOKIENAME。クライアントには次のようなものが表示さserver1~someotherdataれますが、アプリケーションにはその部分しか表示されませんsomeotherdata。したがって、これを既存の Cookie で使用できます。さらに、この方法では、その Cookie が存在する場合にのみセッションの永続性を強制できます。つまり、サイトの静的部分の周りで人々を均等にバランスさせ、必要なときにのみスティッキーを強制することができますが、その Cookie 名をセッションに追加します。

また、サーバーに名前を付けて、サーバー行が次のようになるようにします。

server server1 1.2.3.4 cookie server1

詳細はHAProxy config guideappsessionにあり、 config パラメータも使用できるようです。

これが完了したら、リストから独自のバランス方法を選択できます。私は使用する傾向がありroundrobinますがleastconn、スティッキー セッションが考慮されると、より良いバランスが得られる可能性があります。


参照セクションを見つけやすくするためのドキュメントの詳細:

cookie <name> [ rewrite | insert | prefix ] [ indirect ] [ nocache ]
              [ postonly ] [ preserve ] [ domain <domain> ]*
              [ maxidle <idle> ] [ maxlife <life> ]
  Enable cookie-based persistence in a backend.
  May be used in sections :   defaults | frontend | listen | backend
                                 yes   |    no    |   yes  |   yes
于 2011-06-29T11:42:09.953 に答える
0

HA-Proxy でバランシング アルゴリズムを調整できますが、利用可能なものもあります。例えば ​​roundrobin や leastconn のように。

ただし、一般的に、コンテンツが提供されるユーザーのドメインに応じてバランスを調整する必要があります。ほとんどの場合、経験的なテストを行い、調査結果に従って決定を繰り返す必要があります。

于 2011-06-27T19:50:46.860 に答える