LVS+keepalived(DR)

1、LVS+Keepalived 介紹

l  LVSLinux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集羣系統。本項目在19985月由章文嵩博士成立,是中國國內最先出現的自由軟件項目之一。 html

l  目前有三種IP負載均衡技術(VS/NATVS/TUNVS/DR); linux

十種調度算法(rrr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)。 web

l  Keepalived在這裏主要用做RealServer的健康狀態檢查以及LoadBalance主機和BackUP主機之間failover的實現 算法

l  DR 模式的集羣中,LVS 負載調度器做爲羣集的訪問入口,但不做爲網關使用,服務池中全部節點都各自接入Internet 發送給客戶機的web響應數據包不須要通過lvs負載調度器。 vim

2、實驗環境與目標

網站負載均衡集羣拓撲圖

 

 

系統環境(配置好yum源): bash

 

[root@host1 ~]# cat /etc/redhat-release 服務器

CentOS release 6.2 (Final) 網絡

 

[root@host1 ~]# uname -a 負載均衡

Linux localhost.localdomain 2.6.32-220.el6.x86_64 #1 SMP Tue Dec 6 19:48:22 GMT 2011 x86_64 x86_64 x86_64 GNU/Linux dom

 

經過部署Apache應用構建Web服務器測試效果,經過部屬iSCSI作爲存儲服務器。

實驗目標:

實現Web服務器的備份和冗餘,其中任意借點出現故障都會自動切

換,保證應用正常運行。

 

3、LVS調度器的配置

[root@host1 ~]# modprobe ip_vs

 

[root@host1 ~]# cat /proc/net/ip_vs

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port Forward Weight ActiveConn InActConn

 

[root@host1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0:0

DEVICE=eth0:0

ONBOOT=yes

BOOTPROTO=static

IPADDR=192.168.10.100

NETMASK=255.255.255.0

 

[root@host1 ~]# /etc/init.d/network restart

[root@host1 ~]# ifconfig eth0:0

eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:46:D9:DE 

 

 

          inet addr:192.168.10.100  Bcast:192.168.10.255  Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

 

[root@host1 ~]# vim /etc/sysctl.conf           #避免網絡內的ARP解析出現異常,應該關閉Linux內核的重定向參數響應

#在最後添加

net.ipv4.conf.all.send_redirects = 0               

net.ipv4.conf.default.send_redirects = 0

net.ipv4.conf.eth0.send_redirects = 0

 

[root@host1 ~]# sysctl -p

 

[root@host1 ~]# yum -y install ipvsadm        #ipvsadm是負載調度器上使用LVS羣集管理工具經過調用ip_vs模塊來添加、刪除服務器節點以及查看羣集的運行狀態

 

[root@host1 ~]# ipvsadm -v

ipvsadm v1.25 2008/5/15 (compiled with popt and IPVS v1.2.1)

 

[root@host1 ~]# mkdir /etc/sysconfig/ipvsadm

 

[root@host1 ~]# /etc/init.d/ipvsadm restart

 

[root@host1 ~]# chkconfig ipvsadm on

 

[root@host1 ~]# yum -y install gcc kernel-devel openssl-devel popt-devel  #安裝支持庫      

 

[root@host1 ~]# tar -zxf keepalived-1.2.2.tar.gz               

 

[root@host1 ~]# cd keepalived-1.2.2

 

[root@host1 ~]# vi keepalived/libipvs-2.6/ip_vs.h

 

#include <sys/types.h>放到#include <linux/types.h>的上面

 

 

 

[root@host1 keepalived-1.2.2]# ./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.18-194.el5-i686/

 

[root@host1 keepalived-1.2.2]# make

 

[root@host1 keepalived-1.2.2]# make install

 

[root@host1 keepalived-1.2.2]# chkconfig --add keepalived

 

[root@host1 keepalived-1.2.2]# chkconfig keepalived on

 

[root@host1 keepalived-1.2.2]# cd /etc/keepalived/

 

[root@host1 keepalived]# cp keepalived.conf keepalived.conf.bak

 

[root@host1 keepalived]# vim keepalived.conf        #文件裏面全部內容

! Configuration File for keepalived

 

global_defs {

   router_id LVS_MASTER                #從調度器上改成router_id LVS_SLAVE

}

 

vrrp_instance VI_1 {

    state MASTER                       #從調度器上改成state SLAVE

    interface eth0

    virtual_router_id 51

    priority 100                         #從調度器上改成priority 80

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.10.100

    }

}

 

