天天看點

nginx反向代理tomcat雙機熱備

最近為了迎接集團檢查,客戶提出了一個需求,要求web應用符合主備要求,最少2台主機部署web應用,當一台的web應用出問題後,可以自動切換到另一台的應用上,不影響系統的使用。

由于我方的系統一直是單節點運作的,沒有設計主備,故此使用的是單機的tomcat部署的應用,我以前沒有做過這方面的主備改造故此沒有什麼經驗。為了快速滿足客戶的需求故此在另一台伺服器上部署了一個新的tomcat啟動後可以正常顯示應用,但問題來了新的tomcat所在的IP與原tomcat所在的IP不一緻,這就導緻了需要敲不同的IP才能通路不同tomcat來打開頁面,與客戶需求不一緻。

這樣的話就要考慮其他的方式了,雙機熱備的方式是最理想的,對外提供一個仿真IP1,後面連接配接至少2個web應用伺服器IP2和IP3,使用者通路的均是IP1,背景調用IP2和IP3,無論IP2或IP3哪個伺服器當機都不會影響IP1對外提供服務。但是tomcat本身不支援這種方式,上網查了下nginx可以反向代理tomcat進行雙機熱備滿足需求。

準備環境如下:

nginx伺服器:win7系統,nginx-1.12.2,IP:192.168.142.1

web伺服器1:win2012系統,tomcat-8.5.59,IP:192.168.142.135

web伺服器2:win2012系統,tomcat-8.5.59,IP:192.168.142.136

到http://nginx.org/en/download.html下載下傳nginx,沒敢下載下傳最新版怕有雷或相容性問題,下載下傳的是nginx-1.12.2。

nginx反向代理tomcat雙機熱備

下載下傳之後是個ZIP的壓縮包,解壓縮之後是如下檔案:

nginx反向代理tomcat雙機熱備

nginx.exe用于啟動nginx服務,啟動後在程序中有2個nginx程序

nginx反向代理tomcat雙機熱備

conf檔案夾下是nginx的配置檔案,常用的就是nginx.conf這個檔案,接下來我們就調整這個裡面的配置來反向代理實作雙機熱備。

nginx反向代理tomcat雙機熱備

登入web伺服器1,在上面部署tomcat,啟動後的頁面如下,注意最上面的檔案描述為“項目1”。

nginx反向代理tomcat雙機熱備

登入web伺服器2,在上面部署tomcat,啟動後的頁面如下,注意最上面的檔案描述為“項目2”。

nginx反向代理tomcat雙機熱備

編輯nginx配置檔案nginx.conf,打開此檔案後找到server項,将其中的預設端口号8080改成80。

nginx反向代理tomcat雙機熱備

在server項上面增加一個upstream項,這裡是配置的是被代理的那兩台伺服器1和伺服器2的資訊。在upstream後面輸入一個空格,然後在輸入一個項目的名字,例如Flex,這個Flex項目包含2個主機,如下圖。後面的weight是權重,權重數設定的越高主機被通路的優先級就越高,權重相同的情況下就随機通路。

nginx反向代理tomcat雙機熱備

在server項中增加一個proxy_pass項,在其後輸入空格和http://項目名,這個項目名是剛剛在upstream後面設定的那個項目名字。

nginx反向代理tomcat雙機熱備

輕按兩下nginx.exe啟動nginx服務,其動後在浏覽器中輸入nginx的服務位址以及應用的頁面名稱,打開頁面後會呈現web應用的界面,由于後面是不通的tomcat主機,但對外的接口是在nginx這台上,為了區分不同的主機是否生效我反複重新整理頁面可以看到在IP不變的情況下“項目1”和“項目2”不斷的切換,說明兩台tomcat主機的伺服器都生效了。

nginx反向代理tomcat雙機熱備
nginx反向代理tomcat雙機熱備

如果需要修改配置檔案後重新生效可以不關閉nginx,直接修改配置檔案後,打開cmd視窗進入nginx目錄,在其中輸入nginx -s reload等一會後即可重新載入配置。

nginx反向代理tomcat雙機熱備

至此nginx反向代理形成雙機熱備成功,歡迎交流。

繼續閱讀