構建黃金組合LVS + Keepalived高可用負載均衡集羣

重點:每個節點時間都同步哈!

[root@DR2 ~]# ntpdate time.windows.com && hwclock -w

1、環境簡介:

1)虛擬機:VMware ESXi 5.5 (CentOS 6.4 x86-64安裝在其中)

2)操作系統: CentOS 6.4 x86-64

3)Keepalived版本: Keepalived-1.2.9

4)IPVS管理工具IPVSadm-1.26

5) Linux/Unix工具Xmanager 4.0 (Xshell)

155416994.jpg

170103283.jpg

2、禁掉防火牆和Selinux

(1) 禁掉防火牆

clip_p_w_picpath002

(2) 禁掉Selinux

vim /etc/selinux/config

(3) 最後,必須重新啓動系統

shutdown -r now

重點: DR2、Real Server1和Real Server2如下圖所述完成!

clip_p_w_picpath006

3、檢查DR1與DR2的連通性:

//在DR1上分別ping DR2的public IP和private IP,如下圖所示:

clip_p_w_picpath008

//在DR2上分別ping DR1的public IP和private IP,如下圖所示:

clip_p_w_picpath010

一、理論篇:

1-LVS簡介:

LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集羣系統。本項目在1998年5月由章文嵩博士成立,是中國國內最早出現的自由軟件項目之一。章文嵩博士目前工作於阿里集團,主要從事集羣技術、操作系統、對象存儲與數據庫的研究。(摘自《BAIDU百科》)

2-LVS集羣的組成:

LVS服務器系統由三部分組成:

1)負載均衡層:

位於整個集羣系統的最前端,避免單點故障一般最少由2臺或2臺以上負載調度器組成。

2)服務器羣組層

是一組真正運行應用服務器的機器組成,Real Server可以是Web、FTP、DNS、Mail 、視頻等服務器中的一個或N個,每個Real Server之間通過高速的LAN/WAN相連接。爲了節省寶貴的資源,在生產環境中,Director Server同時身兼Real Server的角色!

3)共享存儲層:

爲Real Server提供共享存儲空間和內容一致性的存儲區域。可以爲磁盤陣列、Red Hat的GFS文件系統、Oracle的OCFS2文件系統等。

Director Server是整個LVS的核心!到目前爲止,Director server只能安裝在Linux、FreeBSD上,如果Linux內核是2.6及以上時,則已經內置了LVS的各個模塊,不用作任何的設置就支持LVS功能。

Real Server服務器幾乎爲所有有系統平臺,如:Windows、Linux、Solaris、AIX、BSD等系統平臺。

3-LVS集羣的特點:

(1) IP負載均衡和負載調度算法;

(2) 高可用性;

(3) 高可靠性;

(4) 適用環境;

(5) 開源軟件。

4-LVS集羣系統的優缺點:

|-LVS集羣系統的優點:

(1) 抗負載能力強

工作在第4層僅作分發之用,沒有流量的產生,這個特點也決定了它在負載均衡軟件裏的性能最強的;無流量,同時保證了均衡器I/O的性能不會受到大流量的影響;

(2) 工作穩定

自身有完整的雙機熱備方案,如LVS+Keepalived和LVS+Heartbeat;    
(3) 應用範圍比較廣

可以對所有應用做負載均衡;    
(4) 配置性比較低

既是優點,也是缺點,因爲沒有太多配置,所以並不需要太多接觸,大大減少了人爲出錯的機率;    
|-LVS集羣系統的缺點:
(1) 軟件本身不支持正則處理,不能做動靜分離,這就凸顯了Nginx/HAProxy+Keepalived的優勢。    
(2) 如果網站應用比較龐大,LVS/DR+Keepalived就比較複雜了,特別是後面有Windows Server應用的機器,

實施及配置還有維護過程就比較麻煩,相對而言,Nginx/HAProxy+Keepalived就簡單多了。

集羣根據業務目標而分爲以下幾種:

(1) High Availability (高可用): 目的是保持業務的持續性。

(2) Load Balancing(負載均衡): 將請求一個個分擔到不同一計算機上去,每臺計算機獨立完成一個用戶的請求的。

(3) High Performance (高性能): 需要一組計算機共同完成一件事情。

5-實現集羣產品:

*HA

(1)RHCS: 企業內用得比較多

(2)heartbeat:

(3)keepalived:

(*)黃金組合: LVS + Keepalived (重點)

*LB(負載均衡)

(1)HAProxy;

(2)LVS;

(3)Nginx;

(4)硬件F5;

(5)Piranha :紅帽光盤自帶的,但在Linux 6.0中又去掉了

*HPC

6-LVS負載均衡技術:

(1)LVS-DR模式(Direct routing):直接路由模式。用得最多!可以跟100個以上Real Server