virtual_server 192.168.10.100 80 {

    delay_loop 6

    lb_algo rr

    lb_kind DR

    nat_make 255.255.255.0

    persistence_timeout 50

    protocol TCP

 

    real_server 192.168.10.3 80 {

        weight 1

        TCP_CHECK {

            connect_port 80

            connect_timeout 3

            nb_get_retry 3

        }

    }

 

    real_server 192.168.10.4 80 {

        weight 1

        TCP_CHECK {

            connect_port 80

            connect_timeout 3

            nb_get_retry 3

        }

    }

}

 

 

配置負載分配策略

# /etc/init.d/ipvsadm stop

# ipvsadm A t 192.168.10.100:80 s rr

# ipvsadm a t 192.168.10.100:80 r 192.168.10.3 g w 1

# ipvsadm a t 192.168.10.100:80 r 192.168.10.4 g w 1

# /etc/init.d/ipvsadm save

# chkconfig ipvsadm on

ipvsadm

 

從調度器上同上全部配置先安裝相關軟件包在安裝keepalived最後配置/etc/keepalived.conf,只需將註釋的地方修改便可

 

4、節點配置

1分別在2RealServer(節點)上面編寫腳本

[root@host3 ~]# vim /etc/init.d/realserver.sh

#!/bin/bash

VIP=192.168.10.100

startrs()

{

echo "start LVS of REALServer"

/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up

/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

}

stoprs()

{

/sbin/ifconfig lo:0 down

echo "close LVS Directorserver"

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

}

# ============ Main ===========

case $1 in

"start")

startrs;;

"stop")

stoprs;;

"*")

echo "Usage $0 {start|stop}"

exit 1

esac

 

 

 

[root@host3 ~]# chmod +x /etc/init.d/realserver.sh

[root@host3 ~]#/etc/init.d/realserver.sh start

 


(2)2RealServer(節點)中分別配置HTTP並啓動realserver.sh

[root@host3 ~]# yum -y install httpd

 

[root@host3 ~]# cd /var/www/html/

 

[root@host3 html]# echo "192.168.10.3" > index.html

 

[root@host3 html]# cat index.html

192.168.10.3

 

[root@host4 html]# cat index.html         #兩臺節點的配置除了網頁不同爲了更明顯的看到測試效果),其餘都同樣

192.168.10.4

 

[root@host3 ~]# /etc/init.d/realserver.sh start

 

[root@host3 ~]# echo "/etc/init.d/realserver.sh start" >> /etc/rc.local

 

[root@host3 html]# /etc/init.d/httpd start

 

[root@host3 html]# chkconfig httpd on

 

(3)2臺節點添加一條路由記錄,將訪問VIP的數據限制在本地以免通訊紊亂

[root@host4 ~]# route add -host 192.168.10.100 dev lo:0

 

[root@host4 ~]# echo "/sbin/route add -host 192.168.10.100 dev lo:0" >> /etc/rc.local

 

另外一臺的配置過程同樣,過程略

 

5、測試

在兩臺調度器上分別啓動Keepalived

[root@host1 ~]# /etc/init.d/keepalived restart

 

[root@host1 ~]# 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.10.100:80 rr persistent 50

  -> 192.168.10.3:80              Route   1      0          0        

  -> 192.168.10.4:80              Route   1      0          0

 

使用客戶機訪問<http://192.168.10.100>,使主調度器掛掉看是否可以訪問

使用客戶機訪問<http://192.168.10.100>,使一個節點掛掉看是否可以訪問

相關文章
相關標籤/搜索