1. 程式人生 > >虛擬機器搭建LVS+keepalived DR

虛擬機器搭建LVS+keepalived DR

LVS虛擬伺服器負載均衡高可用搭建


其實一開始想準備了四臺真實騰訊云云主機來測試的,最後還是由於VIP的問題,轉到虛擬機器上,VIP在真實伺服器上不能像虛擬機器那樣設定成跟你的主機IP一致就可以,好像需要一個公網IP才行,還有待挖掘!

lvs的技術和原理
LVS是Linux Virtual Server的簡寫,意即Linux虛擬伺服器,是一個虛擬的伺服器集群系統。本專案在1998年5月由章文嵩博士成立,是中國國內最早出現的自由軟體專案之一。

技術
LVS叢集採用IP負載均衡技術和基於內容請求分發技術。排程器具有很好的吞吐率,將請求均衡地轉移到不同的伺服器上執行,且排程器自動遮蔽掉伺服器的故障,從而將一組伺服器構成一個高效能的、高可用的虛擬伺服器.
叢集採用三層結構
A、負載排程器(load balancer),它是整個叢集對外面的前端機,負責將客戶的請求傳送到一組伺服器上執行,而客戶認為服務是來自一個IP地址(我們可稱之為虛擬IP地址)上的。
B、伺服器池(server pool),是一組真正執行客戶請求的伺服器,執行的服務有WEB、MAIL、FTP和DNS等。
C、共享儲存(shared storage),它為伺服器池提供一個共享的儲存區,這樣很容易使得伺服器池擁有相同的內容,提供相同的服務。


排程器工作原理
排程器是伺服器集群系統的唯一入口點,它可以採用IP負載均衡技術、基於內容請求分發技術或者兩者相結合。
在IP負載均衡技術中,需要伺服器池擁有相同的內容提供相同的服務。當客戶請求到達時,排程器只根據伺服器負載情況和設定的排程演算法從伺服器池中選出一個伺服器,將該請求轉發到選出的伺服器,並記錄這個排程;當這個請求的其他報文到達,也會被轉發到前面選出的伺服器。在基於內容請求分發技術中,伺服器可以提供不同的服務,當客戶請求到達時,排程器可根據請求的內容選擇伺服器執行請求。因為所有的操作都是在Linux作業系統核心空間中完成的,它的排程開銷很小,所以它具有很高的吞吐率。伺服器池的結點數目是可變的。當整個系統收到的負載超過目前所有結點的處理能力時,可以在伺服器池中增加伺服器來滿足不斷增長的請求負載。

意義(宗旨)
使用叢集技術和Linux作業系統實現一個高效能、高可用的伺服器.
很好的可伸縮性
很好的可靠性
很好的可管理性


LVS三種工作模式
1、NAT模式-網路地址轉換
通過網路地址轉換的方法來實現排程,客戶端請求目的為VIP,LB根據排程演算法決定傳送到後端的RS,這個過程中LB會把客戶端傳送的請求目的由VIP改成後端真實伺服器(RS)的IP,真實伺服器響應完畢再把響應後的資料包傳送給LB(NAT模式下我們需要把RS的預設路由設定為LB伺服器),LB接收到響應包後再改成VIP傳送給客戶端.
缺點:請求的報文和響應的報文都需要通過LB進行地址改寫,因此網站訪問量比較大的時候LB負載均衡排程器有比較大的瓶頸;
優點:NAT模式支援對IP地址和埠進行轉換。即使用者請求的埠和真實伺服器的埠可以不一致。只需要在LB上配置一個公網IP地址就可以了。
2、TUN模式-隧道模式
基於NAT模式的缺點,排程器把請求的報文通過IP隧道轉發到真實的伺服器。真實的伺服器將響應處理後的資料直接返回給客戶端(客戶端請求目的為VIP,LB接收到客戶請求包,進行IP Tunnel封裝傳送給RS解開IP Tunnel包頭資訊,RS得到客戶的請求包並進行響應處理,)。這樣排程器就只處理請求入站報文,由於一般網路服務應答資料比請求報文大很多,採用VS/TUN模式後,集群系統的最大吞吐量可以提高10倍。NAT模式不同的是,它在LB和RS之間的傳輸不用改寫IP地址。而是把客戶請求包封裝在一個IP tunnel裡面,然後傳送給RS節點伺服器,節點伺服器接收到之後解開IP tunnel後,進行響應處理。並且直接把包通過自己的外網地址(源IP地址還是VIP地址)傳送給客戶不用經過LB伺服器。
3、DR模式-直接路由模式
DR模式是通過改寫請求報文的目標MAC地址(客戶端請求目的為VIP,LB接收到客戶請求包,不修改目標IP地址和目標埠,也不封裝IP報文,而是將請求報文的資料幀的目標MAC地址改為真實伺服器的MAC地址。然後再將修改的資料幀在伺服器組的區域網上傳送,真實伺服器響應請求之後根據自己的路由資訊將這個響應資料包傳送回給客戶,並且源IP地址還是VIP。),將請求發給真實伺服器的,而真實伺服器響應後的處理結果直接返回給客戶端使用者。同TUN模式一樣,DR模式可以極大的提高集群系統的伸縮性。而且DR模式沒有IP隧道的開銷,但是要求排程器LB與真實伺服器RS都有一塊網絡卡連線到同一物理網段上,必須在同一個區域網環境。
DR模式是網際網路使用比較多的一種模式。
DR模式小結:RS主機需要繫結VIP地址在LO介面上,由於DR模式的排程器僅做MAC地址的改寫,所以排程器LB就不能改寫目標埠,那麼RS伺服器就得使用和VIP相同的埠提供服務,負載均衡器的網絡卡必須與物理網絡卡在一個物理段上。

