蔣南
摘 要 論文介紹了如何在CentOS6環(huán)境下,利用開(kāi)源軟件Nginx和Keepalived構(gòu)建圖書(shū)館站群架構(gòu),結(jié)合南京師范大學(xué)圖書(shū)館“2016主頁(yè)平臺(tái)改版”的建設(shè)實(shí)踐,提出構(gòu)建高校圖書(shū)館站群架構(gòu)的新思路。
關(guān)鍵詞 Nginx 圖書(shū)館 Keepalived 反向代理 系統(tǒng)架構(gòu)
分類號(hào) G258.6
DOI 10.16810/j.cnki.1672-514X.2018.08.016
隨著互聯(lián)網(wǎng)的快速發(fā)展和圖書(shū)館信息化水平的不斷提高,圖書(shū)館網(wǎng)站建設(shè)的規(guī)模日益擴(kuò)大,內(nèi)容不斷豐富,有效地?cái)U(kuò)大了圖書(shū)館的影響,促進(jìn)了圖書(shū)館和讀者之間的信息交流。南京師范大學(xué)圖書(shū)館在2000年開(kāi)始建設(shè)網(wǎng)站,到目前為止各類網(wǎng)站大約有30多個(gè),服務(wù)器也達(dá)到了50多臺(tái)。但是,由于建設(shè)時(shí)間跨度大、缺乏統(tǒng)一的管理規(guī)范,部分網(wǎng)站會(huì)出現(xiàn)訪問(wèn)無(wú)響應(yīng)和黑客攻擊等問(wèn)題。為了解決這些問(wèn)題,圖書(shū)館2016年利用Nginx的反向代理功能,配以Keepalived實(shí)現(xiàn)雙機(jī)熱備,整合圖書(shū)館各類資源和服務(wù)網(wǎng)站,重新構(gòu)建了圖書(shū)館站群系統(tǒng),達(dá)到了圖書(shū)館網(wǎng)站統(tǒng)一管理、統(tǒng)一維護(hù)和統(tǒng)一安全防范的要求,最大程度提高了圖書(shū)館網(wǎng)站的可用性、伸縮性和可擴(kuò)展性[1]。
1 Nginx簡(jiǎn)介
Nginx(“Engine X”)是俄羅斯Igor Sysoev(伊戈?duì)枴と饕颍┚帉?xiě)的一款高性能的HTTP和反向代理服務(wù)器。在高并發(fā)的情況下,Nginx是Apache服務(wù)器不錯(cuò)的替代品,它支持高達(dá)50 000個(gè)并發(fā)連接數(shù)的響應(yīng),而內(nèi)存、CPU等系統(tǒng)資源消耗卻非常低,運(yùn)行非常穩(wěn)定。Nginx已經(jīng)在俄羅斯最大的門戶網(wǎng)站Rambler Media上運(yùn)行多年,且俄羅斯超過(guò)20%的虛擬主機(jī)平臺(tái)采用Nginx作為反向代理服務(wù)器。在國(guó)內(nèi),已經(jīng)有新浪、豆瓣網(wǎng)和迅雷等多家網(wǎng)站使用Nginx作為Web服務(wù)器或反向代理服務(wù)器[2]。
與購(gòu)買硬件負(fù)載均衡設(shè)備相比,采用2-clause BSD-like協(xié)議的Nginx具有更多優(yōu)勢(shì)。一是支持高并發(fā),內(nèi)存消耗少,成本低廉;二是配置文件非常簡(jiǎn)單,即使是非專業(yè)的系統(tǒng)管理員也能夠看懂;三是能夠根據(jù)域名、URL的不同,將HTTP請(qǐng)求分到不同的后端服務(wù)器群組;四是系統(tǒng)性能穩(wěn)定,節(jié)省帶寬,內(nèi)置健康檢查功能;五是支持熱部署,啟動(dòng)容易,支持全天候運(yùn)行,并且支持在不中斷服務(wù)的情況下升級(jí)軟件。
根據(jù)W3Techs公布的數(shù)據(jù),Nginx當(dāng)前已經(jīng)在Web服務(wù)器領(lǐng)域有了一定的地位,如圖1所示,在排名前1000、10 000、10萬(wàn)和100萬(wàn)的網(wǎng)站中已經(jīng)全面超過(guò)Apache。雖然Apache以49.2%的總量暫居首位,但是Nginx上升勢(shì)頭迅猛,可以預(yù)料不久的將來(lái)Nginx將成為全球最流行的服務(wù)器軟件。
圖1 全球網(wǎng)站服務(wù)器軟件排行[3]
2 網(wǎng)站傳統(tǒng)架構(gòu)模式及存在的問(wèn)題
隨著圖書(shū)館資源的不斷豐富,圖書(shū)館網(wǎng)站的規(guī)模也在日益擴(kuò)大,圖書(shū)館系統(tǒng)管理員常用簡(jiǎn)單的LAMP架構(gòu)來(lái)部署圖書(shū)館的應(yīng)用和服務(wù)。該架構(gòu)的特點(diǎn)是結(jié)構(gòu)簡(jiǎn)單、容易實(shí)施以及和其他系統(tǒng)的關(guān)聯(lián)性小[4-5]。以南京師范大學(xué)圖書(shū)館為例,在整個(gè)圖書(shū)館發(fā)展過(guò)程中,部署了大量資源和服務(wù)網(wǎng)站,這些網(wǎng)站大部分是一個(gè)應(yīng)用對(duì)應(yīng)一臺(tái)服務(wù)器的單主機(jī)模式。少數(shù)業(yè)務(wù)應(yīng)用采用將Web應(yīng)用和數(shù)據(jù)庫(kù)分開(kāi)部署到兩臺(tái)服務(wù)器上面的獨(dú)立主機(jī)模式,以增加整個(gè)系統(tǒng)的容錯(cuò)性,保證Web服務(wù)器的橫向擴(kuò)展。
簡(jiǎn)單的傳統(tǒng)架構(gòu)在穩(wěn)定性、安全性和系統(tǒng)關(guān)聯(lián)度上存在很多問(wèn)題。一是各網(wǎng)站服務(wù)器由于單節(jié)點(diǎn)對(duì)外發(fā)布服務(wù),極易出現(xiàn)宕機(jī)的情況,網(wǎng)站無(wú)法提供全天候不間斷服務(wù)。二是由于Web服務(wù)器直接對(duì)外服務(wù),暴露在外部網(wǎng)絡(luò),容易招受攻擊而導(dǎo)致服務(wù)器癱瘓或網(wǎng)頁(yè)被更改,網(wǎng)站和系統(tǒng)的安全性大大降低。三是單臺(tái)服務(wù)器服務(wù)能力有限,無(wú)法應(yīng)對(duì)高并發(fā)、大流量的用戶訪問(wèn)。四是各網(wǎng)站相互隔離,無(wú)法進(jìn)行關(guān)聯(lián),若想實(shí)現(xiàn)服務(wù)器之間的數(shù)據(jù)共享難度很大。為了解決上述問(wèn)題,我們借鑒了大型網(wǎng)站架構(gòu)模式,重新構(gòu)建圖書(shū)館站群架構(gòu),并采用分層、高可用、緩存和異步等技術(shù)手段來(lái)最大程度提升整個(gè)網(wǎng)站系統(tǒng)的穩(wěn)定性[4]。
3 圖書(shū)館高性能站群架構(gòu)設(shè)計(jì)
圖書(shū)館網(wǎng)站傳統(tǒng)架構(gòu)的性能依賴于服務(wù)器單機(jī)的性能,這是整個(gè)架構(gòu)的瓶頸所在。在新架構(gòu)中不僅需要發(fā)揮服務(wù)器單機(jī)的最大性能,還需要有一個(gè)合理的網(wǎng)站架構(gòu),將圖書(shū)館所有的Web應(yīng)用整合成一個(gè)站群有機(jī)體,最大程度發(fā)揮站群整體架構(gòu)的優(yōu)勢(shì)來(lái)保障圖書(shū)館信息服務(wù)的正常開(kāi)展。分層架構(gòu)模式是最為常用的網(wǎng)站構(gòu)建模式,架構(gòu)內(nèi)部每一層執(zhí)行特定的功能。在新架構(gòu)中根據(jù)服務(wù)器類別屬性,可將整個(gè)架構(gòu)分成三層:反向代理層、業(yè)務(wù)層和數(shù)據(jù)層。
反向代理層是整個(gè)架構(gòu)的核心,負(fù)責(zé)整個(gè)站群的數(shù)據(jù)轉(zhuǎn)發(fā),我們?cè)谠搶硬渴饍膳_(tái)高性能服務(wù)器,安裝Nginx反向代理服務(wù),并通過(guò)Keepalived軟件對(duì)Nginx實(shí)現(xiàn)雙機(jī)熱備(High Available),以增加整個(gè)架構(gòu)的穩(wěn)定性。該層還負(fù)責(zé)將原有圖書(shū)館主頁(yè)、OPAC等服務(wù)器的外網(wǎng)IP地址通過(guò)VIP(虛擬網(wǎng)絡(luò)地址)的方式綁定到雙機(jī)上面以提供地址解析服務(wù)。
原有網(wǎng)站服務(wù)器改成內(nèi)網(wǎng)IP后,將其放入業(yè)務(wù)層,對(duì)于圖書(shū)館主頁(yè)、OPAC服務(wù)等關(guān)鍵業(yè)務(wù),我們結(jié)合服務(wù)器虛擬化創(chuàng)建集群,以保障系統(tǒng)性能和高可用。
數(shù)據(jù)層主要包括后臺(tái)業(yè)務(wù)生產(chǎn)系統(tǒng)和數(shù)據(jù)庫(kù)系統(tǒng)等。以圖書(shū)館網(wǎng)站主頁(yè)為例,我們將主頁(yè)后臺(tái)CMS內(nèi)容管理系統(tǒng)部署到數(shù)據(jù)層,然后通過(guò)同步軟件將待發(fā)布文件實(shí)時(shí)同步更新到所有的業(yè)務(wù)層主頁(yè)集群服務(wù)器中。改造后的站群架構(gòu)如圖2所示。
圖2 基于Nginx和Keepalived的圖書(shū)館站群架構(gòu)
同改造前架構(gòu)相比,新架構(gòu)有諸多優(yōu)勢(shì)。一是系統(tǒng)可靠性大幅度增強(qiáng)。通過(guò)部署集群,可以實(shí)現(xiàn)應(yīng)用的高可用,提供全天候不間斷服務(wù)。二是網(wǎng)站系統(tǒng)可擴(kuò)展性得到增強(qiáng)。反向代理可以理解為7層應(yīng)用層的負(fù)載均衡,使用負(fù)載均衡之后可以非常便捷地橫向擴(kuò)展服務(wù)器集群,實(shí)現(xiàn)集群整體并發(fā)能力、抗壓能力的提高。三是實(shí)現(xiàn)網(wǎng)站數(shù)據(jù)共享。各網(wǎng)站通過(guò)Nginx聚合到了一起,通過(guò)反向代理層可以實(shí)現(xiàn)不同網(wǎng)站之間跨域,從而方便地實(shí)現(xiàn)數(shù)據(jù)對(duì)接與共享。四是有效提高后端服務(wù)器性能。通過(guò)反向代理本地緩存功能,對(duì)后端服務(wù)器靜態(tài)資源進(jìn)行緩存,可以有效減少后端服務(wù)器的壓力,從而提高網(wǎng)站整體性能。五是安全性進(jìn)一步加強(qiáng)。由于真實(shí)服務(wù)器被部署在圖書(shū)館內(nèi)網(wǎng),新架構(gòu)有效隱藏隔離了內(nèi)部服務(wù)器,提高了系統(tǒng)安全性。
4 圖書(shū)館高性能站群具體實(shí)現(xiàn)
筆者以CentOS 6.8為系統(tǒng)環(huán)境,通過(guò)yum命令安裝開(kāi)源軟件Nginx1.10.1穩(wěn)定版和Keepalived1.1.20,從多個(gè)方面來(lái)分析圖書(shū)館高性能站群的具體實(shí)現(xiàn)。
4.1 基于Keepalived的Nginx服務(wù)器雙機(jī)熱備
Nginx本身是單點(diǎn)反向代理,Nginx服務(wù)器本身出現(xiàn)故障的話,就會(huì)導(dǎo)致整個(gè)站群都無(wú)法提供服務(wù)。為了解決這個(gè)問(wèn)題,在新架構(gòu)中可將開(kāi)源軟件Keepalived應(yīng)用到Nginx服務(wù)器上面,實(shí)現(xiàn)Nginx服務(wù)器雙機(jī)熱備。Keepalived是通過(guò)VRRP協(xié)議來(lái)備份路由的高可靠性運(yùn)行件,將Keepalived設(shè)計(jì)的服務(wù)模式應(yīng)用到圖書(shū)館Nginx服務(wù)器上面,可以實(shí)現(xiàn)Nginx服務(wù)器的IP瞬間無(wú)縫交接,平滑切換,最大程度保障圖書(shū)館站群架構(gòu)的穩(wěn)定性[5]。
Keepalived雙機(jī)熱備方案中,兩臺(tái)機(jī)器(Master和Backup)同時(shí)運(yùn)行,只有一臺(tái)機(jī)器(Master) 提供對(duì)外服務(wù)。當(dāng)該機(jī)出現(xiàn)故障的時(shí)候,另外一臺(tái)(Backup)會(huì)馬上自動(dòng)接管并且提供服務(wù),而且切換的時(shí)間非常短,一旦Master機(jī)器恢復(fù)正常,那么服務(wù)將再次被切回Master服務(wù)器。Master和Backup兩臺(tái)機(jī)器的Keepalived配置只有少許區(qū)別,主要如下:
vrrp_instance VI_1 {
interface eth0 #實(shí)例所綁定的網(wǎng)卡
state MASTER #實(shí)例初始化狀態(tài),備機(jī)修改為:state BACKUP
virtual_router_id 51 #組名,同一節(jié)點(diǎn)的組名必須一致
priority 100 #優(yōu)先級(jí),Backup:priority 80
……
virtual_ipaddress {
202.119.108.112/24 dev eth0 #配置對(duì)外服務(wù)虛擬IP地址,可以配置多個(gè)IP地址
202.119.108.113/24 dev eth0
}
……
}
Keepalived是通過(guò)競(jìng)選機(jī)制來(lái)確定主備的,高優(yōu)先級(jí)競(jìng)選為Master,因此Master配置里面的priority必須要高于Backup機(jī)器[6]。測(cè)試及驗(yàn)證:拔掉節(jié)點(diǎn)Master的網(wǎng)線,虛擬IP會(huì)自動(dòng)綁定到節(jié)點(diǎn)Backup上,再恢復(fù)Master節(jié)點(diǎn)的網(wǎng)線,虛擬IP又綁定回節(jié)點(diǎn)Master之上。在實(shí)際應(yīng)用中,還可以借助Keepalived提供的vrrp_script及track_script來(lái)設(shè)置仲裁,以防止腦裂的可能[7]。
4.2 使用Nginx實(shí)現(xiàn)網(wǎng)站負(fù)載均衡
隨著硬件技術(shù)的快速發(fā)展,越來(lái)越多的負(fù)載均衡設(shè)備涌現(xiàn)出來(lái),但是其昂貴的價(jià)格卻往往令人望而卻步,因此利用開(kāi)源軟件實(shí)現(xiàn)負(fù)載均衡就成為當(dāng)下圖書(shū)館的不二之選。
Nginx的負(fù)載均衡是一個(gè)基于內(nèi)容和應(yīng)用的七層交換負(fù)載均衡,以反向代理服務(wù)器方式實(shí)現(xiàn)。因此使用Nginx實(shí)現(xiàn)服務(wù)器負(fù)載均衡的關(guān)鍵在于ngx_http_upstream_hash_module模塊的使用和設(shè)置。Nginx的upstream模塊的負(fù)載均衡算法有:輪詢、權(quán)重輪循均衡、按IP的hash結(jié)果分配、按響應(yīng)時(shí)間來(lái)分配和按URL的hash結(jié)果來(lái)分配[8]??紤]到圖書(shū)館網(wǎng)站的具體情況,采用了ip hash的方式來(lái)分配,通過(guò)將同一客戶端的請(qǐng)求發(fā)往同一個(gè)后端服務(wù)器,可以解決session保持問(wèn)題。下面以圖書(shū)館OPAC服務(wù)為例,創(chuàng)建OPAC集群,關(guān)鍵代碼如下:
upstream opacservers{ #定義upstream名字opacservers,供反向代理引用
ip_hash; #通過(guò)ip_hash方式輪詢
server 192.168.1.116; #指定后端服務(wù)器1
server 192.168.1.117; #指定后端服務(wù)器2
}
location /{
proxy_pass http://opacservers/; #反向代理地址
……
}
Nginx的upstream模塊相當(dāng)于把后端的服務(wù)器地址放在了一個(gè)地址池里,而proxy模塊則是從這個(gè)池子里調(diào)用了這些服務(wù)器。通過(guò)上述設(shè)置,可以創(chuàng)建圖書(shū)館OPAC服務(wù)集群,當(dāng)后臺(tái)服務(wù)器有一臺(tái)出現(xiàn)故障宕機(jī)后,圖書(shū)館OPAC服務(wù)不會(huì)中斷,所有的客戶端請(qǐng)求將被發(fā)送到另外一臺(tái)服務(wù)器上面,從而保持圖書(shū)館關(guān)鍵性應(yīng)用的持續(xù)性,提高服務(wù)的可靠性。
4.3 基于Nginx的Web內(nèi)容高性能緩存
Nginx反向代理服務(wù)器具有緩存功能,內(nèi)容緩存是顯著提高Web站點(diǎn)性能最有效的方法之一,通過(guò)Nginx的proxy_cache模塊對(duì)網(wǎng)站靜態(tài)內(nèi)容進(jìn)行緩存,既節(jié)省了與后端 Web 服務(wù)器的通訊開(kāi)銷,大大加快了訪問(wèn)速度,同時(shí)也減輕了后端 Web 服務(wù)器的負(fù)但[9]。
以緩存圖書(shū)館主頁(yè)為例,首先Nginx反向代理服務(wù)器(Nginx_Master)對(duì)訪問(wèn)請(qǐng)求進(jìn)行緩存檢測(cè),如果本地沒(méi)有相應(yīng)緩存(MISS)就通過(guò)后臺(tái)主頁(yè)集群獲取相關(guān)內(nèi)容,然后保存到Nginx_Master服務(wù)器本地,同時(shí)對(duì)客戶端進(jìn)行響應(yīng);如果本地已有相關(guān)內(nèi)容的緩存(HIT),那么Nginx將直接對(duì)客戶端的請(qǐng)求進(jìn)行響應(yīng),具體過(guò)程如圖3所示。
圖3 Nginx的web內(nèi)容緩存示意圖
Nginx反向代理服務(wù)器web緩存關(guān)鍵配置如下:
proxy_cache_path /home/webpages_cache levels=1:2 keys_zone= webcache:2000m inactive=15d max_size=10g; #定義名稱為webcache的nginx緩存
location ~* \.(gif|jpg|jpeg|png|bmp|swf|js|css)$ #通過(guò)正則表達(dá)式對(duì)特定文件進(jìn)行緩存
{
proxy_cache webcache; #使用web緩存區(qū)webcache
proxy_cache_valid 200 206 304 301 302 90d; #對(duì)不同http狀態(tài)碼緩存設(shè)置緩存時(shí)間
……
}
Nginx 能通過(guò)內(nèi)存緩存和傳統(tǒng)的硬盤(pán)緩存進(jìn)行工作,最熱的數(shù)據(jù)放入內(nèi)存,不經(jīng)常訪問(wèn)的內(nèi)容會(huì)緩存到硬盤(pán),可以通過(guò)配置inactive參數(shù)來(lái)定制緩存釋放機(jī)制。
4.4 通過(guò)Nginx實(shí)現(xiàn)跨域
在網(wǎng)絡(luò)中,域是獨(dú)立運(yùn)行的一個(gè)單位,而在網(wǎng)絡(luò)操作系統(tǒng)中,域?qū)儆谶壿嫿M織的單元,區(qū)隔和標(biāo)簽了網(wǎng)絡(luò)的安全邊界。在各個(gè)不同的域之間進(jìn)行互訪,需要建立一個(gè)類似于信任關(guān)系的語(yǔ)法橋梁。只有實(shí)現(xiàn)了跨域,兩個(gè)域之間才可以互訪,實(shí)現(xiàn)數(shù)據(jù)共享[10]。默認(rèn)瀏覽器不能執(zhí)行其他網(wǎng)站的腳本,這是由瀏覽器的同源[11]策略造成的,是瀏覽器對(duì)JavaScript施加的安全限制。所謂同源是指域名、協(xié)議和端口均相同。比如:http://lib.njnu.edu.cn/index.html調(diào)用http://opac.njnu.edu.cn/api/,由于主域名不同而無(wú)法實(shí)現(xiàn)數(shù)據(jù)交互。實(shí)現(xiàn)跨域的辦法雖然比較多,比如服務(wù)器端的XmlHttpRequest、document.domain+iframe和window.name等,不過(guò)這些方法都需要目標(biāo)服務(wù)器進(jìn)行配合,而通過(guò)Nginx我們可以方便地實(shí)現(xiàn)域名轉(zhuǎn)發(fā),將http://opac.njnu.edu.cn/lapi/這個(gè)地址通過(guò)Nginx的域名轉(zhuǎn)發(fā)功能轉(zhuǎn)換成http://lib.njnu.edu.cn/lapi/,從而實(shí)現(xiàn)跨域,關(guān)鍵配置如下:
location /lapi{ #對(duì)lib.njnu.edu.cn域名的lapi子目錄進(jìn)行配置
proxy_pass http://opac.njnu.edu.cn/lapi/;
#轉(zhuǎn)發(fā)目標(biāo)地址
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
通過(guò)Nginx實(shí)現(xiàn)跨域是最簡(jiǎn)單的跨域方式,支持所有瀏覽器,支持session,不需要修改任何代碼,并且不影響服務(wù)器性能。我們只需要配置Nginx,將多個(gè)真實(shí)服務(wù)器的URL轉(zhuǎn)發(fā)到相同的域名、協(xié)議和端口上面,從而實(shí)現(xiàn)圖書(shū)館內(nèi)各系統(tǒng)的數(shù)據(jù)共享與對(duì)接。
4.5 通過(guò)Nginx實(shí)現(xiàn)TCP反向代理
通常Nginx是基于HTTP層的反向代理,不過(guò)從Nginx1.9版本開(kāi)始支持TCP協(xié)議的反向代理,實(shí)現(xiàn)基于TCP端口的轉(zhuǎn)發(fā)。Nginx的TCP代理功能和HTTP反向代理有所不同:請(qǐng)求TCP端口的所有流量將會(huì)發(fā)送到目標(biāo)服務(wù)器,而在HTTP反向代理中可以細(xì)化哪些請(qǐng)求分發(fā)到哪些服務(wù)器。Nginx的TCP代理不僅僅局限于web的url請(qǐng)求,還可以轉(zhuǎn)發(fā)如memcached、mysql和oracle等點(diǎn)到點(diǎn)的請(qǐng)求。下面以南京師范大學(xué)圖書(shū)館匯文系統(tǒng)Oracle數(shù)據(jù)庫(kù)為例,實(shí)現(xiàn)Oracle數(shù)據(jù)庫(kù)的負(fù)載均衡。
南京師范大學(xué)圖書(shū)館匯文系統(tǒng)的運(yùn)行方式是兩臺(tái)小型機(jī)(內(nèi)網(wǎng)IP)通過(guò)共享存儲(chǔ)的方式實(shí)現(xiàn)雙機(jī)并行,并且同時(shí)對(duì)外服務(wù)。由于多校區(qū)的原因,之前在客戶端設(shè)置上面只能選擇連接一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器,現(xiàn)在可通過(guò)Nginx構(gòu)建Oracle數(shù)據(jù)庫(kù)反向代理,實(shí)現(xiàn)了兩臺(tái)小型機(jī)負(fù)載均衡和高可用,不僅提高了效率,也免去了頻繁修改客戶端配置的麻煩。關(guān)鍵代碼如下:
stream{
upstream proxy_tcp {
hash $remote_addr consistent;
server 192.168.1.88:1521 weight=10 max_fails=3 fail_timeout=60s;
server 192.168.1.89:1521 weight=5 max_fails=3 fail_timeout=60s;
}
server {
listen 1521; #反向代理服務(wù)器監(jiān)聽(tīng)端口
proxy_pass proxy_tcp; #實(shí)現(xiàn)TCP轉(zhuǎn)發(fā)
proxy_connect_timeout 10s;
proxy_timeout 600s;
}
}
上述配置可以實(shí)現(xiàn)反向代理服務(wù)器的1521端口和內(nèi)網(wǎng)192.168.1.88和192.168.1.89兩臺(tái)服務(wù)器1521端口的轉(zhuǎn)發(fā),并且實(shí)現(xiàn)流量負(fù)載均衡。這樣即使一臺(tái)服務(wù)器進(jìn)行關(guān)機(jī)維護(hù),圖書(shū)館的匯文oracle服務(wù)也不會(huì)中斷,真正做到數(shù)據(jù)庫(kù)高可用。
5 系統(tǒng)架構(gòu)驗(yàn)證
通過(guò)以上配置與實(shí)施,圖書(shū)館構(gòu)建了一個(gè)全新的圖書(shū)館高性能站群架構(gòu),通過(guò)這個(gè)架構(gòu)可實(shí)現(xiàn)高可用、可擴(kuò)展和輕量級(jí)的目標(biāo)。在實(shí)際生產(chǎn)環(huán)境中通過(guò)apache的httpd-tools工具中的ab命令對(duì)新老架構(gòu)進(jìn)行壓力測(cè)試(測(cè)試服務(wù)器為DELL PowerEdge R710,硬件環(huán)境均相同),測(cè)試命令為:ab -n 50000 -c 1000 http://opac.njnu.edu.cn/tpl/css/bootstrap.css,該命令對(duì)網(wǎng)站總共發(fā)起50 000次訪問(wèn)請(qǐng)求,每次訪問(wèn)的并發(fā)數(shù)為1000,測(cè)試結(jié)果如表1所示。
測(cè)試數(shù)據(jù)表明,新架構(gòu)得益于Nginx緩存、Gzip壓縮等功能,在總耗時(shí)、吞吐率和網(wǎng)絡(luò)流量等參數(shù)上面均高于傳統(tǒng)架構(gòu),在高并發(fā)情況下,新架構(gòu)受益于Nginx的先進(jìn)模型,服務(wù)器CPU利用率控制得非常好,不會(huì)出現(xiàn)老架構(gòu)在高并發(fā)情況下服務(wù)器CPU被全部占滿的現(xiàn)象。南京師范大學(xué)圖書(shū)館站群新架構(gòu)部署至今未出現(xiàn)圖書(shū)館Web應(yīng)用宕機(jī)事件,整個(gè)架構(gòu)運(yùn)行穩(wěn)定、效果良好。
6 結(jié)語(yǔ)
本文提出了在圖書(shū)館多服務(wù)器環(huán)境下構(gòu)建基于Nginx和Keepalived的圖書(shū)館站群開(kāi)源架構(gòu)方案。該方案通過(guò)開(kāi)源軟件來(lái)實(shí)現(xiàn)圖書(shū)館高可用站群的部署,充分發(fā)揮圖書(shū)館服務(wù)器的性能,提高了圖書(shū)館Web服務(wù)的可用性和并發(fā)量,但在運(yùn)行過(guò)程中存在著一些不足,需要改進(jìn)。一是反向代理Web緩存處理靜態(tài)文件(如圖片、文本文件等)比較理想,但是不適合做即時(shí)數(shù)據(jù)查詢、即時(shí)評(píng)論等頁(yè)面的緩存,因?yàn)樵诰彺鏁r(shí)間內(nèi)相應(yīng)的頁(yè)面無(wú)法得到即時(shí)更新。對(duì)于這個(gè)問(wèn)題,性能要求高的應(yīng)用,只能通過(guò)部署服務(wù)器集群的方式來(lái)解決。二是本文OPAC服務(wù)器負(fù)載均衡采用的是基于ip_hash的方式來(lái)實(shí)現(xiàn)的,雖然解決了session保持問(wèn)題,但是這種方式?jīng)]有起到均衡負(fù)載的目的。如果既要做到session共享又要實(shí)現(xiàn)負(fù)載均衡,最有效的方法就是把session放入redis[12]內(nèi)存數(shù)據(jù)庫(kù)。