郭煒杰 孫顯水 蔣國明 浙江理工大學(xué)信息化辦公室
VMWARE已經(jīng)廣泛使用,通常的做法是在VMWARE虛擬化平臺上創(chuàng)建虛擬機(jī)來用于web服務(wù)器,在但在日常運(yùn)維中發(fā)現(xiàn)單臺web服務(wù)器無法承受瞬間的高并發(fā)訪問,這就需要增加web服務(wù)器的數(shù)量,并采用負(fù)載均衡技術(shù)使多個(gè)web服務(wù)器分別處理并發(fā)訪問請求,減少單臺web服務(wù)器的運(yùn)行壓力。從服務(wù)器安全和互聯(lián)網(wǎng)IPv4地址資源有限的角度考慮,web服務(wù)器一般不直接暴露在互聯(lián)網(wǎng)上,因此需要借助反向代理技術(shù)來隱藏web服務(wù)器的真實(shí)IP,對其進(jìn)行邏輯上的隔離,不僅要防御來自外網(wǎng)的攻擊,也要防御來自內(nèi)網(wǎng)的攻擊。
Nginx是由俄羅斯的程序設(shè)計(jì)師伊戈?duì)?賽索耶夫(Igor Sysoev)開發(fā)的一款自由的、開源的、高性能的HTTP服務(wù)器和反向代理服務(wù)器;同時(shí)也是一個(gè)IMAP、POP3、SMTP代理服務(wù)器。Nginx是一個(gè)跨平臺服務(wù)器,可以運(yùn)行在 Linux、Windows、FreeBSD、Solaris、AIX、MacOS等操作系統(tǒng)上。Nginx使用基于事件驅(qū)動(dòng)架構(gòu),使得其可以支持?jǐn)?shù)以百萬級別的TCP連接,其特點(diǎn)是占用內(nèi)存少、并發(fā)能力強(qiáng)、穩(wěn)定性好,事實(shí)上Nginx的并發(fā)能力在同類型的web服務(wù)器中表現(xiàn)較好,國內(nèi)的百度、京東、新浪、網(wǎng)易、騰訊、淘寶等網(wǎng)站都使用了Nginx。
Nginx的upstream模塊使Nginx跨越單機(jī)的限制,完成網(wǎng)絡(luò)數(shù)據(jù)的接收、處理和轉(zhuǎn)發(fā)。Nginx支持的負(fù)載均衡方法如下:
①輪詢(默認(rèn)):接收到的請求按照順序逐一分配到不同的后端服務(wù)器,即使某一臺后端服務(wù)器宕機(jī),Nginx會(huì)自動(dòng)將該服務(wù)器剔除出隊(duì)列,請求受理情況不會(huì)受到任何影響。
②weight:給不同的后端服務(wù)器設(shè)置一個(gè)權(quán)重值(weight),用于調(diào)整不同的服務(wù)器上請求的分配率。權(quán)重?cái)?shù)據(jù)越大,被分配到請求的幾率越大。
③ip_hash:每個(gè)請求按照發(fā)起客戶端的ip的hash結(jié)果進(jìn)行匹配,一個(gè)固定ip地址的客戶端總會(huì)訪問到同一個(gè)后端服務(wù)器,這也在一定程度上解決了集群部署環(huán)境下Session共享的問題。
④fair:智能調(diào)整調(diào)度算法,動(dòng)態(tài)的根據(jù)后端服務(wù)器的請求處理到響應(yīng)的時(shí)間進(jìn)行均衡分配。響應(yīng)時(shí)間短處理效率高的服務(wù)器分配到請求的概率高,響應(yīng)時(shí)間長處理效率低的服務(wù)器分配到的請求少,它是結(jié)合了前兩者的優(yōu)點(diǎn)的一種調(diào)度算法。
⑤url_hash:按照訪問的URL的hash結(jié)果分配請求,每個(gè)請求的URL會(huì)指向后端固定的某個(gè)服務(wù)器,可以在Nginx作為靜態(tài)服務(wù)器的情況下提高緩存效率。
1.VMWARE 虛擬化平臺
采用兩臺DELL R910物理服務(wù)器作為VMWARE虛擬化平臺的宿主機(jī),部署 VMWARE ESXi Server 5.5。vCenter上配置vMotion功能。物理服務(wù)器的第1個(gè)網(wǎng)口接管理網(wǎng)段,配置虛擬交換機(jī)vSwitch0,端口組為“管理口”;第2和第3個(gè)網(wǎng)口接服務(wù)器區(qū)核心交換機(jī),配置虛擬交換機(jī)vSwitch1,端口組為“內(nèi)網(wǎng)業(yè)務(wù)口”;第4和第5個(gè)網(wǎng)口接互聯(lián)網(wǎng)接入交換機(jī),配置虛擬交換機(jī)vSwitch2,端口組為“外網(wǎng)業(yè)務(wù)口”。物理服務(wù)器的光纖HBA卡接FC-SAN雙活存儲設(shè)備,光纖交換機(jī)為雙機(jī)雙引擎。架構(gòu)拓?fù)淙缦拢?/p>

