Perlbal::Manual::LoadBalancer - Perlbalをロードバランサとして使用する
Perlbal 1.78.
Perlbal ロードバランシング サービスを設定する方法
Perlbalを設定するより良い説明としてまず the Perlbal::Manual::Configuration manpage を読んでください。このドキュメントはそれを読んだ後でもっと理解できるでしょう。
Perlbalをロードバランサとしてセットアップする方法をもっと理解するためには、ロードバランサとリバースプロキシはしばしば同じものになりえるということに注意が必要です; 常にでは無く、しばしばです。
ロードバランサは負荷を広げるためにリクエストを複数のサーバに渡って釣り合いを取るサーバ(あるいはデバイス)です。リバースプロキシも同じ事をしますが、他にいくつかの機能を持っています。
Perlbal as a Reverse Proxy provides features such as buffering content, preserving connections to the backend servers, starting connections ahead of time and a high priority queue, among others.
ロードバランサはリバースプロキシのほとんどサブセットであると言えるでしょう(そうではありませんが、ほとんどそうです)。
Perlbalに関しては、ロードバランサは全ての特別なオプション無しでリバースプロキシとして実装されており、ロードバランサのロールを reverse_proxy
に設定するのはそのためです:
SET role = reverse_proxy
webサイトを提供するために二つのマシーンを設定しPerlbalにどうやってリクエストをバランスするかを決めさせたいと仮定しましょう。この練習のために、以下の二つのサーバーを持っていると仮定します:
10.0.0.1:80 10.0.0.2:80
そしてwebサイトを提供するために以下の場所で二つのサーバを使用したいとします:
10.0.0.3:80
これをするための設定の例がこれです:
CREATE POOL mywebsite POOL mywebsite ADD 10.0.0.1:80 POOL mywebsite ADD 10.0.0.2:80
CREATE SERVICE service_mywebsite SET role = reverse_proxy SET pool = mywebsite SET listen = 10.0.0.3:80 ENABLE service_mywebsite
最初の行は mywebsite
と呼ばれるマシーンのプールを定義します。2および3行目は、二つのマシーンをプールに追加します(インデントは必須ではないことに注意してください)。
その後、service_mywebsite
と呼ばれるサービスを定義し、それは reverse_proxy
のロールを持ち、そのロールはリクエストに提供するために 10.0.0.3:80
でlistenしてプール mywebsite
を使用するように設定されます。
最後の行は、現在のところアクティブでは無くてもファイルの中で定義された複数のサービスを持つことができるようにするためのものです。 (よくあるシナリオとしては、ファイルに全ての設定をし、その後要求に応じてその場でサービスを有効/無効にします; このプロセスの詳細な情報は the Perlbal::Manual::Management manpage を見てください)。
Perlbalはとても効率的なロードバランシング アルゴリズムを使用します。It is very effective for distributing dynamic web requests among potentially heterogeneous hardware.
まず、バックエンドのサーバは意味のある制限にそれぞれのMaxClient(apacheの場合、あるいは等価なもの)設定を持つに違いありません。もしあなたのハードウェアがCPUを使い果たす前に同時に20リクエストを実行することができるなら、MaxClientsを20に設定します。
次に、デフォルトでPerlbalはリクエストをランダムに分散します。利用可能なバックエンドに新しい接続を開き、リクエストを発行します。
verify_backend
, backend_persist
, backend_persist_cache
, および connect_ahead
が有効な場合は、適切なアルゴリズムを使用することができます。
SET persist_backend = on SET verify_backend = on SET backend_persist_cache = 5 SET connect_ahead = 2
この設定の場合、PerlbalはクライアントのリクエストをOSがlistenしているキューの代わりに実際に処理しているバックエンドにだけ道をとるでしょう。Perlbalは以前に検証されたバックエンドを再利用しようとし、更なるリクエストの準備に必要なidle接続を少しだけ増やそうとするでしょう。
これら全てを合わせると、Perlbalが利用可能なバックエンドを探すために待つためにクライアントが待つことはありえなくなるでしょう。MaxClientsを適切に設定することで、バックエンドは圧倒されることなくトラフィックを供給することができます。. バックエンドが利用できない場合は、Perlbalはバックエンドに負荷をかけるのではなく、内部的にそれらをキューするでしょう。
イメージサーバ間あるいは他のとても軽いリクエストをバランシングしている場合は、 verify_backend
を無効にしたいかも知れません。
the Perlbal::Manual::Configuration manpage, the Perlbal::Manual::FailOver manpage, the Perlbal::Manual::Management manpage, the Perlbal::Manual::ReverseProxy manpage.