榮露威,陳麗瓊
(湖南科技學院 智能制造學院,湖南 永州 425199)
業(yè)務的穩(wěn)定和快速是每個電商平臺都追求的目標。在網上流行的購物狂歡節(jié),購物網站在短時間內要處理人們大量的數據請求,這對服務器的壓力是巨大的,如果服務器承受不了這樣的訪問量,導致宕機,業(yè)務不能進行,對于電商企業(yè)的損失是巨大的。所以開發(fā)研究出穩(wěn)定高性能的新架構是非常有意義的[1]。
本文設計的是Web服務器集群,首先應該滿足現代企業(yè)對自身網站短時間內能夠承受大量的訪問請求,所以針對這個需求,采用負載均衡架構設計,使用一臺Nginx服務器作為反向代理服務器,將其置于架構的最前面,只用于接收外部的訪問請求,并且通過配置算法分發(fā)給多個下級服務器處理,而自身并不參與請求處理。
企業(yè)必定要求業(yè)務有較高的穩(wěn)定性,首先除了有情況維護之外,網站的運行一定是7×24不間斷的,對于這樣的需求,應當使用高可用設計保證架構的穩(wěn)定性,上述提到的Nginx反向代理服務器,作為對外表現為Web服務器的代理服務器,結構的單節(jié)點處肯定要承受比較大的壓力,單節(jié)點就要考慮單點故障的問題。在結構負載較大可能導致單節(jié)點出現宕機,需要設計另一臺Nginx反向代理服務器作為備用,一臺作為主,兩者用heartbeat相連。當主故障時,Heatbeat啟動,資源和進程自動切換到備用機器上,保證業(yè)務繼續(xù)進行[2]。
結構設計總體分為兩部分,公司內網的服務器和外網的客戶端。公司內網采用私有地址,以Nginx作為反向代理服務器,保證內網服務器安全,單出入口有利于數據監(jiān)控和訪問控制??蛻舳四M使用外網網段,Nginx代理服務器上應當有兩個網卡,一個配置外網網段,一個網卡配置內網網段,用來連通內外網。Nginx處理客戶端發(fā)來的請求,再分發(fā)給下級的多個請求處理服務器,首先判斷是什么種類的訪問請求,動態(tài)還是靜態(tài),當是靜態(tài)時直接將請求分發(fā)給Squid處理,其他請求則直接分發(fā)給Web服務器處理。在將請求交給Squid靜態(tài)加速服務器時使用加權輪詢函數進行分發(fā),再加上URL_Hash分發(fā)函數,來自同一個URL的請求都會調取給同一個后端去處理,以提高后臺緩存數據命中率[3]。
1.3.1 主干架構LNMP搭建
Linux平臺使用Redhat6.5版本系統,Nginx在這個結構中作為HTTP使用,MYSQL作為數據庫,PHP作為Web界面動態(tài)處理器。大體結構處理流程如下:
收到外部訪問請求,若是請求靜態(tài)數據,Nginx直接返回靜態(tài)頁面,若有動態(tài)數據,比如賬號密碼,交給PHP執(zhí)行網頁動態(tài)數據代碼,再通過接口與數據庫進行數據請求,處理好的數據返回給客戶端,如此就完成一次動態(tài)請求處理。第一,搭建前環(huán)境準備;第二,安裝MySQL;第三,編譯安裝PHP;第四,編譯安裝Nginx[4]。
1.3.2 部署Squid靜態(tài)加速服務器及Nginx反向代理服務器
Nginx反向代理主要作用是分發(fā)訪問請求給下一級的Squid靜態(tài)加速服務器以及代理后端Web對外表現為Web服務器,配置文件中設置與Squid服務器連接使用3128端口,兩個Squid服務器的分發(fā)權重都為1,表示兩者都等量輪詢分發(fā),后端代理Web的IP地址為192.168.1.40,端口80。
1.3.3 實現MySQL主從備份
MySQL支持單向,異步,實時復制,復制過程中一個服務器充當主服務器,而一個或多個其他服務器充當從服務器。復制的過程如下:(1)slave端的IO線程連上master端,發(fā)出請求;(2)master端返回給slave端,bin log文件名和位置信息;(3)IO線程把master端的bin log內容依次寫到slave端relay bin log里,并把master端的bin-log文件名和位置記錄到master.info里;(4)salve端的sql線程,檢測到relay bin log中內容更新,就會解析relay log里更新的內容,并執(zhí)行這些操作。也就是說salve執(zhí)行和master一樣的操作而達到數據同步的目的。
1.3.4 部署Heartbeat心跳線
心跳:主和備每隔一定時間會有一個通信信息,稱之為心跳,主要作用的就是備機監(jiān)控主機是否存活,若超過設置時間沒有收到通信信息則視為主機死亡,備機接管主機資源代替其完成工作。心跳線:串口(console)或者RJ-45連接。(1)臺Nginx代理服務器上安裝Heartbeat;(2)先只在主Nginx代理服務器上進行配置,配完后,再拷到備用服務器上;(3)修改認證信息配置文件;(4)修改資源配置文件;(5)修改備用nginx服務器上配置。
第一,在主干結構LNMP測試中,從用戶角度訪問網頁,不管是靜態(tài)頁面還是動態(tài)頁面,還有兩種組合的Discuz論壇頁面,都能進行訪問,則說明主干結構完整并達到預期基本功能。第二,架構性能優(yōu)化模塊的測試。在Memcache模塊測試中,先用PHP代碼寫好一個測試頁面,在訪問之后Memcache應該對其進行了緩存,關閉之后應該不能進行解析訪問,測試結果也和預期的一樣,表明Memcache功能正常。第三,Opcache模塊測試,這個測試主要是進行模塊性能測試,測試在模塊有無開啟和不同并發(fā)量的情況下,服務器的處理速度,通過對比分析測試結果可以看出,有Opcache的情況下,處理速度更快,而且在并發(fā)量越大的情況下差距越明顯。第四,Squid靜態(tài)加速模塊,在通過Squid訪問了一個從未訪問的頁面之后,其中的靜態(tài)信息會被Squid緩存在內存中,下次訪問則直接調取內存中的靜態(tài)信息,加快訪問速度,分析Squid的命中測試結果之后,發(fā)現命中靜態(tài)信息,表示Squid功能運行正常,再關閉Squid之后,訪問頁面無法解析到靜態(tài)信息,也表示了Squid正常運行和工作方式。
本文主要目的是得到一個Linux系統下的新型Web服務器架構解決方案。經過研究如今流行的LAMP和LNMP結構 ,了解其中的工作原理,最終完成了一個能夠部署與企業(yè)生產環(huán)境中的Web服務器集群解決方案。