(2)LVS-NAT模式(Network Address Translaton): 只能跟3~5個Real Server;

(3)LVS-TUN模式(IP Tunneling): 應用於遠程,尤其是外網等

7-LVS-NAT特性:

(1)Real Server必須與Director在同一網絡,僅用於與Director服務器通訊;

(2)Director接收所有的數據包通訊(包括客戶端與Director、Director和real server直接的通訊);

(3)Real Server的默認網關指向Director的真實IP地址;

(4)Director支持端口映射,可以將客戶端的請求映射到Real Server的另一個端口;(與DR模式的區別)

(5)支持任意操作系統; 如:Windows、Linux、FreeBSD、AIX等

(6)單一的Director是整個集羣的瓶頸(故一般都是2臺或2臺以上的Director機器)

8-LVS負載均衡的調度算法(靜態)

(1)輪循調度(Round Robin)(rr)(最笨的調度算法)

調度器通過“輪循”調度算法將外部請求按順序輪流分配到集羣中的Real Server上,均等每一臺Server,而不管Server上實際的連接和系統負載。

(2)加權輪循(Weighted Round Robin)(wrr)

調度器通過”加權輪循”調度算法根據真實服務器的不同處理能力來調訪問請求。如此保證處理能力強的服務器能處理更多的訪問流量。調度器可以自動問詢真實服務器的負載情況,並動態地調整其權值。

(3)目標地址散列(Destination Hashing)(DH)(有緩存,目標不變,則不變)

它的調度算法根據請求的目標IP地址,作爲散列(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,則將請求發送到該服務器,否則返回空。

(4)源地址散列(Source Hashing)(SH) (有緩存,源不變,則不變)

是根據請求的源IP地址,作爲散列鍵(Hash key)從靜態分配的散列表找出對應的服務器,若該 服務器是可用的且未超載,將請求發送到該服務器,否則返回空。

9-LVS負載均衡的調度算法(動態)

(5)最少鏈接(Least Connections)(LC)

調度器通過”最少連接”調度算法動態地將網絡請求調度到已建立的鏈接數最少的服務器上。若集羣系統的真實服務器具有相近的系統性能,採用“最少連接”調度算法可以較好地均衡負載。

公式:LC = 活動連接數*256 + 非活動連接數

例如:

p_w_picpath

(6)加權最少鏈接(Weighted Least Connections)(WLC) 注:目前最優秀的調度算法!

適應:在集羣系統中的服務器性能差異較大的情況下,調度器採用”加權最少鏈接”調算法優化負載均衡性能。具有較高權值的服務器將承受較大比例的活動連接負載。調度器可以自動問詢真實服務器的負載情況,並動態地調整其權值。

例如:在上表加入Real Server1權值 爲3,Real Server2權值爲1時,則

公式:WLC = (活動連接數*256 + 非活動連接數)/權重

(7)最短的期望的延時(Shortest Expected Delay)(SED)

sed只是在WLC上做了些微調而已。只計算活動連接數!

公式:LC = (活動連接數+1)*256 ÷權重

(8)最少隊列調度(Never Queue Scheduling)(NQS)

無需隊列。若Real Server的連接數=0,就直接分配過去,不需要再進行sed運算。只計算活動連接數!

(9)基於局部性的最少連接(Locality-Based Least Connections)(LBLC)

它的調度算法針對目標IP地址的負載均衡,目前主要用於Cache集羣系統。該算法根據請求的目標IP地址找出該目標IP地址最近使用的服務器,若該服務器是可用的且沒有超載,將請求發送到該服務器;若服務器不存在,或者該服務器超載且有服務器處於一半的工作負載,則用“最少連接”的原則選出一個可用的服務器,將請求發送到該服務器。(HD動態算法)

(10)帶複製的基於局部最少鏈接(Locality-Based Leat Connections Witch Replication)(LBLCR)

此調算法也是針對目標IP地址的負載均衡,目前主要用於Cache集羣系統。它與LBLC算法的不同之處是它要維護從一個目標IP地址到一組服務器的映射,而LBLC算法維護從一個目標IP地址到一臺服務器的映射。該算法根據請求的目標IP地址找出該目標IP地址對應的服務器組,按“最小連接”原則從服務器組中選出一臺服務器,若服務器沒有超載,將請求發送到該服務器,若服務器超載,則按“按最少連接”原則從這個集羣中選出一臺服務器,將該服務器加入到服務器組中,將請求發送到該服務器。同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,以降低複製的程度。

二、實戰篇:

1-安裝LVS軟件:(分別在DR1DR2)

LVS軟件包括二部分:

IPVS模塊,LVS已經是Linux標準內核的一部分,直接被編譯在內核中!

IPVS管理工具IPVSadm ,如:IPVSadm-1.26

1)檢查是否安裝了IPVS模塊: :LVS已經是Linux標準內核的一部分,直接被編譯在內核中!

