Nginx+Tomcat+Redis實現負載均衡與Session共享之四 — Nginx+Tomcat實現負載均衡

前言:

      本系列文章的目的,在於記錄下來本人本次實現Nginx+Tomcat+Redis實現負載均衡,tomcat集羣並同時解決Session共享整個流程的攻堅細節。在這個過程中也在網上搜索了許多資料,但是發現許多資料都不完全,有許多遺漏,學習使用起來會碰到許多錯誤卻沒有解決辦法。秉着一個交流學習的原則,這次我將從Java的JDK安裝起到整個集羣的實現,將每一個細節點都記錄下來。使學習者通俗易懂,大家都能跟着步驟一步步搭建併成功運行。

PS:本次搭建是在Win環境下實現,後續本人將在Linux環境下搭建運行,並仍會寫成博客記錄下來。


一、環境配置

      測試環境是基於WinServer 2012 R2,tomcat、nginx的配置如下

          


二、Tomcat7配置

      1、tomcat7下載(本次搭建我使用的版本如上表格所示,是7.0.81

     tomcat7.0.81下載地址

      2、修改tomcat的server.xml

      修改 tomcat解壓路徑\conf\server.xml配置文件下的三個參數(防止端口衝突,tomcat啓動失敗)

     

<!-- 8081tomcat的端口配置 -->
<Server shutdown="SHUTDOWN" port="8005">
<Connector port="8081" redirectPort="8443" connectionTimeout="20000" protocol="HTTP/1.1"/>
<Connector port="8009" redirectPort="8443" protocol="AJP/1.3"/>

<!-- 8082tomcat的端口配置 -->
<Server shutdown="SHUTDOWN" port="8006">
<Connector port="8082" redirectPort="8443" connectionTimeout="20000" protocol="HTTP/1.1"/>
<Connector port="8010" redirectPort="8443" protocol="AJP/1.3"/>

      3、啓動兩個tomcat

 

三、Nginx的安裝與啓動

      1、Nginx下載(本次搭建我使用的版本如上表格所示,是1.12.1

      登陸Nginx官網下載一個Nginx 地址:http://nginx.org/en/download.html

      2、解壓下載下來的nginx-1.12.1.zip文件

      3、開啓Nginx,此處有兩種方式

          1)進入文件目錄 ...\nginx\nginx-1.12.1,雙擊 nginx.exe 文件

          2)使用命令模式

     


      4、進行第三步驟後,可發現有個窗口一閃而過。而查看進程卻沒有nginx.exe存在,說明nginx啓動失敗。失敗原因查詢可見如下博文

      ngnix啓動失敗:http://blog.csdn.net/xie_xiansheng/article/details/78028051


      Nginx啓動成功後,可以在任務管理器裏看到如下兩個進程

     


四、Nginx負載均衡配置

      1、nginx.config配置文件簡介

      我們進入解壓後的nginx文件,我的路徑如下:E:\tomcat7+jdk7+nginx\nginx\nginx-1.12.1\conf ,我們可以打開nginx.config文件,可以看到這樣一段配置

     

      我們仔細分析一下:

      1)listen:表示當前的代理服務器監聽的端口,默認監聽80端口。注意,如果我們配置了多個server,這個listen配置需要不同。

      2)server_name:表示監聽到之後我們需要轉到哪個站點,默認是直接轉發到本地localhost

      3)location:表示匹配的路徑,默認配置"/"表示所有的請求都被攔截匹配到這裏。location這裏可以使用正則表達式來過濾請求,使得動靜分離(靜態文件交由nginx處理,tomcat只處理動態文件如jsp)

      4)root:配置了root時表示當匹配到這個location請求的路徑時,將會在這個文件夾內尋找相應的文件

      5)index:當沒有指定主頁時,默認會選擇這個指定的文件,它可以有多個,並且按照配置的順序來加載。如果前一個不存在,則繼續向下尋找。

      6)error_page:代表錯誤頁面

 

      2、實現Nginx負載均衡的配置

      1)在nginx.config文件的http內server外添加一個upstream,然後在server裏location內添加proxy_pass,使用http://+upstream的方式。

    upstream myServer {
	    server 10.2.1.248:8081 weight=1 max_fails=1 fail_timeout=10s;
	    server 10.2.1.248:8082 weight=1 max_fails=1 fail_timeout=10s;
    }
		

    server {
        listen       8080;    #測試機80端口已經被佔用,所以監聽8080
        server_name  localhost;

        location / {
            proxy_pass http://myServer;   #將upstream的myServer填寫下來
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }



      2)upstream配置詳解

      從上面實例不難看出upstream中server指令語法如下:
        server address [parameters]
        server:
必填。
        address:也必選,可以是主機名、域名、ip或unix socket,也可以指定端口號。
        parameters是可選參數,可以是如下參數:
        down:表示當前server已停用
        backup:表示當前server是備用服務器,只有其它非backup後端服務器都掛掉了或者很忙纔會分配到請求。
        weight:表示當前server負載權重,權重越大被請求機率越大。默認是1.
        max_failsfail_timeout一般會關聯使用,如果某臺server在fail_timeout時間內出現了max_fails次連接失敗,那麼Nginx會認爲其已經掛掉了,從而在fail_timeout時間內不再去請求它,fail_timeout默認是10s,max_fails默認是1,即默認情況是隻要發生錯誤就認爲服務器掛掉了,如果將max_fails設置爲0,則表示取消這項檢查。

      3、重啓nginx

      使用命令模式,reload一下nginx的配置文件,重新啓動nginx。

     


五、負載均衡測試

      1、編寫測試jsp頁面,覆蓋 E:\tomcat7+jdk7\tomcat7\apache-tomcat-7.0.81\webapps\ROOT 路徑下的index.jsp

      2、或者直接複製代碼覆蓋index.jsp文件,測試代碼如下

    <%@ page language="java" %>  
    <html>  
      <head><title>TomcatA</title></head>  
      <body>  
       
        <table align="centre" border="1">  
          <tr>  
            <td>Session ID</td>  
            <td><%= session.getId() %></td>  
          </tr>  
          <tr>  
            <td>Created on</td>  
            <td><%= session.getCreationTime() %></td>  
         </tr>  
        </table>  
      </body>  
    </html>  
    sessionID:<%=session.getId()%>   
    <br>   
    SessionIP:<%=request.getServerName()%>   
    <br>   
    SessionPort:<%=request.getServerPort()%>   
    <%   
    //爲了區分,第二個可以是2222  
    out.println("This is Tomcat Server 1111");   
    %>    


      3、瀏覽器訪問localhost:8080,觀察到如下結果,說明負載均衡配置完成!


      第一次訪問,訪問到的是tomcat_1,即端口號爲:8081的tomcat

     


      第二次訪問,訪問到的是tomcat_2,即端口號爲:8082的tomcat

     




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章