tomcat集羣負載均衡配置

系統環境設置

  • 準備三臺redhat linux 5或 centos服務器:
    • 負載均衡服務器:Apache安裝自帶的web發佈服務(httpd服務) IP地址:192.168.0.100
    • Tomcat發佈服務器1:安裝有兩個發佈服務tomcat1和tomcat2 IP地址:192.168.0.101
    • Tomcat發佈服務器2:安裝有兩個發佈服務tomcat3和tomcat4 IP地址:192.168.0.102
  • 統一對外部發布的地址是:http://192.168.0.100 (即負載均衡地址)
  • 在設定完成IP之後,最好先設置主機名和IP的對應關係:

    1css

    2html

    3前端

    4java

    cat /etc/hostsnode

    192.168.0.100    web.example.com           web       #addlinux

    127.0.0.1        localhost.localdomain     localhostnginx

    ::1              localhost6.localdomain6   localhost6git

Tomcat發佈器的安裝

JDK安裝

  • JDK軟件最新版下載:http://www.oracle.com/technetwork/java/javase/downloads/index.html
    • 點擊排列的最左邊一個大圖標的「JDK」進入,
    • 接下來選擇服務器的版本(如linux),在「I agree」前面方框中打勾選中,再按「continue」下一步
    • 選擇下面一個版本進行下載,如jdk-6u24-linux-i586.bin
    • 下載完成後上傳到web服務器上的「/tools」目錄下(本身建的目錄)
  • JDK軟件的安裝

    1github

    2web

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    # 先查看當前JDK的版本是多少

    java –version

     

    # 進入下載目錄,受權JDK文件的可執行權限

    cd /tools/

    chmod a+x jdk-6u24-linux-i586.bin

     

    # 執行JDK的安裝解壓縮,完成後按回車結束

    ./jdk-6u24-linux-i586.bin

     

    # 把解壓出來的目錄移動到/usr/local下面

    mv jdk1.6.0_24 /usr/local/

  • 配置JAVA的環境變量
    • 新建環境變量文件java.sh

      1

      2

      3

      4

      5

      6

      7

      cat > /etc/profile.d/java.sh <<EOF

      # set java environment

      export JAVA_HOME=/usr/local/jdk1.6.0_24

      export CLASSPATH=.:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar

      export PATH=\$JAVA_HOME/bin:\$PATH

      EOF

      chmod a+x /etc/profile.d/java.sh

    • 從新登陸終端,再次查詢java的版本號是否升級了:java -version
  • Tomcat軟件最新版下載:http://tomcat.apache.org/

(1)先選擇Download下面的tomcat版本(如tomcat 7.0) (2)再點擊「Core」下面的「tar.gz」進行下載,如apache-tomcat-7.0.12.tar.gz (3)下載完成後上傳到web服務器上的「/tools」目錄下(本身建的目錄)

