tomcat/nginx/redis/session

NO IMAGE
1 Star2 Stars3 Stars4 Stars5 Stars 給文章打分!
Loading...

在網上看到一個關於tomcat nginx redis的實用部署,因此學習並自己除錯記錄下來。
感謝博主該文章的博主:ZHRLOVE
該博主文章地址:https://www.cnblogs.com/zhrxi…

tomcat nginx redis實現負載均衡,session共享的問題

在專案運營的時候,我們都會遇到一個問題,那就是我們的專案需要更新的時候,我們可能的一般操作是需要先暫時關閉下伺服器來進行專案的更新。但是這樣的操作可能會出現以下的狀況:
(1)專案的使用者還在操作,我們關閉伺服器來更新專案的時候,使用者會被強迫終止操作(我們可以檢視專案日誌等沒人操作的時候再進行更新,但是總可能會有萬一的情況,所以看日誌來更新這個不完全可靠!!!)
(2)不知道的使用者可能會想專案是不是被攻擊了,這樣會降低了對專案的信任程度,從而導致了失去部分潛在使用者,這一點的出現對於專案的運營非常不好,尤其對一些金融網際網路公司不利。你懂的。

在查閱了一些資料之後,決定採用tomcat nginx redis來實現負載均衡和session共享。下面就是我記錄下的整個實踐的過程,如有錯誤指出,請大俠指點,隨意噴!!!

第一:nginx簡單介紹

nginx是一款輕量級兼備高效能的http和反向代理伺服器。我們就可以理解是一款軟體就行,因為以聽到伺服器可能就會蒙,nginx是伺服器?感覺不好,nginx是一款軟體,這個軟體是輕量級的,高效能的http軟體,有反向代理的功能。nginx就是監聽請求,處理請求,返回結果這樣。所謂的反向代理就是指的是使用者發起訪問請求,由代理伺服器(軟體)接收,然後將請求轉發給正式伺服器,並且將正式伺服器處理完的資料返回給客戶端(使用者),此時nginx就表現為一個代理伺服器。這麼看起來是不是感覺多經過一步,稍顯麻煩,為什麼請求不直接給到正式伺服器來處理?其實這樣操作的好處多多,在下面的實踐demo過程我們會說明白的。

首先我們去nginx官網下載一個nginx。實踐是在自己電腦上的,下載的是windows版本。下載完成之後直接放在某個盤中即可,不需要安裝。接下來我們開啟cmd,進入nginx目錄下,輸入start nginx。
clipboard.png

我們可能會看到一個視窗一閃而過,其實這樣nginx已經被開啟了,我們可以在任務管理欄中找到nginx的程序。
clipboard.png

現在我們在瀏覽器中輸入localhost。可以看到出現一個頁面,雖然簡陋了一點,但這確確實實就是nginx的歡迎頁面,就類似tomcat剛啟動完成的localhost:8080的歡迎頁面。

第二:使用nginx實現反向代理

現在我們搭建一個專案,搭建的過程就不加以贅述了。功能很簡單,就是能跳到一個頁面就可以了。執行專案demo的時候,我這tomcat埠監聽的是8080,在瀏覽器中輸入localhost:8080,出現我們的這個頁面。
clipboard.png

這個時候我們還是直接訪問我們的tomcat伺服器(也就是上面我們所說的正式伺服器),現在我們想通過nginx來訪問tomcat,即輸出localhost就能顯示我們的demo頁面。

這樣,我們就得要去修改我們的nginx的核心配置檔案,在其目錄下的conf資料夾下的nginx.conf檔案,那麼我們首先要了解下檔案中的一些節點配置作用(多學無妨)。
(1)work_processes:工作程序個數,可以配置多個;
(2)work_connections:單個程序最大連線數;
(3)server:每一個server就相當於一個代理伺服器;
(4)listenr:監聽埠,預設80;
(5)server_name:當前服務的域名,可以有多個,用空格分隔(我們這個demo是本地的,所以是localhost);
(6)index:當沒有指定主頁的時候,預設會選擇這個指定的檔案,可以是多個,空格分隔;
(7)proxy_pass:請求轉向自定義的伺服器列表;
(8)upstream name{}:伺服器叢集的名稱;

