lvs+keepalived實現負載均衡

  客戶端經過VIP(Virtual IP)(10.10.3.160)來訪問負載均衡服務器。負載均衡服務器經過MASTER:10.10.3.156或BACKUP:10.10.3.157將請求分別轉發給真實Web服務器(real server1:10.10.3.158  real server2:10.10.3.159)。 linux

  測試環境:web

  Director Server1(Master):10.10.3.156 算法

  Director Server2(Backup):10.10.3.157tomcat

  VIP:10.10.3.160bash

  Real server1:10.10.3.158服務器

  Real server2:10.10.3.159負載均衡

  LVS版本:ipvsadm-1.26oop

  keepalived版本:keepalived-1.2.7測試

1在兩臺Director Server上分別安裝並配置LVS+Keepalivedspa

2安裝LVS前系統須要安裝

yum -y install kernel-devel openssl-devel lftplibnl* popt* libnl* libpopt* gcc*

3兩臺Director Server分別安裝並配置LVS

cd /usr/src

wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz

若是已經建立了軟鏈接,那麼刪除之: rm /usr/src/linux 注意不能帶最後的/,不然沒法刪除。

查看內核方法:cat /proc/version(下一步中的2.6.32-358.el6.x86_64則是此處的Linux version)

 

ln -s /usr/src/kernels/2.6.32-358.el6.x86_64/ /usr/src/linux

tar -zxvf ipvsadm-1.26.tar.gz

cd ipvsadm-1.26

make && make install

編寫並運行腳本(LVS服務器的腳本)

vi lvs.sh

#!/bin/bash

VIP=10.10.3.160
RIP1=10.10.3.158
RIP2=10.10.3.159

/etc/rc.d/init.d/functions

logger $0 called with $1
case "$1" in

start)
echo " start LVS of DirectorServer"
/sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev eth0:0
echo "1" >/proc/sys/net/ipv4/ip_forward

#Clear IPVS table
/sbin/ipvsadm -C
#set LVS
/sbin/ipvsadm -A -t $VIP:80 -s rr
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g

#Run LVS
/sbin/ipvsadm
;;
stop)
echo "close LVS Directorserver"
echo "0" >/proc/sys/net/ipv4/ip_forward
/sbin/ipvsadm -C
/sbin/ifconfig eth0:0 down
;;
*)

echo "Usage: $0 {start|stop}"
exit 1
esac
~

注:/sbin/ipvsadm -A -t $VIP:80 -s rr (rr表明輪詢,還有其餘分配方式)

/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g (-g表明DR模式,還有其餘模式)

給腳本加權限,並執行

chmod +x lvs.sh

./lvs.sh start

四、兩臺Director Server分別安裝並配置keepalived

cd ..(cd /usr/src)

wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz

tar zxvf keepalived-1.2.7.tar.gz

cd keepalived-1.2.7

./configure 

make && make install

---------keepalived作成啓動服務,方便管理---------

\cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/

\cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/

mkdir /etc/keepalived/

\cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/

\cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/

service keepalived start  

-----------開啓路由轉發-----------

vi /etc/sysctl.conf 

修改下面的值,從0修改到1 

net.ipv4.ip_forward = 1 

刷新系統變量,使系統文件變動立刻生效

sysctl -p

------------配置Keepalived-------------

vi /etc/keepalived/keepalived.conf

輸入  :.,$d ,清空文件內容

從新輸入的內容爲:

! Configuration File for keepalived
global_defs {
   notification_email {
      king_819@163.com
   }
   notification_email_from king_819@163.com
   smtp_server smtp.163.com
  # smtp_connect_timeout 30
   router_id LVS_DEVEL
}



# VIP1
vrrp_instance VI_1 {
    state MASTER             #備份服務器上將MASTER改成BACKUP
    interface eth0
    lvs_sync_daemon_interface eth0
    virtual_router_id 51
    priority 100    # 備份服務上將100改成90
    advert_int 5
    authentication {
        auth_type PASS
        auth_pass 1111
    }

    virtual_ipaddress {
        10.10.3.160
        #(若是有多個VIP,繼續換行填寫.)
    }
}



virtual_server 10.10.3.160 80 {
    delay_loop 6                  #(每隔10秒查詢realserver狀態)
    lb_algo rr                  #(lvs 算法)
    lb_kind DR                  #(Direct Route)
    persistence_timeout 60        #(同一IP的鏈接60秒內被分配到同一臺realserver)
    protocol TCP              #(用TCP協議檢查realserver狀態)

    real_server 10.10.3.158 80 {
        weight 100               #(權重)
        TCP_CHECK {
        connect_timeout 10       #(10秒無響應超時)
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }

    real_server 10.10.3.159 80 {
        weight 100
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
     }
}

chkconfig  --level 0123456 keepalived on

查看自啓動狀態

chkconfig --list keepalived

service keepalived restart

五、兩臺Real Server(WEB1WEB2機器)分別編輯以下文件

vi /root/lvs_real.sh

#!/bin/bash

# description: Config realserver

#Written by : http://kerry.blog.51cto.com

SNS_VIP=10.10.3.160



/etc/rc.d/init.d/functions



case "$1" in

start)

       /sbin/ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP

       /sbin/route add -host $SNS_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

       sysctl -p >/dev/null 2>&1

       echo "RealServer Start OK"



       ;;

stop)

       /sbin/ifconfig lo:0 down

       /sbin/route del $SNS_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

賦給執行權限  

chmod 755 /etc/rc.d/init.d/functions    別人的配置文檔中沒這個步驟,我不知道爲何老是說執行到這句時沒有權限,因此我添加了執行權限

chmod 755 /root/lvs_real.sh

/root/lvs_real.sh start

將四臺機器的IPTABLES所有關閉,防止出現其它問題service iptables stop

兩臺Director server 分別啓動keepalived服務,並執行./lvs.sh start

兩臺Real server 分別執行/root/lvs_real.sh start

這樣高可用服務就配置好了。

 

配置兩臺Director server開機啓動項:

vi /etc/rc.d/rc.local

配置兩臺Real server開機啓動項:

vi /etc/rc.d/rc.local

我是這樣模擬真實需求測試的:在兩臺web主機上安裝tomcat,端口均爲80,將CRM項目分別部署到web主機上,啓動tomcat,在兩個主機上分別將CRM登陸頁增長顯示real server1 real server 2。這樣經過訪問http://10.10.3.160/crm 能夠看見兩個登陸頁輪詢顯示,即測試實驗成功。

相關文章
相關標籤/搜索