張 奎
(喀什大學(xué) 計算機科學(xué)與技術(shù)學(xué)院, 新疆 喀什 844006)
隨著“互聯(lián)網(wǎng)+”思維的廣泛深入以及5G時代的到來,各種傳統(tǒng)行業(yè)借助互聯(lián)網(wǎng)平臺正煥發(fā)著新生,新型網(wǎng)絡(luò)應(yīng)用的不斷涌現(xiàn),導(dǎo)致客戶端數(shù)量增加以及產(chǎn)生的數(shù)據(jù)量爆炸式增長,給網(wǎng)絡(luò)服務(wù)器運維和管理帶來了巨大壓力[1]。尤其是大量移動終端的便捷接入以及語音、視頻、圖像等多媒體數(shù)據(jù)的海量增加,對網(wǎng)絡(luò)的可用資源提出了更高的要求,使網(wǎng)絡(luò)擁塞問題更加突出,進而降低了網(wǎng)絡(luò)服務(wù)質(zhì)量(Quality of Service,QoS)。如何減輕服務(wù)器的負(fù)載壓力,緩解網(wǎng)絡(luò)擁塞進而提供更高的QoS成了迫在眉睫的問題。傳統(tǒng)依靠提高硬件性能的單服務(wù)器策略由于存在單點故障等問題,難以從根本上滿足要求,目前主要通過集群技術(shù)來解決[2]。
集群技術(shù)的核心在于負(fù)載均衡,即采用開源解決方案來搭建服務(wù)器系統(tǒng),調(diào)度器根據(jù)負(fù)載均衡算法,將客戶端的負(fù)載請求均衡到后端某一臺服務(wù)器上去處理,或者并行處理重負(fù)載節(jié)點上的任務(wù)。常見的開源解決方案有Haproxy、Nginx以及LVS等。文獻[3]基于Haproxy+Keepalived結(jié)構(gòu)搭建Web集群系統(tǒng),調(diào)度器動態(tài)監(jiān)測集群服務(wù)器運行狀態(tài),根據(jù)輪詢調(diào)度算法將客戶端請求均衡到后端合適的服務(wù)器上去,有效解決了服務(wù)器單點故障以及運行狀態(tài)難以獲取的問題,但對于內(nèi)外集群系統(tǒng)隔離以及安全性要求較高的場合,集群的可用性難以保證;文獻[4-5]設(shè)計了一種Nginx負(fù)載均衡集群,調(diào)度器收集后臺節(jié)點的狀態(tài)參數(shù),配合IP_Hash算法以及加權(quán)輪詢調(diào)度算法來分配客戶端請求,進而發(fā)揮各個服務(wù)器的性能,但是對于大量客戶請求、眾多后端服務(wù)器以及運行狀態(tài)動態(tài)變化的網(wǎng)絡(luò)來說,該方案難以適應(yīng)集群系統(tǒng)的動態(tài)變化。
本文擬搭建LVS+Keepalived結(jié)構(gòu)[6-7]的Web集群負(fù)載均衡系統(tǒng),采用簡單輪詢調(diào)度算法以及網(wǎng)絡(luò)地址轉(zhuǎn)換負(fù)載均衡(Virtual Server via Network Address Translation,VS/NAT)模式,解決單服務(wù)器策略存在的問題,避免網(wǎng)絡(luò)擁塞,進而提高網(wǎng)絡(luò)QoS。
集群是將若干松散連接的服務(wù)器架構(gòu)成具有更高性能及高可用性的集群服務(wù)器系統(tǒng)[8-10]。LVS集群是基于IP層負(fù)載均衡技術(shù)和內(nèi)容請求技術(shù)實現(xiàn)的負(fù)載均衡集群方案[11-12],調(diào)度器根據(jù)Linux內(nèi)核提供的負(fù)載均衡技術(shù)將負(fù)載請求調(diào)度到合適的服務(wù)器上去,當(dāng)某一節(jié)點出現(xiàn)故障,集群技術(shù)自動屏蔽掉故障節(jié)點,直至故障解除,進而確保了集群系統(tǒng)的可靠運行。LVS集群提供的負(fù)載均衡技術(shù)如下[13]:
(1)基于NAT的負(fù)載均衡技術(shù)(VS/NAT):用戶請求訪問系統(tǒng)時,前端調(diào)度器通過虛擬IP(Virtual IP,VIP)接收報文并執(zhí)行NAT轉(zhuǎn)換,然后將報文轉(zhuǎn)發(fā)到后端服務(wù)器節(jié)點,節(jié)點處理完畢后返回調(diào)度器,調(diào)度器處理報文頭部信息之后以VIP地址作為目的地址返回給請求用戶。這種機制由于將不同IP地址提供的并行網(wǎng)絡(luò)服務(wù)變成一個VIP地址上的虛擬服務(wù),有效利用了網(wǎng)絡(luò)資源,隔離了前后端服務(wù)器的差異性。
(2)基于IP隧道的負(fù)載均衡技術(shù)(VS/TUN):調(diào)度器將收到的IP報文封裝成另一種IP報文格式并轉(zhuǎn)發(fā)到選定的服務(wù)器節(jié)點,允許報文跨越子網(wǎng)或者虛擬局域網(wǎng)(Virtual Local Area Network,VLAN)進行傳遞和轉(zhuǎn)發(fā),調(diào)度器和真實服務(wù)器可以在不同的網(wǎng)絡(luò)上。這種機制主要用于移動主機和跨網(wǎng)段通信。
(3)基于直接路由的負(fù)載均衡技術(shù)(VS/DR):調(diào)度器對收到的報文按照既定的算法轉(zhuǎn)發(fā)到后端服務(wù)器節(jié)點,經(jīng)過處理后的報文直接發(fā)送給用戶主機而不經(jīng)過調(diào)度器。該種機制由于調(diào)度器只負(fù)責(zé)調(diào)度報文,服務(wù)器直接將響應(yīng)返回給客戶,極大地提高了集群系統(tǒng)的吞吐量。
當(dāng)集群系統(tǒng)某一節(jié)點出現(xiàn)故障或者節(jié)點來不及處理海量請求時,如果調(diào)度器未能及時切換或者重負(fù)載請求來不及處理,就會導(dǎo)致網(wǎng)絡(luò)擁塞進而降低網(wǎng)絡(luò)QoS。Keepalived是一款優(yōu)秀的高可用軟件,基于虛擬路由冗余協(xié)議(Virtual Router Redundancy Protocol,VRRP)來解決高可用服務(wù)之間的故障切換以及硬件單點故障問題[3,6-8]。Keepalived軟件通過檢測服務(wù)器節(jié)點的狀態(tài),當(dāng)某一個節(jié)點出現(xiàn)故障后,及時移除故障節(jié)點并將其上的任務(wù)切換到其他節(jié)點;當(dāng)該節(jié)點恢復(fù)正常后,Keepalived將其重新加入到集群系統(tǒng)中。Keepalived軟件運行在OSI/RM 7層體系結(jié)構(gòu)的第3層、第4層及第7層,通常配合Haproxy、Nginx及LVS等開源解決方案。
利用Linux虛擬機搭建如圖1所示的Web集群負(fù)載均衡系統(tǒng),其中LVS-Master、LVS-Slave為主、從調(diào)度器,RS1和RS2為后端Web服務(wù)器池,采用Windows主機來模擬User。系統(tǒng)采用VS-NAT負(fù)載均衡模式轉(zhuǎn)發(fā)數(shù)據(jù)包,集群系統(tǒng)劃分為外網(wǎng)和內(nèi)網(wǎng)兩個部分,其中外網(wǎng)的LVS-Master-eth0、LVS-Slave-eth0、VMnet8采用公網(wǎng)地址,內(nèi)網(wǎng)的LVS-Master-eth1、LVS-Slave-eth1、VMnet1、RS1和RS2采用私有地址;外網(wǎng)VIP為公網(wǎng)地址的網(wǎng)關(guān),內(nèi)網(wǎng)VIP為私有地址的網(wǎng)關(guān),詳細(xì)配置參數(shù)見表1。通過配置實現(xiàn)Web集群系統(tǒng)的高可用性以及高可靠性,通過故障模擬來分析主/從調(diào)度器之間的切換,以及后端服務(wù)器之間的切換。
圖1 LVS+Keepalived結(jié)構(gòu)的Web集群負(fù)載均衡系統(tǒng)
表1 詳細(xì)配置參數(shù)
2.2.1 調(diào)度器負(fù)載均衡配置
調(diào)度器采用ipvsadm-1.24.tar.gz源代碼包安裝和配置LVS軟件,配置過程如圖2所示。LVS-Master和LVS-Slave上LVS軟件的安裝及配置方法一致,LVS軟件安裝完畢,自動運行,檢測后臺服務(wù)器池中的主機運行情況。
圖2 ipvsadm軟件包配置過程
2.2.2 調(diào)度器高可用性配置
調(diào)度器上Keepalived軟件的安裝方法與LVS過程類似,但是ipvsadm-1.24.tar.gz源代碼包的編譯及安裝需要若干依賴包,需要提前安裝,如gcc-*、pcre-*、popt-*、zlib-*、openssl-*。Keepalived軟件的配置流程如下:
(1)調(diào)度器設(shè)置,包括LVS-Master、LVS-Slave角色、標(biāo)識號(router_id)、優(yōu)先級(priority)、內(nèi)外網(wǎng)VIP地址;
(2)調(diào)度算法設(shè)置,采用輪詢調(diào)度算法;
(3)負(fù)載均衡模式設(shè)置,采用NAT負(fù)載均衡模式,配置內(nèi)網(wǎng)Web業(yè)務(wù)端口,配置外網(wǎng)Web業(yè)務(wù)端口。
主要代碼如下:
virtual_server 192.168.10.1 80 { //配置內(nèi)網(wǎng)業(yè)務(wù)端口
lb_algo rr //采用輪詢調(diào)度算法
lb_kind NAT //采用NAT負(fù)載均衡模式
real_server 192.168.10.11 80 {
weight 3
TCP_CHECK {
//TCP鏈接狀態(tài)監(jiān)測
}
}
real_server 192.168.10.12 80 {
weight 3
TCP_CHECK {
//TCP鏈接狀態(tài)監(jiān)測
}
}
}
virtual_server 202.201.100.1 80 {
//外網(wǎng)業(yè)務(wù)端口配置內(nèi)容同內(nèi)網(wǎng)業(yè)務(wù)端口配置
}
主、從調(diào)度器上Keepalived軟件的安裝及配置方法相似,但是需要修改LVS-Slave節(jié)點上的keepalived.conf配置文件,將state值修改為BACKUP,priority值修改為80,其余配置內(nèi)容一致。
2.2.3 RS1和RS2作為后端Web服務(wù)器
為配合Web集群負(fù)載均衡系統(tǒng)的高可用性以及高可靠性業(yè)務(wù)需要,RS1和RS2作為后端Web服務(wù)器需要使用Apache軟件創(chuàng)建Web網(wǎng)站,在/var/www/html目錄下采用HTML語言編輯不同內(nèi)容的Web頁面,即index.html,為用戶提供Web服務(wù)。
User在瀏覽器中輸入外網(wǎng)VIP地址,查看返回后的頁面,刷新幾次或者再一次建立連接后,查看返回后的頁面。初次訪問Web集群系統(tǒng)的頁面如圖3所示,刷新幾次后返回的Web頁面如圖4所示。訪問同一個VIP地址返回不同的頁面內(nèi)容,說明前端調(diào)度器已經(jīng)根據(jù)后端服務(wù)器的運行狀況對用戶請求進行了分配,實現(xiàn)了負(fù)載均衡。
圖3 初次訪問Web集群系統(tǒng)
圖4 刷新幾次后訪問Web集群系統(tǒng)
正常情況下,LVS-Master由于priority值高于LVS-Slave發(fā)揮主調(diào)度器角色,優(yōu)先處理所有用戶的連接請求,而LVS-Slave則處于從屬地位。當(dāng)把LVS-Master的LVS和Keepalived全部關(guān)閉,即模擬LVS-Master故障,這時外網(wǎng)VIP和內(nèi)網(wǎng)VIP將遷移到LVS-Slave上,發(fā)揮主調(diào)度器的角色。把LVS-Master關(guān)閉后,LVS-Master系統(tǒng)運行日志如圖5所示,說明外網(wǎng)VIP和內(nèi)網(wǎng)VIP已經(jīng)從LVS-Master上移除,LVS-Slave開始發(fā)揮主調(diào)度器的角色如圖6所示。
圖5 外網(wǎng)VIP和內(nèi)網(wǎng)VIP從LVS-Master上移除
圖6 外網(wǎng)VIP和內(nèi)網(wǎng)VIP綁定LVS-Salve
正常情況下,RS1和RS2輪流向用戶提供Web服務(wù),用戶訪問Web集群系統(tǒng)后返回不同的頁面內(nèi)容。當(dāng)關(guān)閉RS1的Web服務(wù),即模擬Web服務(wù)器故障,用戶先在瀏覽器中輸入外網(wǎng)VIP,再刷新幾次后,均返回RS2的頁面內(nèi)容;當(dāng)RS1上的Web服務(wù)恢復(fù)正常后,則繼續(xù)承擔(dān)任務(wù),響應(yīng)用戶請求;當(dāng)RS1和RS2都出現(xiàn)Web服務(wù)器故障,則整個Web集群系統(tǒng)就不再提供Web服務(wù)。由于返回的頁面內(nèi)容如圖3、圖4所示,測試過程及結(jié)果類似,故不再贅述。
在LVS集群負(fù)載均衡的基礎(chǔ)上,設(shè)計并實現(xiàn)了一種基于LVS+Keepalived結(jié)構(gòu)的Web集群負(fù)載均衡系統(tǒng)。系統(tǒng)在運行過程中,前端調(diào)度器通過監(jiān)測服務(wù)器運行狀態(tài),配合Keepalived高可用軟件及時發(fā)現(xiàn)并切換故障節(jié)點上的任務(wù),避免了單服務(wù)器策略存在的單點故障問題,從而提高了Web集群系統(tǒng)的高可靠性以及高可用性。仿真結(jié)果表明,該種結(jié)構(gòu)的集群系統(tǒng)相比單服務(wù)器策略具有更好的響應(yīng)時間和高可用性,同時后端服務(wù)器池可以根據(jù)系統(tǒng)需要動態(tài)增減服務(wù)器而不會影響系統(tǒng)的整體運行,系統(tǒng)的可擴展性較好。該種結(jié)構(gòu)的集群系統(tǒng)可以應(yīng)用到FTP、DNS、E-mail等其他服務(wù)中,系統(tǒng)搭建方便,組網(wǎng)靈活,可擴展性較好,對于其他同類需求的集群系統(tǒng)構(gòu)建具有一定的參考意義。