1. 程式人生 > >Apache和Tomcat 配置負載均衡(mod-proxy方式)-無session共享、無粘性session

Apache和Tomcat 配置負載均衡(mod-proxy方式)-無session共享、無粘性session

轉:https://blog.csdn.net/wangjunjun2008/article/details/38268483

mod-proxy方式實現負載均衡是利用了Apache 2.x版本自帶的mod_proxy模組使用代理技術來連線Tomcat;

http_proxy模式基於HTTP協議,要求Tomcat提供HTTP服務,也就是必須啟用TomcatHTTP Connector;

ajp_proxy模式基於AJP協議,要求Tomcat提供AJP服務,也就是必須啟用Tomcat的AJP Connector;

 

Apache2.2版本之後對mod-proxy模組進行了重寫,增強了其功能和穩定性.配置簡單,使用廣泛.

網上也有大量的相關文章.其具體包括http-proxy,ajp-proxy,ftp-proxy等方式.

 

採用mod-proxy的連線方式,Apache需要載入以下模組:

 

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_connect_module modules/mod_proxy_connect.so

LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

LoadModule proxy_http_module modules/mod_proxy_http.so

LoadModule manager_module modules/mod_manager.so

 

下面介紹http-proxy,ajp-proxy兩種最常用的方式.

一、準備工作

1) 軟體準備

Apache 2.2.25http://httpd.apache.org/download.cgi

 

Tomcat 6.0.39http://tomcat.apache.org/download-60.cgi

 

2) 軟體安裝

Windows下安裝Apache,並測試伺服器正常工作;

Linux下安裝 Apache 可參考: http://blog.csdn.net/wangjunjun2008/article/details/38314387;

Tomcat解壓縮,分別命名為tomcat1tomcat2;並啟動tomcat測試其正常工作。

 

二、全域性配置

 

1) 編輯${HTTPD_HOME}/conf/httpd.conf檔案,開啟以下模組,以便讓Apache啟動時自動載入:

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_connect_module modules/mod_proxy_connect.so

LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

LoadModule proxy_http_module modules/mod_proxy_http.so

LoadModule manager_module modules/mod_manager.so

 

2) 編輯${HTTPD_HOME}/conf/httpd.conf檔案,找到<IfModule dir_module>,在DirectoryIndex index.html 後加上 index.jsp; 

這一步只是為了配置完tomcat後能看到小貓首頁,可以不做。

 

3) 分別修改tomcat1和tomcat2的server.xml檔案,修改如下標籤的及,並新增jvmRoute屬性:

tomcat1修改後的內容:

 

<Server port="8010" shutdown="SHUTDOWN">

<Connector port="8080" protocol="HTTP/1.1" ... redirectPort="8443" />

<Connector port="8090" protocol="AJP/1.3" redirectPort="8443" />

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

 

tomcat2修改後的內容:

<Server port="8011" shutdown="SHUTDOWN">

<Connector port="8081" protocol="HTTP/1.1" ... redirectPort="8443" />

<Connector port="8091" protocol="AJP/1.3" redirectPort="8443" />

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

三、負載均衡配置

對於http_proxy方式,配置如下:

ProxyPass / balancer://httpproxy/

<Proxy balancer://httpproxy/>

  BalancerMember http://127.0.0.1:8080/

  BalancerMember http://127.0.0.1:8081/

</Proxy>

#配置負載均衡管理介面;訪問地址為 http://localhost/balancer-manager/

<Location /balancer-manager>

  SetHandler balancer-manager

  order Allow,Deny

  #Deny from All

  Allow from 127.0.0.1

</Location>

 

【說明】

"httpproxy"是叢集名稱(可為任意名稱)

8080,8081分別對應tomcat的http協議埠;

如此,即可實現apache和tomcat基於http_proxy方式的負載均衡.

 

訪問 http://localhost/balancer-manager 開啟如下頁面,

對於ajp_proxy方式,配置如下:

ProxyPass / balancer://ajpproxy/

<Proxy balancer://ajpproxy/>

  BalancerMember ajp://127.0.0.1:8090/

  BalancerMember ajp://127.0.0.1:8091/

</Proxy>

【說明】 8090,8091分別對應tomcat的ajp協議埠;

如此,即可實現apache和tomcat基於ajp_proxy方式的負載均衡.

 

訪問 http://localhost/balancer-manager 開啟如下頁面,

 

 

 

如需具體控制負載均衡中各個節點的負載比例,則將以上配置作如下修改:

 

ProxyPass / balancer://ajpproxy/

 

<Proxy balancer://ajpproxy/>

 

  BalancerMember ajp://127.0.0.1:8090/ loadfactor=1 route=tomcat1

 

  BalancerMember ajp://127.0.0.1:8091/ loadfactor=2 route=tomcat2

 

</Proxy>

 

[說明]

 

loadfactor 是負載因子(取值範圍是1~100),Apache會按照指定數字的比例分發請求(數值越大,處理的請求越多);

 

比如,兩個tomcat的數字都是1,則按1:1的比例分發請求;若是2和1,則按2:1的比例分發請求;

 

"route=tomcat1" 是負載均衡的節點名稱(可為任意名稱,但不可重複);

 

 

 

四、新增測試程式碼

 

分別在tomcat1和tomcat2新增如下程式碼:

 

 

 

${Tomcat_Home}/webapps/下新建test目錄,test目錄下新建test.jsp檔案,檔案內容為:

 

<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.util.*" %> <html> <head> </head> <body> <% out.println("Server IP = " + request.getLocalAddr() + "<br>"); out.println("Server Port = " + request.getLocalPort() + "<br>"); out.println("<br>"); out.println("SessionId = " + session.getId() + "<br>"); out.println("<br>"); 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="test.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和tomcat1,tomcat2,訪問http://localhost/test/test.jsp,

可以看到包括伺服器地址SessionId等資訊在內的頁面,如下圖:

[說明]

此處的SessionId多了”.tomcat0”,說明處理當前請求的伺服器是節點為tomcat0的Tomcat;

 

如果需要向叢集中增加節點,首先需要對新增的Tomcat作類似配置,然後修改${Apache_Home}/conf/httpd.conf 檔案,增加BalancerMember,指向新增的tomcat即可。