LVS(Linux Virtual Server)によるロードバランサの構成(VirtualBox編)

■ LVS(Linux Virtual Server)とは?

 LVS(Linux Virtual Server)はLinuxをロードバランサとして利用することができる優れもののソフトウェア機能だ。既に当サイトではVirtual PCを利用して負荷分散環境を構築したが、今回はVirtualBoxとFedora 8(以下、Fedora)で同様の環境を構築する。VirtualBoxにFedoraをインストールする方法はこちらを参照していただきたい。

 LVSにはいくつかの構成方法があるが、今回も最も設定が簡単なNAT(Network Address Translation)で負荷分散環境を構成してみたいと思う。このためにはマシンが3台必要となるが、VirtualBoxを利用すれば物理的なマシンを用意する必要がないのでちょっと試してみる場合には重宝する。

 LVSを利用するための設定は、VirtualBoxを利用する場合とリアルなマシンを利用する場合とで異ならないのでどちらで構築していただいても問題ない。今回は更にLVSでセッション維持の設定も行ってみる。

■ VirtualBoxを利用した負荷分散環境の構築

 NAT構成にはまずロードバランサとして1台、分散先のサーバとして2台、計3台のマシンを用意する必要がある。ロードバランサとして利用するマシンにはネットワークカードが3枚必要になる(ロードバランサのマシンにインターネットやホストOSとのファイル共有が不要なら2枚で良い)。VirtualBoxを利用する場合はこれらすべてを仮想的に用意することができる。

外部アドレス(eth0)内部アドレス(eth1)インターネット用(eth2)
負荷分散装置192.168.0.8192.168.100.100DHCP
AP1号機192.168.100.1
AP2号機192.168.100.2

 VirtualBoxを利用する場合は、ロードバランサの仮想マシンにはネットーワークアダプタを3つ用意する。1.外部向けには"Host-only Adapter"(ホストOSとゲストOSの間で通信ができる)2.内部向けには"内部ネットワーク"(ゲストOS同士でのみ通信ができる)3.インターネット接続とホストOSとのファイル共有用に"NAT"とする。

 "Host-only Adapter"は初期状態ではホストOS側が192.168.56.1、ゲストOS側はDHCPで192.168.56.101以降のアドレスが割り当てられる。今回はこれをホストOS側が192.168.0.1、ロードバランサには192.168.0.8が割り当てられるように変更する。VirtualBoxの[ファイル]-[環境設定]の”ネットワーク”からHost-only Adapterを編集し、”IPv4 アドレス:192.168.0.1”に設定する。また、Host-only AdapterのDHCPサーバは無効にする。

 ロードバランサのIPアドレスの設定はFedoraのデスクトップで[システム]-[管理]-[ネットワーク]メニューを選択することで設定が可能である。Fedoraからはバーチャルマシンのアダプタ1がeth0、アダプタ2がeth1、アダプタ3がeth2として認識されているはずである。eth0及びeth1のサブネットマスクはすべて255.255.255.0に設定する。

 同様に、その他の各マシンには上記の表のようにIPアドレスを設定する。

■ Host-only Adapterが利用できない場合(Host-only Adapterが利用できれば不要)

 VirtualBoxのバージョンが2.2以降でないと、割り当てで"Host-only Adapter"は利用できない。その場合には"Host-only Adapter"の代わりに、"Bridged Adapter"を選択して名前で"Microsoft Loopback Adapter"(ホストOSとゲストOSの間で通信ができる)を選択する。

 ホストOSに"Microsoft Loopback Adapter"がインストールされていない場合、[コントロールパネル]-[ハードウェアの追加]から”共通ハードウェアの種類:ネットワーク アダプタ”→”製造元:Microsoft”→”ネットワークアダプタ:Microsoft Loopback Adapter”をインストールする。インストールが成功するとこのアダプタは”ローカル エリア接続2”等の名前で認識されるはずである。こちらも、ロードバランサ(192.168.0.8)と通信するために"192.168.0.1"辺りを設定しておく。

■ 負荷分散装置マシンへのipvsadmのインストール

 Fedoraのカーネルは初期状態でLVSが利用できるようになっている。しかし、LVSの設定を行うためにはipvsadmというツールをロードバランサマシンに別途インストールする必要がある。Fedoraで[アプリケーション]-[ソフトウェアの追加/削除]メニューを選択し”ipvsadm-1.24-9.i386.rpm”をインストールする。

 特に変更しなければipvsadmは/sbinディレクトリにインストールされるはずである。適宜パスを通すか、またはipvsadmの前に/sbin/を付けてフルパスでコマンドを実行することになる。

