石浩波
摘要:Nginx作為一款開源高效的反向代理服務(wù)器在各大網(wǎng)站都得到了良好的應(yīng)用,該文主要應(yīng)用Nginx替換原有的F5設(shè)備實現(xiàn)負載均衡以及并通過Redis數(shù)據(jù)庫實現(xiàn)會話保持,降低維護成本并且實現(xiàn)更加靈活的部署結(jié)構(gòu)。
關(guān)鍵詞:Nginx;負責(zé)均衡;Redis;會話保持
中圖分類號:TP311 文獻標(biāo)識碼:A 文章編號:1009-3044(2015)14-0239-02
Abstract: nginx as a source, the reverse proxy server in each big website have been good application. In this paper, we mainly use nginx replace original F5 equipment to achieve load balance and maintain the session by the redis database, reduce maintenance costs and achieve a more flexible deployment structure.
Key words: Nginx, equilibrium, Redis, session keeping
1 背景
筆者所在單位原本通過F5設(shè)備對2臺Web服務(wù)器實現(xiàn)負載均衡,并向外提供服務(wù),但近期由于F5設(shè)備故障,并進行了網(wǎng)絡(luò)線路切換,根據(jù)現(xiàn)有原有的需求,F(xiàn)5設(shè)備僅僅使用了負載均衡和會話保持功能,并沒有使用到高可用特性,而購置F5設(shè)備的成本及后續(xù)的維護成本等原因,因此開始了通過Nginx來替代F5設(shè)備的實踐
2 實踐過程
1)原有的網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示:通過F5設(shè)備將外網(wǎng)的訪問均勻地分發(fā)到兩臺WEB服務(wù)器上,實現(xiàn)負載均衡,結(jié)構(gòu)相對比較簡單。
2)實現(xiàn)負載均衡:通過Nginx進行反向代理的方式進行的部署,其部署結(jié)構(gòu)沒有太大的變化,不需要對WEB服務(wù)器的地址進行任何的修改,對網(wǎng)絡(luò)的改造足夠小,如圖2所示:
Nginx通過ip_hash策略對后端兩臺服務(wù)器進行負載均衡和會話保持,所謂的負載均衡即來自外部用戶的訪問根據(jù)會根據(jù)用戶端的ip地址,分配到兩臺服務(wù)器的其中一臺提供服務(wù),只要用戶的ip地址不變,則會有同一臺服務(wù)器提供服務(wù),這樣用戶的會話,會保持在同一臺服務(wù)器上。其基本配置如下:
3)實現(xiàn)會話保持:實現(xiàn)負載均衡后,就是對WEB服務(wù)器上的業(yè)務(wù)系統(tǒng)實現(xiàn)會話保持,由于原有的業(yè)務(wù)系統(tǒng)是采用Java開發(fā)的Web業(yè)務(wù)系統(tǒng),Web容器為Tomcat,通過Session實現(xiàn)用戶狀態(tài)的保存,但是在實踐過程中發(fā)現(xiàn)通過Nginx的ip_hash策略無法很好地實現(xiàn)會話保持的目標(biāo),為了解決這個問題,解決方案有主要有以下幾種:通過Tomcat的Session復(fù)制,通過Memcached或者Redis等內(nèi)存數(shù)據(jù)庫共享會話,筆者經(jīng)過權(quán)衡后,決定采用Redis內(nèi)存數(shù)據(jù)庫共享會話的方式,為了保證隔離,這樣部署需要額外的3臺服務(wù)器,通過VMWare虛擬機實現(xiàn)。
新的部署架構(gòu)如圖3所示:
通過3臺虛擬機部署了集群系統(tǒng),設(shè)定了Nginx凡是對于企業(yè)后臺的訪問,全部轉(zhuǎn)向到Tomcat1/Tomcat2兩臺服務(wù)器上,并且這兩臺服務(wù)器的會話通過另外一臺Redis數(shù)據(jù)庫進行存儲,加快訪問速度。
這樣做的優(yōu)勢在于:采用的VMWare虛擬化系統(tǒng)來部署中間層,采用了輕量級的Tomcat,并部署在Linux之上,去掉無關(guān)軟件和服務(wù),使得系統(tǒng)更加精簡,每臺服務(wù)器的職責(zé)也更加精簡;通過VMWare虛擬化系統(tǒng)可以進行快速部署,可以通過簡單的復(fù)制操作對后臺系統(tǒng)進行快速部署,在訪問壓力大的時候,可以多部署幾臺服務(wù)器,橫向擴展;可以實現(xiàn)動靜分離,即靜態(tài)內(nèi)容由原來的服務(wù)器處理,而動態(tài)內(nèi)容由新的服務(wù)器處理,不僅分流也提高處理速度,大大提高網(wǎng)站的并發(fā)數(shù)。
3 配置過程
1)nginx系統(tǒng)配置
4 總結(jié)
從此次部署來看,不僅解決了網(wǎng)站原有F5設(shè)備置換需要購買的高成本以及后續(xù)的高維護費用,而且對原有網(wǎng)站的架構(gòu)進行了擴充,使結(jié)構(gòu)更加靈活。Nginx作為一款高性能的反向代理服務(wù)器其簡單、高效也得到了驗證。當(dāng)然Nginx默認自帶的負載均衡算法并沒有F5的強大,如果要應(yīng)用更好的負載均衡算法,則需要另外安裝模塊,在本文中默認的已經(jīng)足夠滿足。