方法1: 查看IPVS模塊是否真的編譯到內核中去了,如下圖所示:

clip_p_w_picpath012

由上可知,有3個項,說明這個功能已經編譯到內核中了!

方法2: 使用modprobe命令查看,如下圖所示:

clip_p_w_picpath014

由上可知,明顯安裝了支持LVS的IPVS模塊!

2)在DR1上安裝IPVS管理軟件

方法1:源碼安裝

clip_p_w_picpath016

[root@DR1 src]# cd ipvsadm-1.26
[root@DR1 ipvsadm-1.26]# make

//make時,出現如下所示:

clip_p_w_picpath018

clip_p_w_picpath020

解決方法:

安裝以下4個包: (rpm –ivh 軟件包名)

(1) popt-1.13-7.el6.x86_64.rpm

(2) libnl-1.1-14.el6.x86_64.rpm

(3) libnl-devel-1.1-14.el6.x86_64.rpm

(4)popt-static-1.13-7.el6.x86_64.rpm

重點:

安裝以上4個包後,安裝成功,如下圖所示:

clip_p_w_picpath022

方法2: yum安裝

yum -y install ipvsadm

//檢查ipvsadm安裝是否成功:

clip_p_w_picpath024

clip_p_w_picpath026

如果顯示了ipvsadm的各種用法,則說明ipvsadm安裝成功了

2-安裝Keepalived (分別在DR1DR2)

clip_p_w_picpath028

[root@DR1 src]# cd keepalived-1.2.9
[root@DR1 keepalived-1.2.9]# ./configure --sysconf=/etc\
> --with-kernel-dir=/usr/src/kernels/2.6.32-358.el6.x86_64/

clip_p_w_picpath030

重點: 確保下面3行是 yes 如下圖所示:

clip_p_w_picpath032

//編譯之

[root@DR1 keepalived-1.2.9]# make

clip_p_w_picpath034

//安裝

clip_p_w_picpath036

//做個軟鏈接

[root@DR1 keepalived-1.2.9]# ln -s /usr/local/sbin/keepalived /sbin/

//檢驗安裝是否成功:

clip_p_w_picpath038

如果顯示了Keepalived的各種用法,則說明Keepalived安裝成功了!

//同理DR2中安裝keepalived,現在檢查安裝是否成功:

clip_p_w_picpath040

clip_p_w_picpath042

3-配置keepalived

(1)DR1上配置keepalived:

最簡單的方法:先在記事本中,手工創建之。複製到/etc/keepalived/keepalived.conf中,保存即可!

//手工創建keepalived.conf文件(vim /etc/keepalived/keepalived.conf)

! Configuration File for keepalived
global_defs {
   notification_email {
     [email protected]   #設置報警郵件地址,可以設置多個,每行1個,
     [email protected]  #需開啓郵件報警及本機的Sendmail服務。
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1  #設置SMTP Server地址;
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
           ########VRRP Instance########
vrrp_instance VI_1 {
    state MASTER    #指定Keepalived的角色,MASTER爲主機服務器,BACKUP爲備用服務器
    interface eth0  #BACKUP爲備用服務器
    virtual_router_id 51
    priority 100    #定義優先級,數字越大,優先級越高,主DR必須大於備用DR。
    advert_int 1
    authentication {
        auth_type PASS  #設置驗證類型,主要有PASS和AH兩種
        auth_pass 1111  #設置驗證密碼
    }
    virtual_ipaddress {
        192.168.1.200  #設置主DR的虛擬IP地址(virtual IP),可多設,但必須每行1個
    }
}
           ########Virtual Server########
virtual_server 192.168.1.200 80 {  #注意IP地址與端口號之間用空格隔開
    delay_loop 6        #設置健康檢查時間,單位是秒
    lb_algo rr          #設置負載調度算法,默認爲rr,即輪詢算法,最優秀是wlc算法
    lb_kind DR          #設置LVS實現LB機制,有NAT、TUNN和DR三個模式可選
    nat_mask 255.255.255.0
    persistence_timeout 50  #會話保持時間,單位爲秒
    protocol TCP        #指定轉發協議類型,有TCP和UDP兩種
    real_server 192.168.1.132 80 {
        weight 1          #配置節點權值,數字越大權值越高
        TCP_CHECK {
            connect_timeout 3     #表示3秒無響應,則超時
            nb_get_retry 3        #表示重試次數
            delay_before_retry 3  #表示重試間隔
        }
    }
    real_server 192.168.1.133 80 {  #配置服務器節點,即Real Server2的public IP
        weight 3            #配置節點權值,數字越大權值越高
        TCP_CHECK {
            connect_timeout 3       #表示3秒無響應,則超時
            nb_get_retry 3          #表示重試次數
            delay_before_retry 3    #表示重試間隔
        }
    }
}

//啓動哈keepalived、設置keepalived服務自動啓動、檢查是否生效,如下圖所示:

clip_p_w_picpath044

(2)DR2上配置keepalived:

先將上面記事本中的keepalived.conf配置文件,僅僅修改2處,如下圖所示:

No.1處:把“stateMASTER”修改爲“stateBACKUP” #即備用服務器;

No.2處:把“priority 100”修改爲“priority 90” #優先級爲90。

修改好後,複製到DR2的/etc/keepalived/keepalived.conf中,保存即可!

//啓動哈keepalived、設置keepalived服務自動啓動、檢查是否生效,如下圖所示:

clip_p_w_picpath046

4-配置Real Server節點:

1)yum –y install httpd

2)啓動httpd服務時,出錯:

