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)に応じた最小コネクション数。同じクライアントからのリクエストは同じ実サーバにいきます。接続数が多い場合は別の実サーバにいきます。 |