在項(xiàng)目運(yùn)營(yíng)時(shí),,我們都會(huì)遇到一個(gè)問題,項(xiàng)目需要更新時(shí),,我們可能需先暫時(shí)關(guān)閉下服務(wù)器來(lái)更新,。但這可能會(huì)出現(xiàn)一些狀況:
1.用戶還在操作,被強(qiáng)迫終止了(我們可以看日志等沒人操作的時(shí)候更新,,但總可能會(huì)有萬(wàn)一) 2.不知道的用戶可能會(huì)想網(wǎng)站是不是被攻擊了,,降低了對(duì)網(wǎng)站的信任程度,從而導(dǎo)致失去部分潛在客戶,,這點(diǎn)尤其對(duì)金融互聯(lián)網(wǎng)公司不利,。
在查了一些資料后,決定采用Tomcat + Nginx + Redis來(lái)實(shí)現(xiàn)負(fù)載均衡和session共享,。下面記錄下我的實(shí)踐過程,,如有錯(cuò)誤不足之處歡迎大神指點(diǎn),不喜勿噴。
1.Nginx簡(jiǎn)單介紹及開啟 Nginx是一款輕量級(jí)兼?zhèn)涓咝阅艿腍ttp和反向代理服務(wù)器,。所謂反向代理就是指在用戶發(fā)起訪問請(qǐng)求,,由代理服務(wù)器接收,然后將請(qǐng)求轉(zhuǎn)發(fā)給正式服務(wù)器,,并且將正式服務(wù)器處理完的數(shù)據(jù)返回給客戶端,,此時(shí)代理服務(wù)器就表現(xiàn)為一個(gè)服務(wù)器。這么做看起來(lái)多經(jīng)過了一步,,稍顯麻煩,,但實(shí)則是好處多多,在下面的demo中我會(huì)將其體現(xiàn)出來(lái),。 首先我們?nèi)ginx官網(wǎng)下載個(gè)Nginx,,我這是在自己電腦上,所以當(dāng)然下載的是windows版本的,。下載完成后直接放在某個(gè)盤中即可,,不需要安裝。接下去我們打開cmd,,進(jìn)入nginx的目錄下,,輸入start nginx。
我們可以看到一個(gè)窗口一閃而過,,這樣nginx就已經(jīng)被開啟了,,我們?cè)谌蝿?wù)管理器中可以找到它的進(jìn)程。 現(xiàn)在我們?cè)跒g覽器中輸入localhost,??梢钥吹匠霈F(xiàn)一個(gè)頁(yè)面,雖然簡(jiǎn)陋了點(diǎn),,但這確確實(shí)實(shí)就是nginx的歡迎頁(yè)面,,就類似tomcat剛啟動(dòng)完成的locahost:8080的歡迎頁(yè)面。
2.使用Nginx實(shí)現(xiàn)反向代理 現(xiàn)在我們搭建一個(gè)基于SpringMVC +Spring + Mybaties框架的maven項(xiàng)目,,搭建過程不加以贅述,。功能很簡(jiǎn)單,就是能跳轉(zhuǎn)到一個(gè)頁(yè)面就行了,,當(dāng)然也可以使用別的框架,。 運(yùn)行demo,我這tomcat端口是8080,,在瀏覽器輸入localhost:8080,,出現(xiàn)我們的頁(yè)面。
這時(shí)我們還是直接訪問tomcat服務(wù)器的,,現(xiàn)在我想通過nginx訪問tomcat,,即輸入localhost就能顯示我們demo的頁(yè)面,。 這就要我們?nèi)バ薷膎ginx的核心配置文件,在其目錄下的conf文件夾下的nginx.conf文件,,那么首先我們就要了解該文件中一些節(jié)點(diǎn)的作用,。
知道了節(jié)點(diǎn)作用后,我們就知道我們需要修改的文件中的server部分,,這是它原有的代碼,,我刪除了它注釋部分。現(xiàn)在我們就能明白為什么輸入localhost,, 它訪問的是它歡迎頁(yè)面即index.html,。
下面我們對(duì)這段代碼進(jìn)行一些小小修改。就是將請(qǐng)求轉(zhuǎn)向我們定義的服務(wù)器,。
隨后在cmd中輸入命令nginx -s reload即可重啟nginx,。 重啟后,我們?cè)佥斎雔ocalhost,,可以看到跳轉(zhuǎn)到的頁(yè)面是我們demo的,。
至此,反向代理已完成,,這樣所有請(qǐng)求都需經(jīng)過代理服務(wù)器才能訪問到正式服務(wù)器,,某種程度上可以保護(hù)網(wǎng)站安全。
3.使用Nginx實(shí)現(xiàn)負(fù)載均衡 負(fù)載均衡即是代理服務(wù)器將接收的請(qǐng)求均衡的分發(fā)到各服務(wù)器中,。 負(fù)載均衡的優(yōu)勢(shì)在訪問量少或并發(fā)小的時(shí)候可能并不明顯,,且不說淘寶雙11、鐵道部搶票這種級(jí)別的訪問量,、高并發(fā),,就是一般網(wǎng)站的搶購(gòu)活動(dòng)時(shí),也會(huì)給服務(wù)器造成很大壓力,,可能會(huì)造成服務(wù)器崩潰,。而負(fù)載均衡可以很明顯的減少甚至消除這種情況的出現(xiàn),下面我們說說實(shí)現(xiàn)方法,。 首先我們?cè)匍_啟一個(gè)tomcat服務(wù)器,,這里區(qū)分一下就叫tomcat2吧,,原先的叫tomcat1。將tomcat1上的項(xiàng)目,,拷貝到tomcat2上,,稍微修改下頁(yè)面上的文字以便等下區(qū)分我們的請(qǐng)求被分發(fā)到了哪個(gè)tomcat上。tomcat2端口我這里為8081,。在瀏覽器中輸入localhost:8081,。
服務(wù)器準(zhǔn)備好了,我們要在server外部定義個(gè)服務(wù)器集群,,即用到了上文中提到的upstream 標(biāo)簽,。服務(wù)器集群名字取為test。
同時(shí)我們需要再修改下server,,將定向的路徑轉(zhuǎn)到問你服務(wù)器集群上,。
重啟下nginx,在瀏覽器輸入localhost,,再多刷新幾次,,可以看到兩個(gè)頁(yè)面在來(lái)回切換。
這樣即實(shí)現(xiàn)了負(fù)債均衡,。假設(shè)我們服務(wù)器在運(yùn)行過程中,,其中一個(gè)tomcat掛了,仍然還有另一個(gè)可以訪問,。更新的時(shí)候也能先關(guān)閉只其中一個(gè),,輪流更新。另外還能有效緩解服務(wù)器壓力,,是不是很棒呢? 當(dāng)然,,以上nginx的配置是簡(jiǎn)單化的,實(shí)際上我們還可以配置nginx對(duì)靜態(tài)資源的緩存等等,,在此就不多加演示了,。
4.小結(jié) 花了好些時(shí)間,總算陸陸續(xù)續(xù)要寫好了,,在此小結(jié)一下,。 nginx作為一個(gè)反向代理服務(wù)器,能緩存我們項(xiàng)目的靜態(tài)文件,,并實(shí)現(xiàn)反向代理與均衡負(fù)載,,可以有效減少服務(wù)器壓力,即使項(xiàng)目不大,,也可以使用,。 大家另外應(yīng)該都還發(fā)現(xiàn)了個(gè)問題,雖然這樣請(qǐng)求能分別請(qǐng)求到兩個(gè)tomcat上,,如果是一般不需身份校檢的或什么認(rèn)證的方法尚可,,但如果出現(xiàn)這類情況: 我們?cè)趖omcat1上進(jìn)行了登錄,,這時(shí)用戶session當(dāng)然是存在tomcat1上的,而這時(shí)進(jìn)入個(gè)人中心的請(qǐng)求請(qǐng)求到tomcat2上了,,這時(shí)就會(huì)出現(xiàn)問題了,。tomcat2會(huì)告訴你還未登錄,這顯然不是我們想看到的,。 這就涉及到session共享了,,如何讓兩個(gè)服務(wù)器上的session共用。我這里放到下次再說,,作為碼農(nóng)比較忙,,可能要過個(gè)好幾天。另外我將這次的demo源碼上傳了,,下次還要用,,nginx配置就不傳了,大家自己多動(dòng)手試驗(yàn),。 |
|