web-dev-qa-db-ja.com

レイヤー4とレイヤー7のロードバランシング

データセンターにレイヤー4負荷分散ソリューションを使用するか、レイヤー7ソリューションを使用するかを決定しようとしています。残念ながら(私の正気のために)、私のユースケースは、両方のソリューションがうまく機能するほど単純であり、ほとんどの弱点を回避し、他の長所を実際には利用していません。最終的に使用するソリューションが何であれ、それは高い可用性と高いスループットを備えている必要があります。ただし、これを使用してWebサーバーのクラスター全体の負荷分散を計画しているだけで、「スティッキー」セッション管理(CookieまたはIP)、複雑な書き換えルール、またはさらに言えば、すべて。

ロードバランサーは2つのスイッチに接続され、どちらもデータセンターアグリゲーションレイヤーまでの独立した接続で、ラピッドスパニングツリーとスイッチが仮想化に使用する独自のプロトコルを使用して結合されます。ロードバランサーは、クロスオーバーケーブルを介して相互にリンクされます。クラスタ内のすべてのサーバーが両方のスイッチに接続されています。ロードバランサーがしなければならないことは、トラフィックをそれらに向けるだけです。

それは単なるHTTPなので、HAProxyやnginxのようなレイヤー7負荷分散ソリューションを使用できます。しかし、ldirectordやkeepalivedなどでLVSプロジェクトを使用することもできます。

私はそれらを見て、長所と短所を分割しようとしましたが、それはただ洗い流しになってしまいます。あなたは何を勧めますか、そしてその理由は何ですか?何か不足していますか?

22
Scrivener

Haproxyのような「L7」の1つの有用な利点は、Cookieを使用して同じブラウザが同じバックエンドサーバーにアクセスできるようにすることです。これにより、クライアントヒットのデバッグがはるかに簡単になります。

L4バランスは、単一のユーザーを複数のバックエンドサーバーでバウンスする可能性があります。 (特定のケースでは有利かもしれませんが、デバッグ/プロファイリングの意味では、「L7」を使用する方がはるかに価値があります。)

編集:HTTPバランシングを使用すると、速度が向上する可能性もあります。キープアライブを使用すると、クライアントは単一のTCPセッションをバランサーに確立し、新しいTCPセッションを再確立する必要なく、多くのHITを送信できます(3-way同様に、多くのLBは、バックエンドシステムへのキープアライブセッションを維持して、バックエンドで同じハンドシェイクを行う必要をなくします。

厳密なTCPロードバランシングでは、これらの両方を簡単に達成できない場合があります。

/ * FWIW:「L7」や「L4」ではなく、HTTPまたはTCPです。しかし、私はOSIを使用して、OSIがうまく一致しないものを説明するのを避けるのが嫌いです。 * /

基本的に、何をデプロイするかわからない場合は、シンプルで自然な感じのものを使用してください。テストして(Apacheベンチを使用しますか?)、ニーズに合っていることを確認してください。私にとってHTTP LBの方が自然です。

18
Joel K

L7バランシングを行うことの利点がないことを考えると、代わりにL4バランシングを使用します。私は、あまり犠牲を払わずに、できるだけシンプルに保つのが大好きです。

L7では、バランサーが通過するパケットのhttpヘッダーを検査して適切なルーティングを行う必要があり、追加のオーバーヘッドが追加され、エンドユーザーの待ち時間がわずかに増加します。それによって何も得られないなら、私には無意味な出費だと思います。

4
Twirrim

一部のDNSプロバイダーには、単純なフェイルオーバー機能があります。要件ではないことと要件ではないことを説明しましたが、何かがダウンした場合のフェイルオーバー付きのラウンドロビンが必要な場合は、たとえば、 zoneedit.comのフェイルオーバー 。 HAのニーズによっては、それで十分な場合もあり、アーキテクチャー全体の階層をスキップすることもできます。

0
Ernest Mueller