BalanceNG:シンプルで軽量な負荷分散システム
BalanceNG(Balance Next Generation)は、独自のネットワークスタックを持ちLinux上でもSolaris上でも動くユーザモードの負荷分散ソフトウェアだ。負荷分散に必要となる処理はほとんどすべてBalanceNGによって行なわれ、オペレーティングシステムに依存しない(オペレーティングシステムは物理ネットワークインターフェースにアクセスするためだけに使用される)。
BalanceNGではラウンドロビン/ランダム/ハッシュ/最小リソースといった様々な負荷分散手法がサポートされている。BalanceNGを使用するためには、仮想サーバの役割を果たすマシン上で「負荷分散サービス」を実行し、クラスタを構成する各ノード(BalanceNG用語で「ターゲット」と呼ばれている)上で「負荷分散エージェント」を実行する必要がある。必要となるディスク空間は、負荷分散サービスについては約400KB、負荷分散エージェントについては約100KBだ。また生成するネットワーク(UDP)トラフィックも最小限に抑えられている。なお、BalanceNGで負荷分散を行なうことができるのはウェブサーバ(HTTP)だけではない。FTP、SQL、POP3、IMAP、SMTPなどほとんどどんな種類のサービスも対象とすることができる。
BalanceNGはオープンソースではないものの、仮想サーバ1台/ターゲット2台の環境については無料で利用することができる(ベーシックライセンス)。この環境はSOHOなどにおいては十分だと思われるが、より大規模な環境での使用を希望する場合にはベーシックライセンスを有料でアップグレードすることができ、仮想サーバ512台/ターゲット1,024台までの環境で利用することもできる。
BalanceNGの入手とインストール
それではまず最初に、BalanceNGをダウンロードしよう。ダウンロードするとtarファイルの中にbngという実行ファイルがあるので、このファイルを/etc/init.dディレクトリにコピーし、コマンドラインで「/etc/init.d/bng start
」として実行を開始する。BalanceNGサーバ(仮想サーバ)のために起動する必要のあるファイルはこれだけだ。一方もう一つの実行ファイルであるbngagentは、各ターゲットサーバ上にインストールする。負荷分散サービス(bng)や負荷分散エージェント(bngagent)を自動的に起動するようにしたい場合には、ブート時に毎回起動されるように/etc/rc.localかどこかに書いておこう。
BalanceNGには負荷分散のための設定方法が2種類ある。一つはBalanceNGのデフォルトの設定ファイルである/etc/bng.confを編集するという標準的な方法で、もう一つはコマンドラインで「/etc/init.d/bng control
」と実行してbngコンソールを起動し、これを使用してインタラクティブに負荷分散に関する設定を行なうという方法だ。なおbngコンソールの機能についてはBalanceNGのUser and Reference Manual(ユーザ/リファレンスマニュアル)に詳しい説明がある。
今回私は既存のネットワーク環境にBalanceNGを統合しなければならなかったため、簡単なシステム構成を選ぶことにした。私が使用したのは「シングルレッグ(single-legged)」構成だが、BalanceNGのサイトで紹介されているようにその他にもいくつかのシステム構成方法が考えられる。紹介されている例を選んで/etc/bng.confファイル内にコピーし、自分のネットワーク環境に合わせて編集すると良いだろう。
bngサービスは、設定ファイルに間違い(ネットワーク環境の誤設定)があっても問題なく起動する。エラーメッセージは/var/log/syslogを見ても良いし、bngコンソールで確認することもできる。bngコンソールでは以下のように、BalanceNGの起動中に起ったエラーがすべて表示される。
BalanceNG: connected to PID 872 *WARNING*: Errors in /etc/bng.conf, type "show log" for details
ここで「show log
」と入力すると、問題を詳しく見ることができる:
2007/03/08 00:57:59 3 ERROR /etc/bng.conf line 14: gateway address not directly reachable 2007/03/08 00:58:00 3 ERROR /etc/bng.conf line 22: WARNING: server 1 has no matching network
このBalanceNGのエラー報告機能では、エラーがある行番号とうまく行かなかった内容とが表示される。上記の場合、ゲートウェイのアドレスに誤設定があったことがわかる。間違いを修正するには「Ctrl-D」を入力してbngコンソールから抜け、/etc/bng.confファイルを修正し、サービスを再起動する。そして他にもエラーがないかどうかを確認するために再びbngコンソールで確認する。エラーがなければ負荷分散のための設定が正しくできていることになり、以下のようなログが表示されるはずだ。
2007/03/08 00:57:47 6 BalanceNG 1.795: starting background operation
2007/03/08 00:57:47 6 loading /etc/bng.conf 2007/03/08 00:57:47 6 configuration taken Wed Mar 7 00:57:08 2007 2007/03/08 00:57:47 6 configuration saved by BalanceNG 1.795 (created 2007/02/26) 2007/03/08 00:57:48 6 /etc/bng.conf successfully loaded
次に、各ターゲットサーバ上のコマンドラインで「bngagent 439
」としてbngagentを実行する。ここで指定した439はBalanceNGのデフォルトのUDPポート番号だが、UDPで通信を行なうために利用可能なポート番号をどれでも選ぶことができる。bngagentは小さなUDPサーバプログラムで、BalanceNGサーバとの通信を行なう。bngagentのソースコードは公開されているため、配布物に入っているバイナリファイルでうまく行かなかった場合には、bngagentを自分でコンパイルすることもできる。
なお仮想サーバが負荷分散をちゃんと行なっているかどうかを確認するには、仮想サーバのIPアドレス(私の場合192.168.1.100)をウェブブラウザで入力してみれば良い。そうするとターゲットサーバでホストされている通常のウェブページが表示されるはずだ。そして次に各ターゲットサーバに他のマシンから接続して、各ターゲットサーバのApacheのログを見てみよう。すると仮想サーバが、受け付けたリクエストを各ターゲットサーバに平等に振り分けていることがわかるはずだ。もしそうなっていなければ設定を確認して誤動作の原因を解明しよう。
例からも分かるように、BalanceNGの設定ファイルはシンプルで、適度に構造化されていて、文書化もきちんとされている。また負荷分散を行なうために何らかのコマンドラインユーティリティを使っての作業などを行なう必要はなく、設定はすべて/etc/bng.confファイルを編集することで行なうことができる。
今回私がBalanceNGをダウンロードしてインストールし、シングルレッグ(ターゲットからの直接応答)アプリケーションとして設定し終わるまでには、たった20分しかかからなかった。
BalanceNGには警告通知スクリプトが付いているため、ノードが落ちた場合、直ちに通知が電子メールで管理者に届く。あるいはSNMPトラップを使用してネットワーク管理システムに対しメッセージを送ることもできる。
なおBalanceNGでは、Professional Software Maintenance and Support(プロフェッショナルソフトウェア管理/サポート)サービスに加えて、1年間の電子メールサポートが無料で提供されている。
BalanceNGは使い始めも使いこなしも簡単な、信頼性の高い負荷分散アプリケーションだ。BalanceNGは負荷分散を申し分なく行ない、家庭からエンタープライズに至るまで様々な環境での使用に適している。