■ 負荷分散の設定

 ipvsadmで以下の設定を行う。

# ipvsadm -A -t 192.168.0.8:8080 -s rr
 上記によって192.168.0.8の8080ポートへのアクセスを負荷分散することを宣言する。-s rrは負荷分散アルゴリズムがラウンドロビンであることを示す。

 次に負荷分散先としてAP1号機のアドレスを追加する。

# ipvsadm -a -t 192.168.0.8:8080 -r 192.168.100.1 -m

 さらにもう1つの負荷分散先としてAP2号機のアドレスを追加する。

# ipvsadm -a -t 192.168.0.8:8080 -r 192.168.100.2 -m

 設定内容は-Lオプションを指定してipvsadmを実行すると確認できる。

# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.0.8:webcache rr
  -> 192.168.100.2:webcache       Masq    1      0          0         
  -> 192.168.100.1:webcache       Masq    1      0          0         

■ パケット転送の許可

 ロードバランサマシンでもう1つ忘れてはならないのがパケット転送の許可である。外部用のネットワークと内部用のネットワークとの間でパケット転送を許可するために以下のコマンドを実行する。

# echo 1 > /proc/sys/net/ipv4/ip_forward

 設定が正しく行われたかどうか確認するには/proc/sys/net/ipv4/ip_forwardの内容をcat等で表示させて見ると良い。値が1になっていればOKである。

# cat /proc/sys/net/ipv4/ip_forward
1

 上記の設定は一時的なものでマシンを再起動すると失われてしまう。永続的にパケット転送を許可したい場合は/etc/sysctl.confを以下のように変更する。

# Controls IP packet forwarding
net.ipv4.ip_forward = 1

■ 負荷分散先マシンのデフォルトゲートウェイ設定

 APサーバのそれぞれでもう少しやることがある。AP1号機とAP2号機の両方で、デフォルトゲートウェイをロードバランサマシンの内部ネットワークのアドレスである192.168.100.100に設定しなければならない。Fedoraではそれぞれのマシンのデスクトップで[デスクトップ]-[管理]-[ネットワーク]メニューを選択することで設定が可能である。これで負荷分散の構成は終了である。

■ 設定の確認

 AP1号機とAP2号機には予め任意のアプリケーションをデプロイしておき、ブラウザで192.168.0.8:8080にアクセスする。VirtualBoxを利用しているのであればホストのWindowsから負荷分散装置のバーチャルマシンにアクセスすることになる。このときブラウザのキャッシュは必ず切っておく。それぞれのAPサーバのログを参照すれば負荷分散されていることが確認できるであろう。

■ セッション維持の設定

 LVSはセッション維持の設定を行うこともできる。分散アルゴリズムの設定の箇所で

# ipvsadm -A -t 192.168.0.8:8080 -s rr -p 300
 -pオプションを指定するだけである。後ろの数値はタイムアウトの設定で単位は秒である。タイムアウト値を指定しなければ360秒が設定される。(ipvsadmのmanを見ると300になっているが、実際は360になっている。)ipvsadm -Lで確認すると分散アルゴリズムの後ろに”persistent”の表示とタイムアウト値が表示されている。

# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.0.8:webcache rr persistent 360
  -> 192.168.100.2:webcache       Masq    1      0          0         
  -> 192.168.100.1:webcache       Masq    1      0          0         

■ テスト用の仮想マシン

 通常、Webアプリケーションのテストを行うとき、ブラウザの設定を普段の閲覧のときのものとは変えなければならないことが往々にしてある。VirtualBoxを利用すればテスト用の仮想マシンを用意することができる。新規に仮想マシンを作成してWindows等をインストールしておけば、そこからロードバランサの仮想マシンにアクセスできるので重宝する。

<The Linux Virtual Server Project>
http://www.linuxvirtualserver.org/

(2009/05/12)

新着情報
【iOS Objective-C, Swift Tips】アプリアイコンにバッジを表示(Swift)
【iOS Objective-C, Swift Tips】画像の向きを指定して保存する(Swift)
【iOS Objective-C, Swift Tips】UIImagePickerControllerの表示を日本語にする(Swift)

Copyright(C) 2004-2012 モバイル開発系(K) All rights reserved.
[Home]