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サイトが構築出来ます。
簡単ですね。
コメント