LVS(DR)+keepalived實現高可用負載均衡

一、lvs+keepalived

1、lvs

LVS集羣採用IP負載均衡技術和基於內容請求分發技術。調度器具有很好的吞吐率,將請求均衡地轉移到不同的服務器上執行,且調度器自動屏蔽掉服務器的故障,從而將一組服務器構成一個高性能的、高可用的虛擬服務器。整個服務器集羣的結構對客戶是透明的,而且無需修改客戶端和服務器端的程序。爲此,在設計時需要考慮系統的透明性、可伸縮性、高可用性和易管理性。

2、keepalived

Keepalived的作用是檢測web服務器的狀態,如果有一臺web服務器死機,或工作出現故障,Keepalived將檢測到,並將有故障的web服務器從系統中剔除,當web服務器工作正常後Keepalived自動將web服務器加入到服務器羣中,這些工作全部自動完成,不需要人工干涉,需要人工做的只是修復故障的web服務器。

wKioL1Nkgo6CDL5BAAC0P6IpsqM602.png

從上圖可以看出,keepalived包括三個組件:IO複用組件、內存管理組件和控制組件。在覈心組件中IPVS wrapper就是負責生成ipvs規則的,所以說keepalived天生就是爲ipvs而生的,也就是爲LVS提供高可用集羣功能的。keepalived實現的功能主要有三個:一個是將IP地址飄移到其他節點上,一個就是在另一個主機上生成ipvs規則,最後一個就是健康狀況檢查。keepalived通過軟件的方式在其內部模擬實現VRRP協議,然後藉助於VRRP協議實現IP地址漂移。

二、拓撲

wKiom1NkhCTTrFSDAAECSPQyUaw649.png

三、LVS(DR)+keepalived實現高可用負載均衡

1、配置DR

(1)配置LVS-DR-MASTER