圖1 架構(gòu)拓?fù)鋱D
2.創(chuàng)建虛擬機(jī)
在物理服務(wù)器A上創(chuàng)建一臺虛擬機(jī)nginx-vm1,在物理服務(wù)器B上創(chuàng)建一臺虛擬機(jī)nginx-vm2,配置均為CPU 4核,內(nèi)存4GB,操作系統(tǒng)使用CentOS7.6。雙網(wǎng)卡,一塊網(wǎng)卡配互聯(lián)網(wǎng)的公網(wǎng)IP,另一塊網(wǎng)卡配內(nèi)網(wǎng)IP,內(nèi)網(wǎng)用戶IP、nginx服務(wù)器IP、web服務(wù)器IP屬于不同的子網(wǎng),在校園網(wǎng)核心交換機(jī)上做ACL,內(nèi)網(wǎng)用戶無法直接訪問到web服務(wù)器。虛擬磁盤創(chuàng)建在共享存儲中,當(dāng)某一臺物理機(jī)故障時(shí),上面的虛擬機(jī)能夠自動(dòng)遷移到另一臺物理機(jī)上。
3.DNS 配置
學(xué)校有電信、聯(lián)通、移動(dòng)、教科網(wǎng)4條互聯(lián)網(wǎng)出口鏈路,DNS的外網(wǎng)視圖上把網(wǎng)站域名xxx.zstu.edu.cn解析到虛擬機(jī)nginxvm1和nginx-vm2的公網(wǎng)IP上,內(nèi)網(wǎng)視圖上把網(wǎng)站域名xxx.zstu.edu.cn解析到虛擬機(jī)nginx-vm1和nginx-vm2的內(nèi)網(wǎng)IP上。用戶訪問該網(wǎng)站的請求都通過Nginx轉(zhuǎn)發(fā)到后端真正的web服務(wù)器上,用戶看不到網(wǎng)站web服務(wù)器的真實(shí)IP。
4.安裝和配置Nginx
在虛擬機(jī)上安裝Nginx[3-4],編輯nginx.conf配置文件。
檢查配置文件:[root@nginx ~]# /usr/local/nginx/sbin/nginx -t
啟 動(dòng) Nginx:[root@nginx ~]# /usr/local/nginx/sbin/nginx
查 看 Nginx日 志:[root@nginx ~]# tail -f /usr/local/nginx/logs/access.log | grep xxx.zstu.edu.cn,查看日志可以清楚的看到每條請求轉(zhuǎn)發(fā)到了后端的哪一臺web服務(wù)器上。
本文對Nginx反向代理和負(fù)載均衡技術(shù)進(jìn)行了研究與實(shí)踐,在無需額外投入資源的情況下,不用改變原有web網(wǎng)站的部署方式,利用現(xiàn)有的網(wǎng)絡(luò)、服務(wù)器和存儲資源,有效解決了web服務(wù)器遇到突然集中的大量訪問請求時(shí)系統(tǒng)頁面響應(yīng)緩慢,甚至宕機(jī)的問題,緩解了單臺web服務(wù)器的響應(yīng)壓力,同時(shí)在DNS、網(wǎng)絡(luò)、服務(wù)器、存儲等層面均采用了冗余架構(gòu)。在今年疫情防控期間,該架構(gòu)應(yīng)用于17000余名在校本科生每日健康打卡,從服務(wù)器運(yùn)行監(jiān)控上看,很好的起到了負(fù)載均衡的作用。

圖2 Nginx服務(wù)器收到的網(wǎng)絡(luò)數(shù)據(jù)包

圖3 其中一臺后端服務(wù)器收到的網(wǎng)絡(luò)數(shù)據(jù)包