RedHat Enterprise LinuxでWebサーバロードバランス

LinuxのLVS。高性能っぽいので、
今更ながら、しょぼい機械を集めてテストしてみました。


マシン
lb:ロードバランサー役
  Pentium4 3GHz/Mem 1GB/OS RedHatEnterpriseLinux ES3 Update5
w1:WWWサーバ1役
  Pentium3 667MHz/Mem 512MB/OS RedHatEnterpriseLinux ES4
w2:WWWサーバ2役
  Pentium3 800MHz/Mem 384MB/OS RedHatEnterpriseLinux ES4


条件
WWWサーバはVirtualHostで2つのサイトを持ちます。
アクセス制限の関係とか色々あって、2つのサイトはIPベースでの
バーチャルホストです。


IPアドレス
実アドレス
lb ... 192.168.1.4/24
w1 ... 192.168.1.7/24
w2 ... 192.168.1.8/24

仮想アドレス
Web Site1 ... 192.168.1.100
Web Site2 ... 192.168.1.101

ロードバランスの方式
分散は何も考えずにラウンドロビンで行う。
アクセスログを残したいのと、高速性がほしいのでDSRで行う。

用意するもの
ipvsadmコマンド ここからダウンロードできます。

1.ロードバランサーの準備

1−1.rpmでipvsadmをインストールします。

# rpm -ivh ipvsadm-1.21-1.rh.el.1.i386.rpm

1−2.仮想IPアドレス用のインターフェースを設定します。
# vi /etc/sysconfig/network-scripts/ifcfg-eth0:0
DEVICE=eth0:0
BOOTPROTO=static
BROADCAST=192.168.1.255
IPADDR=192.168.1.100
NETMASK=255.255.255.0
NETWORK=192.168.1.0
ONBOOT=yes
TYPE=Ethernet
#
# vi /etc/sysconfig/network-scripts/ifcfg-eth0:1
DEVICE=eth0:1
BOOTPROTO=static
BROADCAST=192.168.1.255
IPADDR=192.168.1.101
NETMASK=255.255.255.0
NETWORK=192.168.1.0
ONBOOT=yes
TYPE=Ethernet
#
# /etc/init.d/network restart

1−2.IPv4フォワードを有効にします。

# vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
#
# sysctl -p

1−3.カーネルにip_vsモジュールを読ませます

# cd /lib/modules/2.4.21-32.ELsmp/kernel/net/ipv4/ipvs
# insmod ip_vs
# insmod ip_vs_rr
# insmod ip_vs_lc
# insmod ip_vs_wrr
# insmod ip_vs_wlc
# insmod ip_vs_lblc
# insmod ip_vs_lblcr
# insmod ip_vs_sh
# insmod ip_vs_ftp
# insmod ip_vs_dh

1−4.ipvsadmに仮想サイトを教え込みます。

# ipvsadm -A -t 192.168.1.100:80 -s rr
# ipvsadm -A -t 192.168.1.101:80 -s rr

1−5.ipvsadmに実WWWサーバを教え込みます。

# ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.7 -g
# ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.8 -g
# ipvsadm -a -t 192.168.1.101:80 -r 192.168.1.7 -g
# ipvsadm -a -t 192.168.1.102:80 -r 192.168.1.8 -g

1−6.ipvsadmの設定値をファイルに記録します。

# service ipvsadm save

1−7.ipvsadmを起動します。

# service ipvsadm start

1−8.ipvsadmを自動起動に設定します。

# chkconfig ipvsadm on


2.WWWサーバの準備

2−1.ループバックインターフェースに仮想IPを仕込みます。

# vi /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.1.100
NETMASK=255.255.255.255
NETWORK=192.168.1.100
BROADCAST=192.168.1.100
ONBOOT=yes
NAME=loopback:0
#
# vi /etc/sysconfig/network-scripts/ifcfg-lo:1
DEVICE=lo:1
IPADDR=192.168.1.101
NETMASK=255.255.255.255
NETWORK=192.168.1.101
BROADCAST=192.168.1.101
ONBOOT=yes
NAME=loopback:0
#
# /etc/init.d/network restart

コツはネットワークアドレス、ブロードキャストアドレスと
IPアドレスに同じ値を入れることと
サブネットマスクが255.255.255.255な事です。
デフォルトゲートウェイは/etc/sysconfig/networkではなく
ifcfg-eth0のなかに書きましょう

GATEWAY=192.168.1.254

2−2.arp応答をしないようにします。

# vi /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.eth0.arp_announce = 2
#
# sysctl -p

2−3.WWWサーバをVirtualHostで構築します。
(省略)

基本的にはこれだけで負荷分散されたWWWサイトが構築出来ます。
簡単ですね。