lvsコンパイルインストールDRモデル


一、環境
システム:CentOS 6.4 x 64最小化インストール
    DR:192.168.3.20
    RS1:192.168.3.21
    RS2:192.168.3.22
    VIP: 192.168.3.23
二、Realserverはhttpdサービスを配置してテストする
RS 1構成
[root@RS1 ~]# yum install httpd -y
[root@RS1 ~]# service httpd start
Starting httpd: httpd: apr_sockaddr_info_get() failed for RS1
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
                                                           [  OK  ]
# , 
[root@RS1 ~]# service iptables stop
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Unloading modules:                               [  OK  ]
[root@RS1 ~]# echo "RS1 Server" >/var/www/html/index.html
[root@RS1 ~]# curl http://127.0.0.1
RS1 Server

RS 2構成
[root@RS2 ~]# yum install httpd -y
[root@RS2 ~]# service httpd start
Starting httpd: httpd: apr_sockaddr_info_get() failed for RS2
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

                                                           [  OK  ]
# , 
[root@RS2 ~]# service iptables stop
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Unloading modules:                               [  OK  ]
[root@RS2 ~]# echo "RS2 Server" >/var/www/html/index.html
[root@RS2 ~]# curl 
RS2 Server

三、DR配置取付
ベースパッケージのインストール
[root@DR ~]# yum install make popt  libnl  libnl-devel  popt-static gcc* -y

パッケージのダウンロードとインストール
[root@DR ~]# wget  http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
[root@DR ~]# tar xf ipvsadm-1.26.tar.gz 
[root@DR ~]# cd ipvsadm-1.26
[root@DR ipvsadm-1.26]# make 
[root@DR ipvsadm-1.26]# make install
# ipvsadm --help, , 
[root@DR ipvsadm-1.26]# ipvsadm --help

四、RealserverのVIPを配置する
Realserverでスクリプト構成VIPを実行します.スクリプトの内容は次のとおりです.
#!/bin/bash
VIP=192.168.3.23
source /etc/rc.d/init.d/functions
case "$1" in
start)
       ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
       /sbin/route add -host $VIP dev lo:0
       echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
       echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
       echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
       echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
       echo "RealServer Start OK"
       ;;
stop)
       ifconfig lo:0 down
       route del $VIP >/dev/null 2>&1
       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
       echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
       echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
       echo "RealServer Stoped"
       ;;
       *)
       echo "Usage: $0 {start|stop}"
       exit 1
esac
exit 0

スクリプトの実行
[root@RS1 ~]# sh realserver.sh start
RealServer Start OK
[root@RS1 ~]# ip a|grep 3.23
    inet 192.168.3.23/32 brd 192.168.3.23 scope global lo:0

RS 2で同様の操作を行う
[root@RS2 ~]# sh realserver.sh start
RealServer Start OK
[root@RS2 ~]# ip a |grep 3.23
    inet 192.168.3.23/32 brd 192.168.3.23 scope global lo:0

五、DRにクラスタサービスを追加する
# DR VIP
[root@DR ~]# ifconfig eth0:0 192.168.3.23
[root@DR ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:e0:ca:92 brd ff:ff:ff:ff:ff:ff
    inet 192.168.3.20/24 brd 192.168.3.255 scope global eth0
    inet 192.168.3.23/24 brd 192.168.3.255 scope global secondary eth0:0
    inet6 fe80::20c:29ff:fee0:ca92/64 scope link 
       valid_lft forever preferred_lft forever

[root@DR ~]# ipvsadm -A -t 192.168.3.23:80 -s rr
# 
#-A   
#-t   VIP , 80
#-s   

[root@DR ~]# ipvsadm -a -t 192.168.3.23:80 -r 192.168.3.21 -g
[root@DR ~]# ipvsadm -a -t 192.168.3.23:80 -r 192.168.3.22 -g
# realserver  ,-g DR 

[root@DR ~]# 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.23:80 rr
  -> 192.168.3.21:80              Route   1      0          0         
  -> 192.168.3.22:80              Route   1      0          0 
  
# DR 
[root@DR ~]# service iptables stop

テスト1:直接アクセスhttp://192.168.3.23
[root@qa-web ~]# curl http://192.168.3.23
RS2 Server
[root@qa-web ~]# curl http://192.168.3.23
RS1 Server
[root@qa-web ~]# curl http://192.168.3.23
RS2 Server
[root@qa-web ~]# curl http://192.168.3.23
RS1 Serve
# lvs 

テスト2:バックエンドのRS 1を削除し、検証http://192.168.3.23アクセスできるかどうか
[root@DR ~]# ipvsadm -d -t 192.168.3.23:80 -r 192.168.3.21
[root@DR ~]# 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.23:80 rr
  -> 192.168.3.22:80              Route   1      0          0      
# realserver 192.168.3.22 httpd , RS2 Server

# http://192.168.3.23, 
[root@qa-web ~]# curl http://192.168.3.23
RS2 Server
[root@qa-web ~]# curl http://192.168.3.23
RS2 Server