[root@LVS-DR-MASTER ~]# yum -y install keepalived
[root@LVS-DR-MASTER ~]# vim /etc/keepalived/keepalived.conf
#! Configuration File for keepalived
global_defs {
   notification_email {
     [email protected]    #故障接收聯繫人
   }
   notification_email_from lvs.dr@localhost    #故障發送人
   smtp_server 127.0.0.1    #本機發送郵件
   smtp_connect_timeout 30
   router_id LVS_DEVEL_shuishui
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0        #實例綁定的網卡,因爲在配置虛擬IP的時候必須是在已有的網卡上添加的
    virtual_router_id 88        #相同的VRID爲一個組,它將決定多播的MAC地址
    priority 100    #主(172.16.7.10)的優先級爲100,備(172.16.7.100)的爲99
    advert_int 1    #VRRP Multicast廣播週期秒數,設定MASTER與BACKUP負載均衡器之間同步檢查的時間間隔,單位是秒
    authentication {
        auth_type PASS    #有兩種認證方式,PASS或AH
        auth_pass 1111        #設置驗證密碼,在同一個vrrp_instance下,MASTER與BACKUP必須使用相同的密碼才能正常通信
    }
    virtual_ipaddress {
        172.16.7.1    #vip
    }
}
virtual_server 172.16.7.1 80 {
    delay_loop 6       #設置運行情況檢查時間,單位是秒
    lb_algo wlc        #設置負載調度算法,wlc爲最小加權算法,rr爲輪訓
    lb_kind DR         #設置LVS負載均衡DR模式
    net_mask 255.255.255.0
    #persistence_timeout 0    #設置成非0後,過一會訪問VIP,就會出現訪問不到的情況,JJ也註釋掉了這個參數
                             #會話保持時間,單位是秒。這個選項對動態網頁是非常有用的,爲集羣系統中的session共享提供了一個很好>的解決方案。
                             #有了這個會話保持功能,用戶的請求會被一直分發到某個服務節點,直到超過這個會話的保持時間。
                             #需要注意的是,這個會話保持時間是最大無響應超時時間,也就是說,用戶在操作動態頁面時,如果50秒內沒有執行任何操作,
                             #那麼接下來的操作會被分發到另外的節點,但是如果用戶一直在操作動態頁面,則不受50秒的時間限制
    protocol TCP        #使用TCP協議檢查realserver狀態,指定轉發協議類型,有TCP和UDP兩種
    sorry_server 127.0.0.1 80
    real_server 172.16.7.200 80 {    #對應後端web1
        weight 3   #節點權重值
        TCP_CHECK {                    #健康檢查方式
            connect_port 80    
            connect_timeout 3      #連接超時
            nb_get_retry 3         #重試次數
            delay_before_retry 3   #重試間隔/S
        }
    }
    real_server 172.16.7.201 80 {    #對應後端web2
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

注:這裏我想說一下lvs的session問題的處理功能,因爲他不像haproxy和nginx可以工作在7層,所以lvs只提供簡單的維持session功能的參數,就是persistence_timeout,哇,這個只是說你同一個source只能大概給你個session維持時間,不像haproxy的source算法和nginx的ip_hash功能,所以啊,這方面lvs做的不如nginx和haproxy好。

(2)配置LVS-DR-BACKUP

[root@LVS-DR-MASTER ~]# scp /etc/keepalived/keepalived.conf [email protected]:/etc/keepalived/
#
#
#複製過去只需修改state爲backup和priority爲99

(3)測試VIP飄移

   ①、啓動keeplived服務後,LVS-DR-MASTER上擁有VIP

wKioL1NkiMvxTsewAABGF7Z8r1A886.png

   ②、企業MASTER上的keepalived服務,測試VIP飄移

wKioL1NkiRbCgRpTAABZXEzfFIU783.png

   ③、在LVS-DR-BACKUP上查看是否已拿到VIP

wKioL1NkiZ6zh4ULAABAyzQl8cU379.png

2、配置web

(1)配置web1

   ①、配置realserver

[root@web1 ~]# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
[root@web1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@web1 ~]# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
[root@web1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@web1 ~]#
[root@web1 ~]# ifconfig lo:0 172.16.7.1 netmask 255.255.255.255 broadcast 172.16.7.1 up
[root@web1 ~]#
[root@web1 ~]# route add -host 172.16.7.1 dev lo:0

   ②、編輯網頁文件

[root@web1 ~]# yum -y install httpd
[root@web1 ~]#
[root@web1 ~]# vim /var/www/html/index.html
<h1>Welcome to web1(172.16.7.200)</h1>

   ③、啓動httpd服務測試正常與否

[root@web1 ~]# service httpd start

wKioL1Nki_jCClnpAACbnYsALHY665.png

(2)配置web2

   方法同web1

(3)使用腳本配置 realserver

[root@localhost ~]# vi /etc/init.d/real.sh
#description : start realserver
VIP=172.16.7.1
. /etc/init.d/functions
case "$1" in
start)
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
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 "LVS RealServer Start OK"
;;
stop)
/sbin/ifconfig lo:0 down
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 "LVS RealServer Stoped OK"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
[root@localhost ~]# chmod +x /etc/init.d/real.sh
[root@localhost ~]# /etc/init.d/real.sh start
LVS RealServer Start OK
[root@localhost ~]# echo "/etc/init.d/real.sh start" >> /etc/rc.local

3、訪問VIP測試LVS(DR)+keepalived高可用負載均衡

(1)負載均衡測試

   ①、兩臺web都工作正常,訪問VIP時,可以被負載到兩臺web上

   ②、停掉一臺web的httpd服務,訪問VIP是,被負載到正常的web服務器上

(2)高可用測試

   ①、首先兩臺DR的keepalived服務都正常,此時VIP在LVS-DR-MASTER(172.16.7.10)上

wKioL1NkjYPjDeaxAACrE-gOJyg797.png

   ②、關閉LVS-DR-MASTER上的keepalived服務,此時VIP在LVS-DR-BACKUP(172.16.7.100)上

[root@LVS-DR-MASTER ~]# service keepalived stop

經測試,訪問172.16.7.1依然正常,通過keepalived+lvs避免了DR的單點故障,實現了高可用負載均衡

4、查看ipvs規則

   如果想查看生效的規則,只需安裝ipvsadm即可

[root@LVS-DR-MASTER ~]# yum -y install ipvsadm
[root@LVS-DR-MASTER ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.7.1:80 wlc
  -> 172.16.7.200:80              Route   3      0          0       
  -> 172.16.7.201:80              Route   1      0          0


查看更多lvs相關內容請點擊章文嵩博士原創論文:http://www.linuxvirtualserver.org/zh/lvs1.html




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章