LVS on CentOS 5

CentOS 5 上で LVS(Linux Virtual Server) を動かしてみます。これを使うと Linux でロードバランサを組むことができます。

※VMware Server 上に CentOS 5 を 2 つ稼動させて動作させました。
※LVS 用の OS 側には VMware Server で NIC(eth1) を追加しておく必要があります(Host-only で設定します)。
※環境がないのでポートをわけて設定しましたが、実際には実サーバを複数台用意したほうが良いです。

環境

 

OS ホスト名 IPアドレス1 IPアドレス2 ポート WWW サーバ
CentOS 5 toire 192.168.101.128: eth0 10.0.0.1:eth1 80  
CentOS 5 ohuro 10.0.0.2: eth0   8000, 8001 Apache-2.2.6

ipvsadm のインストール

LVS 用サーバに LVS 管理コマンドの ipvsadm をインストールします。

toire# yum -y install ipvsadm
toire# ipvsadm -v
ipvsadm v1.24 2003/06/07 (compiled with popt and IPVS v1.2.0)

LVS の設定

ルーティングができるように、IP フォワーディングを有効にします。

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

サーバ起動時に自動的にルーティングが有効になるようにパラメータを設定しておいても良いです。

toire# vi /etc/sysctl.conf
net.ipv4.ip_forward = 1    # 0 → 1 にする
toire# sysctl -p
net.ipv4.ip_forward = 1
...

待ちうけの IP アドレス(192.168.101.129)とポート(80)、ラウンドロビン方式(rr)でバランスするように設定をします。(バランスアルゴリズムについては一番最後に書きます。)

toire# ipvsadm -A -t 192.168.101.129:80 -s rr

実サーバの設定をします。実サーバの IP アドレス(10.0.0.2)と、ポート(8000, 8001)を設定します。今回は NAT をするので -m オプションを使います。

toire# ipvsadm -a -t 192.168.101.129:80 -r 10.0.0.2:8000 -m
toire# ipvsadm -a -t 192.168.101.129:80 -r 10.0.0.2:8001 -m

※パケットフォワーディング方式(今回は -m を指定して NAT を使います。)

オプション 説明
-g –gatewaying ダイレクトルーティングします。デフォルト値。
-i –ipip トンネリングします。
-m –masquerading NAT します。

設定がまともにできているか確認します。

toire# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.101.129:80 rr
-> 10.0.0.2:8000                Masq    1      0          0
-> 10.0.0.2:8001                Masq    1      0          0

サーバ起動時に設定が有効になるように保存します。

toire# /etc/init.d/ipvsadm save
Saving IPVS table to /etc/sysconfig/ipvsadm:               [  OK  ]

保存された設定ファイルを確認するには、/etc/sysconfig/ipvsadm を参照します。

toire# cat /etc/sysconfig/ipvsadm
-A -t 192.168.101.129:80 -s rr
-a -t 192.168.101.129:80 -r 10.0.0.2:8000 -m -w 1
-a -t 192.168.101.129:80 -r 10.0.0.2:8001 -m -w 1

サーバ起動時に自動的に有効になるようにします。

toire# chkconfig --add ipvsadm
toire# chkconfig ipvsadm on

実サーバの設定

NAT を使うので、実サーバのデフォルトゲートウェイを、LVS に向ける必要があります。

ohuro# vi /etc/sysconfig/network
GATEWAY=10.0.0.1

サーバを再起動すると無効になりますが、route add コマンドでも設定できます。もともと何か設定されていたら、route del コマンドで削除しておきます。

ohuro# route del default gw 192.168.101.2
ohuro# route add -net default gw 10.0.0.1

動作確認

クライアント端末から HTTP リクエストして実サーバに割り振られているか確認します。実サーバのそれぞれには Apache をポート 8000、8001 で起動しておきます。コンテンツにはどちらのサービスか分かりやすいものをおくと良いです。下記のようにリクエストがラウンドロビンされていれば成功です。

client# curl http://192.168.101.129/
ohuro port 8000
client# curl http://192.168.101.129/
ohuro port 8001

その他のバランスアルゴリズム

ここではラウンドロビン(rr)を使いましたが他の方式もあります。(ここに書いたもの以外もあります)
(ここに出てくる「重み付け(weight)」実サーバ設定のときに -w オプションで指定できます。0 にすると割り振らない。デフォルトは 1)

オプション 説明
rr ラウンドロビン。実サーバに順番にリクエストを渡します。
wrr 重み付け(eeight)ラウンドロビン。重み付け設定(weight)が有効になります。
lc 最小コネクション数。接続数が一番少ないサーバにリクエストがいきます。
wlc 重み付け(weight)最小コネクション数。重み付け設定(weight)が有効になります。
lblc クライアント(Locality-Based)に応じた最小コネクション数。同じクライアントからのリクエストは同じ実サーバにいきます。接続数が多い場合は別の実サーバにいきます。
2007年 12月 3日 | Posted in Linux
タグ:
コメントは終了しています。