孔祥真+張丁+李忠遠(yuǎn)
摘 要:調(diào)研了目前市場占有率比較高的Unix和Linux服務(wù)器應(yīng)用現(xiàn)狀,重點研究了Linux集群技術(shù),并在校園網(wǎng)絡(luò)平臺的搭建中使用了Nginx負(fù)載均衡技術(shù)。分析Linux小型機集群方案的可行性,以及Nginx反向代理技術(shù)對于解決網(wǎng)絡(luò)服務(wù)器高負(fù)荷、高流量、不穩(wěn)定等問題的優(yōu)勢,并部署了Nginx服務(wù)器和Tomcat服務(wù)器集群,為學(xué)校提供了一個高可用、高并發(fā)、高穩(wěn)定且廉價的服務(wù)器解決方案。
關(guān)鍵詞:Linux;負(fù)載均衡;網(wǎng)絡(luò)服務(wù)器;集群;Ngnix
DOIDOI:10.11907/rjdk.162633
中圖分類號:TP393
文獻(xiàn)標(biāo)識碼:A文章編號:1672-7800(2016)012-0144-03
0 引言
隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,對于服務(wù)器的需求量也隨之劇增。除了Unix系統(tǒng),作為類Unix系統(tǒng)的Linux操作系統(tǒng)近年來也倍受青睞。最近,著名雜志《網(wǎng)絡(luò)世界》進(jìn)行了一次調(diào)查,其經(jīng)由多種渠道搜集了來自各行各業(yè),也包括政府機構(gòu)IT部門的Linux操作系統(tǒng)在產(chǎn)業(yè)中的應(yīng)用情況,以此預(yù)知Linux在未來應(yīng)用領(lǐng)域的發(fā)展趨勢。調(diào)查結(jié)果表明,Linux有著非常好的應(yīng)用前景,近64.5%以上的負(fù)責(zé)人計劃將Linux應(yīng)用于Web服務(wù)器。Unix大型機固然有較為明顯的性能優(yōu)勢,然而近期市場占有率有下降的趨勢。
以目前Web服務(wù)器應(yīng)用較多的Nginx技術(shù)為支持,構(gòu)建Linux小型機集群替代Unix大型機,以盡可能地降低服務(wù)器成本。本文首先探討服務(wù)器集群技術(shù),分析負(fù)載均衡集群的算法策略與工作原理,然后在校園服務(wù)器網(wǎng)絡(luò)平臺的搭建中,運用該技術(shù)部署Tomcat服務(wù)器集群和Nginx服務(wù)器,并采用Nginx反向代理的關(guān)鍵字命名規(guī)則進(jìn)行整合,搭建一個具有較強穩(wěn)定性與可用性的校園網(wǎng)絡(luò)服務(wù)器。
1 Nginx及其相關(guān)技術(shù)
1.1 Nginx
Nginx可作為輕量級的Web服務(wù)器、反向代理服務(wù)器及電子郵件代理服務(wù)器使用,由俄羅斯的程序設(shè)計師Igor Sysoev開發(fā)。其占有內(nèi)存少、并發(fā)性能好,并發(fā)能力優(yōu)于同類網(wǎng)頁服務(wù)器。目前,我國使用Nginx的網(wǎng)站用戶包括百度、新浪、京東、網(wǎng)易、騰訊、淘寶等知名網(wǎng)站。Nginx作為一款較為實用的Web服務(wù)器,與其它Web服務(wù)器相比具有以下優(yōu)點[1]:①支持網(wǎng)絡(luò)請求高并發(fā)。據(jù)官方統(tǒng)計,其每秒能處理5萬靜態(tài)網(wǎng)頁請求;②反向代理性能優(yōu)越,通常被用于負(fù)載均衡;③CPU與內(nèi)存占用率低。官方統(tǒng)計數(shù)據(jù)顯示,其占用率僅為Apache的1/5~1/10;④對于php可使用cgi與fastcgi方式。
1.2 正向代理與反向代理
(1)正向代理(Forward Proxy)。通常所說的代理技術(shù)指正向代理技術(shù)。正向代理的定義如下:一個位于客戶端的用戶A、服務(wù)器B、位于A和B之間的代理服務(wù)器Z,用戶A要從服務(wù)器B取得用戶請求的內(nèi)容,可以通過代理服務(wù)器Z發(fā)送請求并指定目標(biāo)是服務(wù)器B,由代理服務(wù)器Z向目標(biāo)服務(wù)器B轉(zhuǎn)交請求,獲得的內(nèi)容返回客戶端A。也即是說,正向代理就是代理服務(wù)器替代客戶端用戶A來訪問服務(wù)器B。
(2)反向代理(Reverse Proxy)。在反向代理時,對于客戶端而言,代理服務(wù)器如同原始資源服務(wù)器,客戶端用戶不需要進(jìn)行任何設(shè)置。客戶端向反向代理的命名空間發(fā)送連接請求,然后服務(wù)器Z判斷向何處轉(zhuǎn)交連接請求,并將獲得的內(nèi)容返回給客戶端的用戶A。用戶A會感覺其請求的是原始資源服務(wù)器,而不是反向代理服務(wù)器Z。
二者區(qū)別為:①正向代理能夠讓帶有防火墻的局域網(wǎng)用戶訪問外部互聯(lián)網(wǎng);②反向代理將防火墻后面的服務(wù)器提供給用戶訪問,還能為后端的多臺服務(wù)器提供負(fù)載平衡,或者為后端多臺性能不均的服務(wù)器提供權(quán)重服務(wù);③正向代理使客戶端通過其可以訪問任意網(wǎng)站且隱藏本身,因此必須采取相應(yīng)的安全措施,以確保僅為授權(quán)有保證的互聯(lián)網(wǎng)客戶端提供網(wǎng)絡(luò)服務(wù)。
1.3 負(fù)載均衡技術(shù)
負(fù)載均衡(Load Balance)是建立在網(wǎng)絡(luò)結(jié)構(gòu)上的一種廉價、有效方法,它可以擴展網(wǎng)絡(luò)設(shè)備帶寬,增加吞吐量,增強網(wǎng)絡(luò)并發(fā)處理數(shù)據(jù)的能力,提高網(wǎng)絡(luò)的可用性和靈活性。Nginx支持3種負(fù)載均衡策略:①輪詢:請求依次輪詢每個服務(wù)器;②最少鏈接:請求發(fā)送給持有最少活動鏈接的服務(wù)器;③IP哈希:請求通過哈希函數(shù)決定發(fā)送給哪個服務(wù)器。
1.4 集群
集群是由一組獨立的計算機系統(tǒng)構(gòu)成的松耦合多處理器系統(tǒng)[2],通過網(wǎng)絡(luò)實現(xiàn)進(jìn)程間的通信。目前,實現(xiàn)分布式計算機集群的技術(shù)有負(fù)載均衡集群、高可用集群和科學(xué)計算集群。本文重點介紹負(fù)載均衡集群。負(fù)載均衡集群由兩臺或兩臺以上服務(wù)器組成,分前端負(fù)載調(diào)度和后端服務(wù)兩部分??蛻舳擞脩舻倪B接請求由前端依據(jù)負(fù)載均衡策略分配給后端服務(wù)器,后端服務(wù)器應(yīng)答請求,并將請求內(nèi)容返回用戶。因而可知,后端服務(wù)器是客戶端真正請求內(nèi)容的服務(wù)器。與高可用服務(wù)集群不同,在負(fù)載均衡集群中,所有后端服務(wù)器都處于工作狀態(tài),都有可能對前端服務(wù)器的請求進(jìn)行應(yīng)答。
Nginx是利用反向代理服務(wù)器來實現(xiàn)負(fù)載均衡。如果學(xué)校采用Nginx作為Web服務(wù)器,可以阻擋外來黑客攻擊,保證數(shù)據(jù)的安全性與網(wǎng)頁內(nèi)容的穩(wěn)定性,還可有效解決網(wǎng)頁打開速度慢、網(wǎng)頁內(nèi)容請求不到等問題,使學(xué)生能夠更加方便快捷地訪問學(xué)校網(wǎng)頁。另外,使用負(fù)載均衡策略還可有效解決服務(wù)器資源浪費等問題。
2 Nginx代理服務(wù)器搭建
在Linux的Centos 7系統(tǒng)中搭建Nginx Web應(yīng)用代理服務(wù)器[3],服務(wù)器集群架構(gòu)分為前端和后端服務(wù)器[4-6]。前端Nginx服務(wù)器的IP為192.168.1.2,后端為Tomcat服務(wù)器,IP分別為192.168.1.4、192.168.1.5、192.168.1.6。其工作過程為:客戶端瀏覽器發(fā)送請求,前端Nginx負(fù)載均衡服務(wù)器得到請求后,依據(jù)相應(yīng)的負(fù)載均衡調(diào)度算法,將請求發(fā)送給后端Tomcat服務(wù)器。Tomcat服務(wù)器收到請求后進(jìn)行響應(yīng),并將請求內(nèi)容轉(zhuǎn)發(fā)給Nginx服務(wù)器,最后Nginx服務(wù)器將響應(yīng)內(nèi)容發(fā)送給客戶端用戶瀏覽器,其拓?fù)鋱D如圖1所示。具體配置為:
系統(tǒng)環(huán)境: RHEL7 Linux
Web服務(wù)器: 192.168.1.2 Nginx
192.168.1.4 Tomcat1
192.168.1.5Tomcat2
192.168.1.6 Tomcat3
2.1 Nginx Web服務(wù)器安裝與使用
(1)安裝Nginx所需要的依賴包:yum -y install gcc gcc-c++ make libtool* zlib* openssl openssl-devel pcre pcre-devel。
Nginx需要以下3個依賴包:zlib-1.2.8.tar.gz、pcre-8.21.tar.gz和openssl-1.0.1.tar.gz。
(2)啟動Nginx。
[root@xixy ~]# /usr/local/nginx/sbin/nginx
然后啟動nginx,/usr/local/nginx/sbin/nginx 回車即可。查看進(jìn)程是否已啟動:
[root@xixy~]# ps -ef |grep nginx
在瀏覽器輸入192.168.1.2后,出現(xiàn)下面的圖片文字,則說明Nginx服務(wù)器安裝成功。
(3)重啟或關(guān)閉Nginx進(jìn)程:
[root@xixy~]# /usr/local/nginx/sbin/nginx?-s reload
[root@xixy~]# /usr/local/nginx/sbin/nginx -s stop
(4)將Nginx添加到開機啟動:
[root@xixy~]# echo"/usr/local/nginx/sbin/nginx">>/etc/rc.d/rc.local
2.2 Tomcat Web服務(wù)器安裝與使用
Tomcat是網(wǎng)頁應(yīng)用服務(wù)器,主要功能是用于解析動態(tài)頁面,常與Apache服務(wù)器和Nginx服務(wù)器配合搭建整個Http服務(wù)器端。Tomcat目前的最新版本為9.0。Tomcat主要用來解析JSP語言,所以安裝Tomcat之前需要安裝JDK (Java Development Kit),JDK是Java 語言的軟件開發(fā)工具包。
IP:192.168.1.4 Tomcat Web 服務(wù)器的安裝過程如下:
(1)安裝JDK。
(2)安裝Tomcat1。首先,在官網(wǎng)下載Tomcat,這里下載的是apache-tomcat-7.0.27.tar.gz,下載完后解壓:
[root@xixy2 ~]# tar xf apache-tomcat-7.0.27.tar.gz
[root@xixy2 ~]# mv apache-tomcat-7.0.27 /usr/local/tomcat
然后,啟動Tomcat,命令為:
[root@xixy2 ~]# /usr/local/tomcat/bin/startup.sh
通過命令ps-ef |grep tomcat 查看進(jìn)程及端口是否存在,在瀏覽器中輸入http://192.168.1.4:8080,還可以通過頁面訪問Tomcat默認(rèn)測試頁面。
最后,關(guān)閉Tomcat,命令為:
[root@xixy2 ~]# /usr/local/tomcat/bin/shutdown.sh
(3)安裝IP為192.168.1.4 的Tomcat Web服務(wù)器。
(4)安裝IP為192.168.1.6 的Tomcat Web 服務(wù)器。
2.3 Nginx Web與Tomcat Web服務(wù)器配置和整合
2.3.1 Nginx服務(wù)器配置
(1)編輯nginx.conf配置文件:
[root@xixy ~]# vim /usr/local/nginx/conf/nginx.conf
(2)指定負(fù)載均衡方式:
upstream tomcat {
server 192.168.1.4:8080;
server 192.168.1.5:8080;
server 192.168.1.6 :8080;
}
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm index.php;
proxy_pass http://tomcat;
}
location ~ .*\.(php|jsp|cgi)?$ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://tomcat;}}
}
2.3.2 Tomcat Web服務(wù)器配置
(1)IP:192.168.1.4 Tomcat Web服務(wù)器。
創(chuàng)建自己的網(wǎng)頁發(fā)布目錄,執(zhí)行以下命令:
[root@xixy2 ~]# mkdir -p /usr/webapps/www
編輯vim /usr/local/tomcat/conf/server.xml,在最后前一行加以下內(nèi)容:
Tomcat發(fā)布目錄內(nèi)容:
[root@xixy2]# vim index.jsp
<%@ page contentType="text/html;charset=utf-8"%>
(2)IP:192.168.1.5 Tomcat Web 服務(wù)器。
創(chuàng)建自己的網(wǎng)頁發(fā)布目錄,執(zhí)行以下命令:
[root@xixy3 ~]# mkdir -p /usr/webapps/www
編輯vim /usr/local/tomcat/conf/server.xml,在最后前一行加以下內(nèi)容:
Tomcat發(fā)布目錄內(nèi)容:
[root@xixy3 www]# vim index.jsp
<%@ page contentType="text/html;charset=utf-8"%>
(3)IP:192.168.1.6 Tomcat Web 服務(wù)器。
創(chuàng)建自己的網(wǎng)頁發(fā)布目錄,執(zhí)行以下命令:
[root@xixy4 ~]# mkdir -p /usr/webapps/www
編輯vim /usr/local/tomcat/conf/server.xml,在最后前一行加以下內(nèi)容:
Tomcat發(fā)布目錄內(nèi)容:
[root@xixy4 www]# vim index.jsp
<%@ page contentType="text/html;charset=utf-8"%>
2.4 性能測試
(1)在進(jìn)行性能測試時,記錄了運行時間。本記錄中選取響應(yīng)時間最長和最短的客戶端訪問請求進(jìn)行記錄。
(2)響應(yīng)時間指客戶端發(fā)出請求到服務(wù)器,服務(wù)器接受請求,并處理該請求的響應(yīng)時間,時間單位為毫秒。
在并發(fā)量為100個用戶以內(nèi)時,系統(tǒng)運行正常,即各頁面訪問操作正常。隨著并發(fā)訪問用戶達(dá)到120時,服務(wù)器壓力變大,大約有一半以上的事務(wù)響應(yīng)時間超過腳本的等待時間,導(dǎo)致訪問失敗,頁面出現(xiàn)錯誤。
對上述涉及的問題進(jìn)行優(yōu)化,可從以下幾個方面考慮:
①調(diào)整中間件參數(shù)設(shè)置,以達(dá)到最優(yōu)狀態(tài)。目前該項工作正在進(jìn)行調(diào)整及測試優(yōu)化;
②在有條件的情況下,建議將數(shù)據(jù)庫服務(wù)器與Web服務(wù)器分離[7-8],使其分工更加明確,保證運行效率,同時安全性更高;
③面對高并發(fā)的狀況,即便增加硬件,系統(tǒng)仍會存在訪問瓶頸。為了更好地適應(yīng)訪問需求,在條件允許的情況下,可對現(xiàn)有系統(tǒng)的軟件方面進(jìn)行架構(gòu)改造,比如引進(jìn)高性能、分布式的緩存系統(tǒng)等。
3 結(jié)語
本文基于Nginx負(fù)載均衡各項策略的工作原理和集群相關(guān)技術(shù),設(shè)計了一個負(fù)載均衡的服務(wù)器集群,搭建了校園網(wǎng)絡(luò)服務(wù)器。詳述了網(wǎng)絡(luò)服務(wù)器的安裝和配置步驟,實現(xiàn)了網(wǎng)絡(luò)請求內(nèi)容的反向代理,從而提高了學(xué)校網(wǎng)站的訪問速度、穩(wěn)定性和安全性。當(dāng)然,對于一個真正的大型網(wǎng)絡(luò)服務(wù)器,還有許多可改進(jìn)的地方,比如服務(wù)器高可用、動態(tài)頁面和靜態(tài)頁面分離、服務(wù)器緩存、URL重寫等方面。后續(xù)還會在此基礎(chǔ)上針對平臺的相關(guān)問題進(jìn)行改進(jìn),以減少服務(wù)器使用過程中的諸多困擾。
參考文獻(xiàn):
[1] [美]KARLKOPPER.Linux企業(yè)集群:用商用硬件和免費軟件構(gòu)件高可用集群[M].北京:水利水電出版社,2007.
[2] 高俊峰.循序漸進(jìn)——Linux基礎(chǔ)知識、服務(wù)器搭建、系統(tǒng)管理、性能調(diào)優(yōu)、集群應(yīng)用[M].北京:人民郵電出版社,2009.
[3] 楊永健.反向代理軟件SQUID在高校圖書館中的應(yīng)用[J].四川圖書館學(xué)報, 2007(3):59-62.
[4] 李智慧.大型網(wǎng)站技術(shù)架構(gòu):核心原理與案例分析[M].北京:電子工業(yè)出版社,2013.
[5] 陳小全,張繼紅.Linux服務(wù)器架設(shè)、性能調(diào)優(yōu)、集群管理教程——實訓(xùn)與項目案例[M].北京:北京郵電大學(xué)出版社,2011.
[6] [法]CLEMENT NEDELCU.學(xué)習(xí)Nginx HTTP Server(中文版)[M].北京:清華大學(xué)出版社,2012.
[7] 伍云輝.Linux服務(wù)器配置與管理指南[M].北京:清華大學(xué)出版社,2010:1-5.
[8] 張宴.實戰(zhàn) Nginx:取代Apache的高性能Web服務(wù)器[M].北京:電子工業(yè)出版社,2010:3-10.
[9] 木太里甫艾山.Linux環(huán)境下Qt庫多語言界面實現(xiàn)[J].軟件導(dǎo)刊,2016,15(5):21-23.
(責(zé)任編輯:黃 ?。?