這裡我們只演示DR模式.

環境準備

lvs+keepalived最少虛擬四臺虛擬機器
DR-Master:192.168.20.130
DR-Backup:192.168.20.131
RS-Node1:192.168.20.132
RS-Node2:192.168.20.133
VIP:192.168.20.134

以上四臺都用虛擬機器測試,全部關閉防火牆service iptables stop.

開始搭建

兩臺DR安裝keepalived和ipvsadm
yum -y install keepalived ipvsadm

注意:如果只做負載均衡只安裝ipvsadm就夠了,keepalived是用來做高可用的.


兩臺DR配置keepalived.conf檔案
vim /etc/keepalived/keepalived.conf
 

! Configuration File for keepalived
global_defs {
   notification_email {
     [email protected]                  #報警郵箱,可註釋掉
   }
   notification_email_from [email protected]
   smtp_server 192.168.20.130        #這裡一定要真實IP
   smtp_connect_timeout 30
   router_id localhost                       #通常為hostname,但不一定非得是
}
vrrp_instance VI_1 {                        #vrrp例項定義部分  
    state MASTER                            #設定lvs的狀態,MASTER和BACKUP兩種,必須大寫
    interface eth0                                #設定對外服務的介面
    virtual_router_id 51                     #設定虛擬路由標示,這個標示是一個數字,同一個vrrp例項使用唯一標示
    priority 150                                 #定義優先順序,數字越大優先順序越高
    advert_int 1                             #設定master與backup負載均衡器之間同步檢查的時間間隔,單位是秒
    authentication {                            #設定驗證型別和密碼
        auth_type PASS                        #主要有PASS和AH兩種
        auth_pass 1111                            #驗證密碼,同一個vrrp_instance下MASTER和BACKUP密碼必須相同
    }
    virtual_ipaddress {
        192.168.20.134                                   #VIP,可以寫多個,每行一個
    }
}
virtual_server 192.168.20.134 80 {                #設定虛擬伺服器,需要指定虛擬ip和服務埠
    delay_loop 6                                             #健康檢查時間間隔
    lb_algo rr                                                 #負載均衡排程演算法
    lb_kind DR                                            #負載均衡轉發規則
    nat_mask 255.255.255.0
    persistence_timeout 0                          #設定會話保持時間,對動態網頁非常有用
    protocol TCP                                        #轉發協議,TCP和UDP兩種
    real_server 192.168.20.132 80{         #配置伺服器節點1,需要指定real server的真實IP地址和埠
        weight 1                                        #設定權重,數字越大權重越高
        TCP_CHECK {
            connect_port    80                    #連線埠,要和上面的保持一致
            connect_timeout 3                     #連線超時為10秒
            nb_get_retry 3                            #重連次數
            delay_before_retry 3                   #重試間隔
        }
    }
    real_server 192.168.20.133 80{
        weight 1
        TCP_CHECK {
            connect_port    80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}


從DR與主DR的配置檔案唯一不同的地方如下兩處:
state BACKUP        #(從DR要寫成BACKUP)
priority 100        #(從DR優先順序要比主DR數字小)

注意:這個配置還可以寫檢測指令碼來代替.

兩臺DR啟動keepalived
/etc/init.d/keepalived start

兩臺RS安裝httpd,分別給主頁面作一個不同的標識便於測試
yum -y install httpd
echo "node1" >>/var/www/html/index.html
echo "node2" >>/var/www/html/index.html

兩臺RS編寫如下指令碼,此指令碼用於節點伺服器繫結 VIP
vim /lvs/RS.sh

#!/bin/bash
#description:start realserver
vip=192.168.20.134
source /etc/rc.d/init.d/functions
case $1 in
start)
        echo "Start Realserver"
        /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
;;
stop)
        echo "Stop Realserver"
        /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 "Usage: $0 (start | stop)"
exit 1
esac

兩臺RS分別執行上面寫好的指令碼
bash /lvs/RS.sh

檢視VIP是否繫結成功

兩臺RS啟動httpd
service httpd start

測試
瀏覽器輸入VIP地址:http://192.168.20.134
重新整理瀏覽器迴圈呈現node1和node2表示OK.

關掉主DR的keepalived檢視VIP是否漂移到從DR,瀏覽器訪問還正常表示OK.

注意:nginx用yum安裝需要先安裝nginx專用的yum源
rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
再安裝nginx: yum -y install nginx
啟動:service nginx start

注意:nginx替換httpd瀏覽器訪問的時候會有一個會話保持的現象,就是一段時間裡初次訪問到的節點就會一直都是此節點.

yum安裝httpd的主頁面目錄:/var/www/html/index.html
yum安裝nginx的主頁面目錄:/usr/share/nginx/html/index.html

總結:
當 MASTER 伺服器無法提供服務時,VIP 會在 MASTER 上自動移除,BACKUP 伺服器會提升為 MASTER 狀態,繫結 VIP 、接管服務。
當 MASTER 修復加入網路後,會自動搶回 VIP ,成為 MASTER 身份。
當後端提供服務httpd/nginx服務掛起時,會自動切換至其它httpd/nginx伺服器。