1. 程式人生 > >nginx+tomcat實現負載均衡以及雙機熱備(tomcat宕機導致客戶端無法訪問)

nginx+tomcat實現負載均衡以及雙機熱備(tomcat宕機導致客戶端無法訪問)

首先,在這裡分享一個java技術交流群,純粹技術交流,拒絕廣告,歡迎各位進群交流。QQ群:817997079

大家都知道nginx可以代理多臺伺服器(以tomcat為例),那麼當被nginx代理的tomcat伺服器宕機時,我們怎麼保證客戶端能繼續訪問系統?接下來就說一下nginx在實現負載均衡的同時,被代理的伺服器宕機怎麼無痛的讓客戶端繼續訪問到我們的專案。

1.首先在nginx的檔案目錄裡找到nginx-conf檔案,這是nginx的配置檔案;在nginx-conf檔案下的http節點下新增upstream節點,進行tomcat的配置,如下圖所示

server是配置tomcat的埠號和ip地址(綠框所示);nginx分配tomcat請求的比例有四種,分別是輪詢(預設),權重(紅框所示)權重分配的越高,訪問的承載量越大,第三種分配方式是根據ip分配(上圖中的ip-hash方法,被注掉了);最後一種是第三方分配。我的配置檔案用的是權重的分配方式。

2.tomcat的分配配置完成後該配置我們的靜態資源的根目錄了,如下圖所示

根據上圖所示首先在server節點下新增location節點(可新增多個),配置攔截客戶端以專案名為字首的請求和以.do、.jsp為字尾的請求,以及攔截客戶端請求的靜態資源,去我們配置的根目錄下去找靜態資源展示給客戶端(動靜分離,請求靜態資源不經過tomcat)

3.配置完成之後,開始配置我們的tomcat資料夾/conf/server.xml檔案,如下所示

更改這三個埠號,防止出現執行多個tomcat會出現埠號被佔用的問題。

4.tomcat和nginx的配置完成後把要執行專案的war包放到tomcat的webapps的資料夾下(在兩個tomcat的專案裡做一個標識,顯示當前的埠號為多少),在tomcat的bin資料夾下執行startup.bat檔案,啟動tomcat,tomcat啟動成功之後,使用dos命令啟動我們的nginx,然後開啟瀏覽器進行測試

(1)啟動nginx

(2)開啟瀏覽器訪問localhost

第一次進來nginx分配的是8080埠,點選重新整理

埠號切換為8081,到這通過nginx整合tomcat實現負載均衡以及動靜分離的配置就結束了。那麼思考一個問題,當客戶端正在訪問的tomcat宕機了,怎麼保證客戶端無感知繼續訪問我們的專案?還是通過配置nginx下的nginx-conf配置檔案來解決,如下圖所示

backup:當其他所有的沒有backup屬性的tomcat宕機的時候,由這個由backup屬性的tomcat頂替處理客戶端的請求,其他的tomcat正常執行的時候是不會訪問到這個backup的tomcat的;下面我們測試一下,如圖:

當我們對8080埠的tomcat進行了backup屬性的新增後,無論怎麼重新整理都不會訪問到這個8080埠的tomcat,下面模擬8081和8082埠的tomcat宕機後的請求,如圖


down掉兩個正常執行的tomcat,瀏覽器傳送請求結果如下:

頁面無論怎麼重新整理,請求的都是帶有backup屬性的8080埠,這樣就解決了tomcat宕機後怎麼保證客戶端繼續訪問我們專案的問題。      -----------純屬原創,不喜勿噴