Tomcat安裝

  • 安裝tomcat

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    # 進入下載目錄,進行解壓縮:

    cd /tools

    tar zxvf  apache-tomcat-7.0.12.tar.gz

     

    # 複製並重命名目錄到/usr/lcoal下面

    ls -l

    cp apache-tomcat-7.0.12 /usr/local/tomcat1     #(web1服務器)

    cp apache-tomcat-7.0.12 /usr/local/tomcat2     #(web1服務器)

    cp apache-tomcat-7.0.12 /usr/local/tomcat3     #(web2服務器)

    cp apache-tomcat-7.0.12 /usr/local/tomcat4     #(web2服務器)

  • 配置tomcat發佈器的端口
    • web1服務器tomcat1:vi tomcat1/conf/server.xml(修改以下四個地方:)

      1

      2

      3

      4

      5

      <Server port="8005" shutdown="SHUTDOWN">         <!--'8005'改成'8001'端口-->

          <Connector port="8080" protocol="HTTP/1.1"<!--'8080'發佈端口改成'81'端口-->

          <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> <!--改成'8011'端口-->

          <!--Engine name="Catalina" defaultHost="localhost"-->

          <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">

    • web1服務器tomcat2:port:8002, http:82, ajp:8012, jvmRote:tomcat2
    • web1服務器tomcat3:port:8003, http:83, ajp:8013, jvmRote:tomcat3
    • web1服務器tomcat4:port:8004, http:84, ajp:8014, jvmRote:tomcat4
  • 在tomcat的server.xml配置參數據中增長session同步複製的設置
    • vi server.xml (增長下列代碼,增長Engine後面的cluster中去)

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      34

      35

      36

      37

      38

      <!--

      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

      -->

      <!--下面的代碼是實現session複製功能-->

      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="6">

            <Manager className="org.apache.catalina.ha.session.BackupManager"

                     expireSessionsOnShutdown="false"

                     notifyListenersOnReplication="true"

                     mapSendOptions="6"/>

            <Channel className="org.apache.catalina.tribes.group.GroupChannel">

              <Membership className="org.apache.catalina.tribes.membership.McastService"

                          address="228.0.0.4"

                          port="45564"

                          frequency="500"

                          dropTime="3000"/>

              <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"

                        address="192.168.100.63"    <!—這裏填寫本機IP地址-->

                        port="5000"

                        selectorTimeout="100" />

              <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">

                <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>

              </Sender>

              <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>

              <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>

              <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>

            </Channel>

       

            <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"

                   filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>

            <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

            <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"

                      tempDir="/tmp/war-temp/"

                      deployDir="/tmp/war-deploy/"

                      watchDir="/tmp/war-listen/"

                      watchEnabled="false"/>

            <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>

            <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>

      </Cluster>

  • 同時須要修改tomcat的web.xml配置參數才能真正實現session同步複製的設置
    • web.xml

      1

      2

      3

      4

      5

      6

      7

      8

      <!--....--!>

          <welcome-file-list>

              <welcome-file>index.html</welcome-file>

              <welcome-file>index.htm</welcome-file>

              <welcome-file>index.jsp</welcome-file>

          </welcome-file-list>

      <distributable />   <!--在倒數第二行增長這個代碼才能實現session同步複製功能-->

      </web-app>

  • 設置Tomcat發佈服務開機自啓動
    • 複製tomcat啓動文件到開機目錄下:cp tomcat1/bin/catalina.sh /etc/rc.d/init.d/tomcat1
    • 修改上面的tomcat1啓動文件:vim /etc/rc.d/init.d/tomcat1(在文件的最頂上添加下列幾行)
      #chkconfig:35 85 15
      #description:tomcat1 server
      CATALINA_HOME=/usr/local/tomcat1
      JRE_HOME=/usr/local/jdk1.6.0_24
    • 添加tomcat1到開機啓動服務
      chkconfig --add  tomcat1
      chkconfig --list tomcat1
      chkconfig tomcat1 on
      service tomcat1 start
  • 其它三個tomcat2 、tomcat3 、tomcat4 也都按上面三步來作
  • 如何查看tomcat的啓動過程
    • 方法一:用catalina.sh來啓動:./catalina.sh run
    • 方法二:若是用./startup.sh啓動的話,查看啓動日誌tail –f /usr/local/tomcat4/logs/catalina.out