知道了nginx配置文中節點的作用,我們就知道我們要修改配置檔案中的server部分,這是它原有的程式碼,我刪除了它註釋部分。現在我們就能明白為什麼輸入localhost,它訪問的是它的歡迎頁面index.html。
clipboard.png

下面我們對這段程式碼進行小小的修改,就是將請求轉向我們定義的伺服器。
clipboard.png
注意:這裡有點錯誤,nginx的配置檔案中,每一行都用分好結尾;

在配置完之後,隨後cmd中輸入命令nginx.exe -s reload重新啟動即可!
重啟後,我們再輸入localhost,可以看到跳轉的頁面就是我們的demo了。6666666666666666,給掌聲!
clipboard.png

至此,反向代理已經完成,這樣所有請求都需要經過代理伺服器nginx才能訪問到正式伺服器,某種程度上可以保護網站安全。

第三:使用nginx實現負載均衡

負載均衡即是代理伺服器將接受到的請求均衡地分發到各個伺服器中。
負載均衡的優勢在訪問量少或者併發小的時候可能並不明顯,且不說淘寶雙11,鐵道部搶票這種級別的訪問量,高併發。就是一般網站的搶購活動時,也會給伺服器造成很大的壓力,可能會造成伺服器崩潰。而負載均衡可以很明顯的減少甚至消除這種情況出現,下面就是實踐的方法。

首先,我們再開一個tomcat伺服器,這裡區分一下就叫tomcat2吧。原先的就叫tomcat1。將tomcat1上的專案。拷貝到tomcat2上。稍微再修改一下頁面上的文字加以區分等下我們的請求被分發到那個tomcat伺服器上。這裡tomcat2的埠我們這裡設定為8081。在瀏覽器中輸入localhost:8081。
clipboard.png

伺服器準備好了,我們就要在server外部定義一個伺服器叢集了,即用到了上文中提到的upstream標籤了。伺服器叢集的名字定義為test。
clipboard.png

同時,我們得要修改一下server,將定向的路徑轉到我們所定義的伺服器叢集上。
clipboard.png

接下來,我們來重啟一下nginx,然後在瀏覽器上輸入localhost,再多重新整理幾次,我們就可以看到兩個頁面在來回切換。666666666666,掌聲在哪裡?
clipboard.png
clipboard.png

這樣就即實現了負載均衡了。假設我們的伺服器在執行過程中,其中一個tomcat掛了,仍然還有另外一個可以訪問。而且在專案更新的時候,也能先只關閉其中一個,輪流更新。另外一個還能有效緩解伺服器壓力,是不是很棒呢?而且上面我們只用了兩個tomcat,實際情況可能會更多。

當然,以上的nginx的配置是和簡單的,實際上我們還可以配置nginx對靜態資源的快取等等,這部分知識等到文章的末尾我們再補充。

第四:小結

花了點時間,總算陸陸續續寫好了,在這裡我們的總結一下下:
nginx作為一個反向代理伺服器,能快取我們專案的靜態檔案,並實現反向代理與負載均衡,可以有效地減少伺服器壓力,即使專案不大,也可以使用。

大家另外應該還會發現一個問題,雖然這樣請求能分別到兩個tomcat上,如果是一般不需要身份校驗的或者什麼認證的方法尚可,但如果出現了這類情況:我們在tomcat1伺服器上進行了登入,這時候使用者的session當然是儲存在tomcat1伺服器上,而這時候進入個人中心的請求被分到tomcat2上了,這時候就會出現了,tomcat2會告訴你還未登入,這顯然不是我們想看到的。

這就涉及到了session共享了,如何讓兩個伺服器甚至多個伺服器的session公用。接下來我們再學習這一塊內容。加油!!!!進擊的程式猿!!!!

相關文章

資料庫 最新文章