clip_p_w_picpath048

//vim /etc/httpd/conf/httpd.conf,依如下操作:

#265 ServerName www.example.com:80 //去掉前面的#號即可!

3)在RealServer1RealServer2上的腳本realserver.sh:

#add for chkconfig
#chkconfig: 2345 70 30  #234都是文本界面,5就是圖形界面X,70啓動順序號,30系統關閉,腳本
#止順序號
#description: RealServer's script  #關於腳本的簡短描述
#processname: realserver.sh       #第一個進程名,後邊設置自動時會用到
#!/bin/bash
VIP=192.168.1.200
source /etc/rc.d/init.d/functions
case "$1" in
start)
       ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
       /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
       echo "RealServer Start OK"
       ;;
stop)
       ifconfig lo:0 down
       route del $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

//爲realserver.sh添加權限

clip_p_w_picpath050

clip_p_w_picpath052

clip_p_w_picpath054

clip_p_w_picpath056

5-啓動keepalived + LVS集羣系統:

clip_p_w_picpath058

clip_p_w_picpath060

6-測試分爲三個部分:

1)高可用性功能測試:

高可用性是通過LVS的兩個DR1和DR2完成的。爲了模擬故障,先將DR1上的Keepalived服務停止或者乾脆關掉節點DR1,然後觀察備用DR2上Keepalived是否獲得虛擬IP地址VIP 192.168.1.200

//DR1查看哈,信息如下圖所示:

clip_p_w_picpath062

由上可知,虛擬IP地址在DR1節點上即VIP 192.168.1.200

//DR2查看哈,信息如下圖所示:

clip_p_w_picpath064

【思考】自己查查看,一定會成功!

方法1:命令檢驗法

使用命令ipvsadm –Lnip addr list/show查看虛擬IP漂移情況來判斷。

//關閉DR1,模擬宕機,如下圖所示:

clip_p_w_picpath066

由上圖可知,DR1確實宕機,而DR2得到了虛擬IP地址(上圖紅框中的192.168.1.200

且訪問依然正常,再次證明了高可用性,如下圖所示:

clip_p_w_picpath068

方法2:查看日誌法

//關閉DR1/停止DR1的keepalived服務,模擬宕機,在DR2中查看日誌,如下圖日誌所示:

clip_p_w_picpath070

//再查看DR2是否立刻檢測到DR1出現故障,確實非常快就檢測到DR1的故障,並馬上接管主機的虛擬IP地址(192.168.1.200),注意觀察上圖和下圖!

clip_p_w_picpath072

2)負載均衡測試:

爲了便於測試,我們在Real Server1和Real Server2分別配置www服務的網頁且內容也好識別,如下圖所示:

方法1:客戶端瀏覽器中測試

clip_p_w_picpath074

由上可知,我們在VMWare中的XP操作系統和物理機器win 7的瀏覽器中分別輸入http://192.168.1.200且不斷地刷新之都可訪問!

方法2:用壓力測試法

[root@CentOS6 ~]# ab –c 100 –n 10000 http://192.168.1.200/index.html

3)故障切換測試

故障切換是測試在某個節點出現故障後,keepalived監控模塊能否及時發現,然後屏蔽故障節點,同時將服務轉移到正常節點上執行之。

停掉節點Real Server2服務,模擬該節點出現故障,然後查查看主、備機器日誌信息:

方法1:查看主、備機器日誌信息

//先停掉節點Real Server2的httpd服務,如下圖所示:

clip_p_w_picpath076

//再查看DR1上的日誌,如下圖所示:

clip_p_w_picpath078

//再查看DR2上的日誌,如下圖所示:

clip_p_w_picpath080

  由上可知,故障切換測試成功!

方法2:客戶端瀏覽器中測試

clip_p_w_picpath082

   不斷刷新網頁一直就顯示如上圖所示:Real Server1內容!可見故障切換成功!

   至此,《構建黃金組合LVS + Keepalived高可用的負載均衡集羣》配置成功!

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