Apache Proxy負載均衡

  • Apache發佈器使用系統自帶的httpd服務,在安裝操做系統的時候先選擇好服務器下面的web服務器組件。
  • 修改配置web發佈服務的參數文件:
    • vim /etc/httpd/conf/httpd.conf (在最底下添加以下內容)

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      ServerName localhost:80      #發佈的端口說明

      <VirtualHost *:80>

          ServerAdmin admin@china1168.com

          ServerName localhost

          ServerAlias localhost

          <proxy balancer://testcluster#testcluster可本身命名,沒什麼特別的意義

              BalancerMember ajp://192.168.0.101:8011 loadfactor=1 route=tomcat1 #要與tomcat中的ajp對應

              BalancerMember ajp://192.168.0.101:8012 loadfactor=1 route=tomcat2

              BalancerMember ajp://192.168.0.102:8013 loadfactor=1 route=tomcat3

              BalancerMember ajp://192.168.0.104:8014 loadfactor=1 route=tomcat4

          </proxy>

          ProxyRequests Off

          ProxyPass /server-status !

          ProxyPass /balancer-manager !

          ProxyPass / balancer://testcluster/ stickysession=JSESSIONID #注意balancer前面有空格

          ProxyPassReverse / balancer://testcluster/    #注意balancer前面有空格

      </VirtualHost>

      <Location /server-status>   #負載均衡服務器的狀態查詢,http://192.168.0.100/server-status

          SetHandler server-status

      </Location>

      <Location /balancer-manager> #負載均衡服務器的管理查看,http://192.168.0.100/balancer-manager

          SetHandler balancer-manager

      </Location>

  • 負載均衡集羣測試實例
    • 在tomcat目錄下面的webapps文件夾中新建test測試文件:
    • mkdir webapps/test
    • vi test/index.jsp(文件內容以下)
      <%@ page contentType="text/html; charset=UTF-8" %>
      <%@ page import="java.util.*" %>
      <html><head><title>Cluster App Test</title></head>
      <body>
      Server Info:
      <%
      request.setCharacterEncoding("UTF-8");
      out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>
      <%
        out.println("<br> ID " + session.getId()+"<br>");  // 若是有新的 Session 屬性設置
        String dataName = request.getParameter("dataName");
        if (dataName != null && dataName.length() > 0) {
           String dataValue = request.getParameter("dataValue");
           session.setAttribute(dataName, dataValue);
        }  out.print("<b>Session 列表</b>");  Enumeration e = session.getAttributeNames();
        while (e.hasMoreElements()) {
           String name = (String)e.nextElement();
           String value = session.getAttribute(name).toString();
           out.println( name + " = " + value+"<br>");
               System.out.println( name + " = " + value);
         }
      %>
        <form action="index.jsp" method="POST">
          名稱:<input type=text size=20 name="dataName"><br>
          值:<input type=text size=20 name="dataValue"><br>
          <input type=submit>
         </form>
      </body>
      </html>
    • 對Apache負載均衡進行測試:
    • 正常狀況下,提交的測試內容會在四個tomcat之間輪循顯示,實現負載均衡。
  • 設置Apache發佈服務開機自啓動:chkconfig httpd on

Nginx負載均衡

nginx安裝

  • 安裝前必需要先下載相關聯的配套軟件包:
  • 相關聯軟件的安裝
    • pcre套件的安裝,進入下載目錄,進行解壓縮:

      1

      2

      3

      4

      5

      cd /tools

      tar zxvf  pcre-8.12.tar.gz

      cd pcre-8.12

      ./configure   #默認是安裝在/usr/local/目錄下面,也可指定目錄加參數 --prefix=/usr/local/

      make && make install

  • openssl套件的安裝,進入下載目錄,進行解壓縮(可選)

    1

    2

    3

    4

    5

    cd /tools

    tar zxvf openssl-1.0.0d.tar.gz

    cd openssl-1.0.0d

    ./configure   # 默認是安裝在/usr/local/目錄下面,也可指定目錄加參數 --prefix=/usr/local/

    make && make install

  • Nginx軟件的安裝和配置

    1

    2

    3

    4

    5

    cd /tools

    tar zxvf  nginx-1.0.0.tar.gz

    cd nginx-1.0.0

    ./configure   #默認是安裝在/usr/local/目錄下面,也可指定目錄加參數 --prefix=/usr/local/

    make && make install

  • 測試安裝是否成功

    1

    2

    3

    4

    5

    cd /usr/local/nginx/sbin/

    ./nginx -t

     

    nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

    nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

