構築/Linux サーバ/lvs

提供: スゴイようぃっきー!

構築 / Linux サーバ / lvs

目次

概要

  • ipvsadm + keepalived を利用して冗長化したロードバランサを構築する。
  • 設定は以下
    • VIP : 192.168.3.10
    • lvs 1 : 192.168.3.11
    • lvs 1 : 192.168.3.12
    • webserver 1 : 192.168.3.21
    • webserver 2 : 192.168.3.22
    • 上記環境のためDSR設定
※webserver は後にapache + proxy_balanceを構築する。

前提条件

IPVSの構築

  • ipvsadmパッケージをyumインストールする。
[root@Sulu-lvs01 ~]# yum -y install ipvsadm

留意事項

  • ipvsadmのバージョンについて注意するべしとのKLabの記事がある。
    lv1ではソースからコンパイル、lv2ではyum installを行ったが今のところyumのバージョンでも問題が起きていない。
 [root@Sulu-lvs01 ~]# ipvsadm -v
ipvsadm v1.24 2005/12/10 (compiled with popt and IPVS v1.2.1)

[root@Sulu-lvs02 keepalived-1.1.19]# ipvsadm -v
ipvsadm v1.24 2003/06/07 (compiled with popt and IPVS v1.2.0)
  • ソースからコンパイルするが、特に躓くことはなかった。
wget http://www.linux-vs.org/software/kernel-2.6/ipvsadm-1.24.tar.gz
tar zxf ipvsadm-1.24.tar.gz
cd ipvsadm-1.24
./configure
make
make install

keepalivedの構築

インストール

ソースを取得して解凍する。

[root@Sulu-lvs01 ~]# wget http://www.keepalived.org/software/keepalived-1.1.19.tar.gz
[root@Sulu-lvs01 ~]# tar zxvf keepalived-1.1.19.tar.gz

confiugreを行う。

[root@Sulu-lvs01 ~]# cd keepalived-1.1.19
[root@Sulu-lvs01 keepalived-1.1.19]#./configure -with-kernel-dir=/usr/src/kernels/2.6.18-164.11.1.el5-i686/
・
・
Keepalived configuration
------------------------
Keepalived version       : 1.1.19
Compiler                 : gcc
Compiler flags           : -g -O2
Extra Lib                : -lpopt -lssl -lcrypto
Use IPVS Framework       : Yes
IPVS sync daemon support : Yes
Use VRRP Framework       : Yes
Use Debug flags          : No

※作業ログ
configure時に "-with-kernel-dir=/usr/src/kernels/2.6.18-164.11.1.el5-i686/" をしないと、Noのステータスが残り、このままだとIPVSが利用できない。このパスはkernel-devをインストールした際にできたもので、ip_vs.hが入っている場所でもある。
(find / -name ip_vs.h でパスを確認した)

Use IPVS Framework       : No
IPVS sync daemon support : No
以下はconfigure時のログ
checking net/ip_vs.h usability... no
checking net/ip_vs.h presence... no

x86_64のパスは以下のとおりだった。

/usr/src/kernels/2.6.18-164.15.1.el5-x86_64/

specファイルを修正する。

[root@Sulu-lvs01 keepalived-1.1.19]# vi keepalived.spec

keepalived.specを編集1
specの中のバージョン表記がなぜか1.1.18だったので、1.1.19に変更
Version: 1.1.18

 ↓
Version: 1.1.19

keepalived.specを編集2
"--with-kernel-dir"をさきほどのconfigureと同じように指定する。

    --with-kernel-dir="/lib/modules/%{kernel}/build"
 ↓
    --with-kernel-dir="/usr/src/kernels/2.6.18-164.11.1.el5-i686/"

アーカイブを指定の場所へコピーする。

[root@Sulu-lvs01 keepalived-1.1.19]# cp ../keepalived-1.1.19.tar.gz /usr/src/redhat/SOURCES/keepalived-1.1.19.tar.gz

keepalived.specのファイル権限が不在ユーザーであると、rpmがコケルのでchownしておく。

[root@Sulu-lvs01 keepalived-1.1.19]# chown root.root ./ -R

rpmを作成する。

[root@Sulu-lvs01 keepalived-1.1.19]# make rpm

rpmをインストールする。

[root@Sulu-lvs01 keepalived-1.1.19]# rpm -ivh /usr/src/redhat/RPMS/i386/keepalived-1.1.19-5.i386.rpm

keepalived.confの設定

global_defs {
   notification_email {
     XXX@XXX
   }
   notification_email_from lvs-alert@XXX
   smtp_server 192.168.3.XXX
   smtp_connect_timeout 30
}

vrrp_instance V_W {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 100
    nopreemp
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.3.100
    }
}

virtual_server_group HTTP100 {
    192.168.3.100 80
}

virtual_server group HTTP100 {
    delay_loop 6
    lb_algo rr 
    lb_kind DR
    persistence_timeout 0
    protocol TCP
    sorry_server 192.168.3.XXX 80
    real_server 192.168.3.111 80 {
        weight 1
        inhibit_on_failure
        HTTP_GET {
            url {
              path /test.html
              status_code 200
            }
            connect_port 80
            connect_timeout 5
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.3.112 80 {
        weight 1
        inhibit_on_failure
        HTTP_GET {
            url {
              path /test.html
              status_code 200
            }
            connect_port 80
            connect_timeout 5
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

留意事項

  • kernel-develやopensssl-develが必要。構築/Linux サーバ/CentOS 5.4と同じイメージなら問題ない。
  • rpmファイルを作成した際にホスト名に関する警告が出たが気にしないことにしておいた。
[root@Sulu-lvs01 keepalived-1.1.19]# make rpm
・
libpopt.so.0 libssl.so.6 rtld(GNU_HASH)
伸張ファイルの検査中: /usr/lib/rpm/check-files /var/tmp/keepalived-1.1.19-5-root
警告: ホスト名を正式なものにできません: Sulu-lvs01
書き込み完了: /usr/src/redhat/SRPMS/keepalived-1.1.19-5.src.rpm
書き込み完了: /usr/src/redhat/RPMS/i386/keepalived-1.1.19-5.i386.rpm
実行中(%clean): /bin/sh -e /var/tmp/rpm-tmp.52041
+ umask 022
+ cd /usr/src/redhat/BUILD
+ cd keepalived-1.1.19
+ /bin/rm -rf /var/tmp/keepalived-1.1.19-5-root
+ exit 0

web serverの準備と、keepalivedの起動

web serverの準備

  1. lvsが受けているVIPを自身のものとして応答させるために、web server側に以下のコマンドを実行する。
    既にproxy balancerを構築しているならproxy balancerが動作しているサーバに実施する。
iptables -t nat -A PREROUTING -p tcp -d 192.168.3.100 -j REDIRECT
/etc/init.d/iptables save
  1. 死活監視用のhtmlをweb server 1 と 2にそれぞれ作成する。
web1# echo "web 1" > /var/www/html/test.html

web2# echo "web 2" > /var/www/html/test.html

動作の確認

[root@Sulu-lvs01 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.3.100:80 rr
  -> 192.168.3.112:80             Route   0      0          0
  -> 192.168.3.111:80             Route   1      0          0

※confにinhibit_on_failureを記述しておかないと、死亡したサーバがリストされないので注意したほうが良い。
初期構築時にweb serverの用意ができていなかったりテストページが動作不良しているときに混乱する。


個人用ツール
Google AdSense