LVS+keepalived負載均衡

文檔參考 http://bbs.linuxtone.org/thread-1077-1-1.html (netseek)
lvs說明:目前有三種IP負載均衡技術(VS/NAT、VS/TUN和VS/DR);
八種調度算法(rr,wrr,lc,wlc,lblc,lblcr,dh,sh)。
在調度器的實現技術中,IP負載均衡技術是效率最高的。在已有的IP負載均衡技術中有經過網絡地址轉換(Network Address Translation)將一組服務器構成一個高性能的、高可用的虛擬服務器,咱們稱之爲VS/NAT技術(Virtual Server via Network Address Translation),大多數商品化的IP負載均衡調度器產品都是使用此方法,如Cisco的LocalDirector、F5的Big/IP和 Alteon的ACEDirector。在分析VS/NAT的缺點和網絡服務的非對稱性的基礎上,咱們提出經過IP隧道實現虛擬服務器的方法VS/TUN (Virtual Server via IP Tunneling),和經過直接路由實現虛擬服務器的方法VS/DR(Virtual Server via Direct Routing),它們能夠極大地提升系統的伸縮性。因此,IPVS軟件實現了這三種IP負載均衡技術,它們的大體原理以下(咱們將在其餘章節對其工做原理進行詳細描述),
Virtual Server via Network Address Translation(VS/NAT)
經過網絡地址轉換,調度器重寫請求報文的目標地址,根據預設的調度算法,將請求分派給後端的真實服務器;真實服務器的響應報文經過調度器時,報文的源地址被重寫,再返回給客戶,完成整個負載調度過程。
Virtual Server via IP Tunneling(VS/TUN)
採用NAT技術時,因爲請求和響應報文都必須通過調度器地址重寫,當客戶請求愈來愈多時,調度器的處理能力將成爲瓶頸。爲了解決這個問題,調度器把請求報文經過IP隧道轉發至真實服務器,而真實服務器將響應直接返回給客戶,因此調度器只處理請求報文。因爲通常網絡服務應答比請求報文大許多,採用 VS/TUN技術後,集羣系統的最大吞吐量能夠提升10倍。
Virtual Server via Direct Routing(VS/DR)
VS/DR經過改寫請求報文的MAC地址,將請求發送到真實服務器,而真實服務器將響應直接返回給客戶。同VS/TUN技術同樣,VS/DR技術可極大地提升集羣系統的伸縮性。這種方法沒有IP隧道的開銷,對集羣中的真實服務器也沒有必須支持IP隧道協議的要求,可是要求調度器與真實服務器都有一塊網卡連在同一物理網段上。
針對不一樣的網絡服務需求和服務器配置,IPVS調度器實現了以下八種負載調度算法:使用比較多的是如下四種:
輪叫(Round Robin)
調度器經過"輪叫"調度算法將外部請求按順序輪流分配到集羣中的真實服務器上,它均等地對待每一臺服務器,而無論服務器上實際的鏈接數和系統負載。
加權輪叫(Weighted Round Robin)
調度器經過"加權輪叫"調度算法根據真實服務器的不一樣處理能力來調度訪問請求。這樣能夠保證處理能力強的服務器處理更多的訪問流量。調度器能夠自動問詢真實服務器的負載狀況,並動態地調整其權值。
最少連接(Least Connections)
調度器經過"最少鏈接"調度算法動態地將網絡請求調度到已創建的連接數最少的服務器上。若是集羣系統的真實服務器具備相近的系統性能,採用"最小鏈接"調度算法能夠較好地均衡負載。
加權最少連接(Weighted Least Connections)
在集羣系統中的服務器性能差別較大的狀況下,調度器採用"加權最少連接"調度算法優化負載均衡性能,具備較高權值的服務器將承受較大比例的活動鏈接負載。調度器能夠自動問詢真實服務器的負載狀況,並動態地調整其權值。

一、拓撲描述:(必定要理解這個拓撲關係)
        負載服務器master真實IP        192.168.1.252
        負載服務器backup真實IP  192.168.1.230
        負載服務器虛擬IP        192.168.1.229
        後端WEB服務器IP                192.168.1.220
        後端WEB服務器IP                192.168.1.231
二、升級內核
#yum install kernel
三、重啓服務器,使用新的內核
四、刪除舊版、升級新版內核
#rpm -e kernel-2.6.18-53.el5
#rpm -e kernel-devel-2.6.18-53.el5
#rpm -e kernel-headers-2.6.18-53.el5 --nodeps
#yum install kernel-headers
#yum install kernel-devel
五、下載軟件
#wget http://www.linuxvirtualserver.or ... ipvsadm-1.24.tar.gz
     #wget http://www.keepalived.org/software/keepalived-1.1.15.tar.gz
六、安裝ipvsadm-1.24  //master和backup
#       uname -r  //查詢版本
        2.6.18-53.el5xen
#        ln -s  /usr/src/kernels/2.6.18-53.el5xen-i686/  /usr/src/linux  //假如這裏的內核版本不同的話,make的時候會出現錯誤。

#        rpm -ivh ipvsadm-1.24-6.src.rpm
#        cd /usr/src/redhat/SOURCES
#        tar -zxvf ipvsadm-1.24.tar.gz
#        cd ipvsadm
#        make;make install
7,安裝keepalived.
在負載均衡服務器上執行 master和backup
一、解壓
        #tar -zxvf keepalived-1.1.15.tar.gz
        #cd keepalived-1.1.15
        #./configure --prefix=/usr/local/keepalived
        #make;make install
        #cp /usr/local/keepalived/sbin/rc.d/init.d/keepalived /sbin/rc.d/init.d/
        #cp /usr/local/keepalived/sbin/sysconfig/keepalived /sbin/sysconfig/
        #mkdir /sbin/keepalived
        #cp /usr/local/keepalived/sbin/keepalived/keepalived.conf /sbin/keepalived/
        #cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
        #service keepalived start|stop      作成系統服務啓動,方便管理