nginx負載配置

  • vim /usr/local/nginx/conf/nginx.conf (修改增長下面的內容)

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    pid        logs/nginx.pid;

    upstream tomcat {                      # 負載均衡站點的名稱爲tomcat,能夠本身取

        ip_hash;                           # 可選,根據來源IP方式選擇web服務器,省略的話按默認的輪循方式選擇web服務器

            server 192.168.0.101:81;       # web服務器的IP地址及tomcat發佈端口

            server 192.168.0.101:82;

            server 192.168.0.102:83;

            server 192.168.0.102:84;

    }

    server {

        listen       80;                   # 站點偵聽端口80

        server_name  localhost;            # 站點名稱

     

        location / {

            root   html;

            index  index.html index.htm;

            proxy_pass http://tomcat;      # 負載均衡指向的發佈服務tomcat

        }

  • 注意:
    • upstream部分要放在server { listen 80這部分的前面,不能放到下面去,否則會出錯
    • proxy_pass部分要放在localtion這部分的括號裏面,且http://後面跟的名稱要與上面upstream中同樣
  • 啓動負載均衡服務

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    cd /usr/local/nginx/sbin/

    ./nginx -t # 測試配置有無錯誤

    ./nginx    # 啓動服務

    netstat -tlnp | grep :80  #查看nginx端口的進程號

    kill -9 11274             #殺死nginx的主進程,11274是上面查詢出來的主進程號,實際環境中不必定同樣

     

    # 在線修改配置參數(在nginx啓動的狀況),並讓它從新加載,其間nginx不用中止服務。

    vi nginx.conf

    kill -HUP `cat /usr/local/nginx/logs/nginx.pid`

     

    # 設置Nginx開機自動啓動

    vim /etc/rc.d/init.d/nginx,增長內容

    #chkconfig:35 80 10

    #description:Nginx server

    /usr/local/nginx/sbin/nginx

     

    chmod a+x nginx

    chkconfig --add nginx

    chkconfig nginx on

Tomcat與Apache或Nginx鏈接和集羣配置

Tomcat的鏈接方式

  • 官方文檔參考:http://tomcat.apache.org/tomcat-7.0-doc/connectors.html
  • Tomcat與Web服務器的鏈接方式有兩種:
    • HTTP: HTTP鏈接器是Tomcat默認的方式,而且已經被使用。這種方式具備最低的延遲和最佳的總體性能。對於集羣,須要一個支持粘性會話的web服務器在Tomcat前端。Tomcat支持mod_porxy(被默認包含在Apache HTTP Server 2.2)做爲負載平衡器。值得注意的是,一般狀況下HTTP proxy的性能低於AJP的性能,因此集羣時AJP是優選。
    • AJP: 單個服務器,一個本地WEB服務器和一個Tomcat實例鏈接的效率一般低於單個Tomcat使用其默認的HTTP鏈接的方式,即便web應用大部分都是靜態內容。若是爲了某種緣由,你須要整合一個本地WEB服務器,那麼AJP鏈接將提供更好的效率。對於Tomcat集羣,AJP鏈接是最有效的,其餘功能和HTTP集羣同樣。

Tomcat7所支持的本地鏈接:

  1. JK 1.2 .x
  2. mod_proxy (Apache HTTP Server 2.2默認包含)

其餘AJP鏈接器可能能夠工做,但再也不維護。

Tomcat 與 Apache HTTP Server2.4鏈接

HTTP鏈接

從上面的說明能夠看出,若是你只須要一個Tomcat,那就直接用就行了,不用和Apache HTTP Server鏈接。若是須要多個Tomcat集羣,就是AJP鏈接。因此用HTTP鏈接Apache和Tomcat這種狀況應該很少,簡單說明一下怎麼鏈接: 取消兩個module的註釋:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

在httpd.conf文件中添加如下兩行:

ProxyPass /webappname http://ip:8080/webappname
ProxyPassReverse /webappname http://ip:8080/webappname

ip、端口號和webappname根據實際狀況修改

說明:上述寫法可能有安全隱患。不要使用ProxyRequests啓用代理,除非對代理作了權限控制。不然對你的網絡和互聯網都是很大的危險。默認ProxyRequests爲off。

參考:http://httpd.apache.org/docs/2.4/mod/mod_proxy.html#access

AJP鏈接

AJP鏈接官方支持兩種方式JK 1.2.x和mod_proxy。

JK是老牌鏈接器,被普遍使用和驗證,值得信任,可是配置比較複雜。

mod_proxy是Apache2.2之後的默認設置,配置簡單,可是由於比較新,因此沒有通過大範圍的驗證。

網上JK的文檔比較多,這裏咱們介紹一下mod_proxy的寫法。其實跟HTTP的方式同樣,只是把http://修改成ajp://就能夠了。

取消兩個module的註釋

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

在httpd.conf文件中添加如下行:

ProxyPass /webappname ajp://ip:8009/webappname

ip、端口號和webappname根據實際狀況修改

AJP鏈接一般不須要設置ProxyPassReverse。

參考:http://httpd.apache.org/docs/2.4/mod/mod_proxy_ajp.html

Apache HTTP Server2.4集羣配置

如文章開始所述,Apache Http Server和Tomcat集羣要用AJP方式鏈接

  • modules

一樣集羣能夠用JK和mod_proxy兩種方式,這裏介紹mod_proxy的方式:

取消五個module的註釋

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so

根據負載均衡調度策略的不一樣,取消以下module的註釋

LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
  • 示例配置:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    <Proxy balancer://mycluster>   #定義一個集羣,起個名字

        #定義集羣成員。loadfactor是權重,數值越大權重越大被分配的請求約多。route和Tomcat中配置的jvmRoute一至。

        #還有一些參數能夠添加,好比:max=20 ttl=120 retry=300 timeout=15,詳細參考:http://httpd.apache.org/docs/2.4/mod/mod_proxy.html#proxypass

        BalancerMember ajp://ip:8019 loadfactor=1 route=tomcat7_a

        BalancerMember ajp://ip:8029 loadfactor=2 route=tomcat7_b

        #熱備服務器,只有在上面的BalancerMember都壞掉以後纔會被啓用。

        BalancerMember ajp://ip:8009 status=+H

        #現有3種負載均衡調度策略

        #byrequests:請求計數(Request Counting)

        #bytraffic:流量加權計數(Weighted Traffic Counting)

        #bybusyness:掛起請求計數(Pending Request Counting)

        #默認是byrequests

        ProxySet lbmethod=bytraffic

    </Proxy>

    ProxyPass /examples  balancer://mycluster/examples  #設置代理鏈接

  • 負載均衡器的粘性

當一個請求被代理到某個節點,接下來同一個用戶的請求都將被代理到相同的節點。不少均衡器經過一張記錄客戶端ip和節點的關係表來實現這個特性。這種方式對客戶端和節點都是透明的,可是存在一些問題:若是客戶端藏在某些代理以後將致使負載分佈不均,當客戶端使用動態IP地址,並在請求間變動,將失去粘性,關係表溢出將致使錯誤等問題。

mod_proxy_balancer經過兩種方式實現粘性:cookies和URL encoding。cookie能夠被Apache服務器和節點使用,URL encoding一般在節點中使用。

下面的例子使用mod_headers提供負載均衡粘性,即便節點服務器沒有設置合適的session cookie。

Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
<Proxy balancer://mycluster>
 ......
</Proxy>
ProxyPass /test balancer://mycluster

env變量有6種,參考:http://httpd.apache.org/docs/2.4/mod/mod_proxy_balancer.html#environment

如下配置同時支持cookies和URL encoding

ProxyPass /test balacer://mycluuster stickysession=JSESSIONID|jsessionid scolonpathdelim=On
<Proxy balancer://mycluster>
    BlancerMember http://192.168.1.50:80 route=node1
    BlancerMember http://192.168.1.51:80 route=node2
</Proxy>
  • Log
    LogFormat "%v %h %l %u %t \"%r\" %{Set-Cookie}o %{BALANCER_SESSION_STICKY}e %{BALANCER_SESSION_ROUTE}e %{BALANCER_WORKER_ROUTE}e %>s %b" balance_common
    CustomLog logs/balance_log balance_common

將集羣的日誌寫到Apache服務器目錄下的logs/balance_log文件中。

參考:http://httpd.apache.org/docs/2.4/mod/mod_proxy_balancer.html#stickyness_troubleshooting

  • 均衡器管理界面

須要mod_status。管理頁面能夠動態更新集羣成員,修改平衡器的屬性和特定成員或使之離線。

<Location /balancer-manager>
    SetHandler balancer-manager
    Require ip 192.168
</Location>

你能夠經過http://your.server.name/balancer-manager訪問管理頁面。

注意,只有balancers在<Location ...>以外定義,才能使用管理頁面。

Tomcat 與 Nginx鏈接

HTTP鏈接

1

2

3

4

5

6

7

8

server {                     #添加一個站點

    listen       82;         #設置端口

    server_name  localhost;  #站點名稱/域名

 

    location / {             #設置路徑

        proxy_pass http://ip:8080;  #http代理,指向tomcat http地址

    }

}

在nginx.conf文件中添加一個server{},listen設置端口,server_name設置域名,location設置目錄。

proxy_pass是http代理,指向tomcat地址。

修改後conf後,nginx -s reload就能夠熱更新了,很方便。

AJP鏈接

關於AJP鏈接,有一種說法是Nginx採用鏈接池,因此HTTP方式的鏈接不比AJP方式差。

有人的測試結果是Nginx經過HTTP鏈接Tomcat 性能略強於Apache經過AJP鏈接Tomcat。

參見:http://nginx.2469901.n2.nabble.com/AJP-td7582236.html

Nginx自己並不支持AJP鏈接,但有人寫了一個nginx_ajp_module來支持ajp。因爲是第三方控件,因此請在充分測試後使用。

先到nginx安裝文件的目錄下,打ajp補丁,從新配置configure,編輯,安裝。

  • 配置nginx.conf文件

    1

    2

    3

    4

    5

    6

    7

    8

    9

    server {

        listen       82;

        server_name  localhost;

     

        location / {

            ajp_keep_conn on;       #設置是否保持鏈接

            ajp_pass ajp://ip:8009; #Tomcat ajp鏈接地址和端口

        }

    }

其餘配置詳情參考:https://github.com/yaoweibin/nginx_ajp_module

Nginx集羣配置

HTTP

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

upstream tomcat_http {       #用upstream定義一組服務器

    #ip_hash經過記錄客戶端ip實現粘性session。有一個第三方的module能夠用cookie實現粘性:https://code.google.com/p/nginx-sticky-module/

    ip_hash;

    #經過server定義多個服務器

    #weight是權重,默認爲1。

    #max_fails和fail_timeout配合使用,在fail_timeout時間內通訊失敗達到max_fails的次數後,此服務器在fail_timeout時間內被認爲不可用。

    server 192.168.50.65:8090 weight=2;

    server 192.168.50.65:8091 max_fails=3 fail_timeout=30s;

 

    #keepalive爲鏈接開啓緩存,並設置緩存鏈接的最大數量。

    keepalive 10;

 }

 

 server {

    listen       82;

    server_name  localhost;

 

    location / {

        #將proxy_pass後的服務器地址,變爲upstream的名字

        proxy_pass http://tomcat_http;

    }

}

更多參數說明參考:http://nginx.org/en/docs/http/ngx_http_upstream_module.html

AJP

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

upstream tomcat_ajp {    # upstream定義一組服務器

    #srun_id同Tomcat配置中Engine的jvmRoute。

    server 192.168.50.65:8019 srun_id=tomcat7_a weight=2;

    server 192.168.50.65:8029 srun_id=tomcat7_b;

 

    #用cookie方式實現粘性session

    jvm_route $cookie_JSESSIONID reverse;

    keepalive 10;

}

 

server {

    listen       82;

    server_name  localhost;

 

    location / {

        ajp_keep_conn on;

        ajp_pass tomcat_ajp;  #指定鏈接到哪一個upstream上

    }

}

相關文章
相關標籤/搜索