八、開啓負載服務器路由機制  //master和backup
#        vi /sbin/sysctl.conf 保證有以下內容
        net.ipv4.ip_forward = 1
        執行
#        sysctl -p
九、創建負載服務器啓動腳本  //master和backup
#vi /sbin/lvsdr.sh
#!/bin/bash
VIP=192.168.1.229
RIP1=192.168.1.220
RIP2=192.168.1.231
/sbin/rc.d/init.d/functions
case "$1" in
start)
        echo "start LVS of DirectorServer"
        #Set the Virtual IP Address
        /sbin/ifconfig eth0:1 $VIP broadcast $VIP netmask 255.255.255.255 up
        /sbin/route add -host $VIP dev eth0:1
        #Clear IPVS Table
        /sbin/ipvsadm -C
        #Set Lvs
        /sbin/ipvsadm -A -t $VIP:80 -s wrr
        /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"
/sbin/ifconfig eth0:1 down
/sbin/ipvsadm -C
;;
*)
echo "Usage 0{start|stop}"
exit 1
esac
十、分配權限
#chmod 755 /sbin/lvsdr.sh
十一、執行測試
#        /sbin/lvsdr.sh start
        查看ifconfig是否有ifcfg-eth0:1   (有就對了)
        查看route -n 路由表是否多了eth0:1路由(有就對了)
#        /sbin/lvsdr.sh stop
        查看ifconfig是否有ifcfg-eth0:1   (無就對了)
        查看route -n 路由表是否多了eth0:1路由(無就對了)
#        /sbin/lvsdr.sh  adsa
        是否提示參數錯誤,只能使用{start|stop}。
十二、配置後端WEB服務器
        在192.168.1.231和192.168.1.220上分別創建以下腳本。
#        vi /sbin/realdr.sh
        #!/bin/bash
         # description: Config realserver lo and apply noarp 
                 
         SNS_VIP=192.168.1.229          
         . /etc/rc.d/init.d/functions
         
         case "$1" in
         start)
                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)
                ifconfig lo:0 down
                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
1三、配置權限
#        chmod 755 /sbin/realdr.sh
1四、在兩臺web服務器上分別執行其指命。
/sbin/realdr.sh start
15.配置keepalived.conf配置文件 //master和backup
#vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   notification_email {
      ziqiang001@gmail.com   }
   notification_email_from  ziqiang001@gmail.com
   smtp_server 222.73.214.147
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_instance VI_1 {
    state MASTER  //備份服務器設置爲backup
    interface eth0
    virtual_router_id 51
    priority 100  ////備份服務器設置小於100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.229
    }
}
virtual_server 192.168.1.229 80 {
    delay_loop 6  //隔6秒查詢
    lb_algo wrr   //lvs算法
    lb_kind DR    //(Direct Route)
    persistence_timeout 60  //同一IP的鏈接60秒內被分配到同一臺realserver
    inhibit_on_failure  //當web掛掉的時候,前面請求的用戶,能夠繼續打開網頁,可是後面的請求不會調度到掛掉的web上面。
    protocol TCP   //用TCP協議檢查realserver狀態
    real_server 192.168.1.220 80 {
        weight 3    //權重
        TCP_CHECK {
            connect_timeout 10   //10秒無響應超時
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.1.231 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
        }
    }
  
}
16,啓動keepalived
# /etc/rc.d/init.d/keepalived start
使用keepalived時不須要啓動 lvsdr.sh 腳本。
17:設置成自啓動
#vi /etc/rc.local //裏面添加
/etc/init.d/keepalived restart
/etc/lvsdr.sh start

測試算法:
   個人測試環境中,算法使用的是wrr,和wlc這兩種。

權重問題:當lvs配置文件lvs-dr.sh改變權重以及keepalived配置文件keepalived.conf修改權重後,哪一個文件從新啓動,哪一個文件的權重生效。同時權重在master和backup上面能夠設置不一樣。
當算法是rr的時候,權重沒有做用,可是當算法是wlc和wrr的時候,必須設置權重,能夠根據服務器的性能和配置,來肯定權重的大小,當權重大的時候,lvs調度的服務也就多,同時權重高的服務器先收到連接。當小的時候,lvs調度的比較少。當權重爲0的時候,表示服務器不可用,
測試lvs
1 當我把master的lvs服務關掉的時候,會將用戶請求自動切換到backup上面進行工做。
2 當我把web服務關掉的時候,lvs上面會顯示web消失,當啓用後,web會自動顯示
web關閉後:
[root@localhost ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress ort Scheduler Flags
  -> RemoteAddress ort           Forward Weight ActiveConn InActConn
TCP  192.168.1.229:80 wlc
  -> 192.168.1.231:80             Route   10     0          0        
[root@localhost ~]# ipvsadm -ln
web啓用後:
root@localhost ~]# ipvsadm -ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress ort Scheduler Flags   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn TCP  192.168.1.229:80 wlc   -> 192.168.1.231:80             Route   1      0          0           -> 192.168.1.220:80             Route   1      0          0     3 當master服務器down的時候,backup自動會接替服務,當master起來的時候,backup會自動斷掉。
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息