使用Tomcat的童鞋們注意了。爲了增長tomcat的性能和穩定性,咱們通常採用balance和session同步機制。 下圖列出了咱們經常使用也是最簡單的解決方案。 html
打開httpd.conf文件,取消下面四行的註釋,用以打開代理所需的.so支持模塊。 前端
打開文件conf\extra\httpd-vhosts.conf,能夠看到以下代碼: java
根據須要更改<VirtualHost>節點內的參數。 web
注: 數據庫
這裏的"C:/Program Files/Apache Software Foundation/Apache2.2/docs/dummy-host.leader89"和"C:/Program Files/Apache Software Foundation/Apache2.2/docs/dummy-host2.leader89"爲前面VirtualHost裏的路徑。
保存httpd.conf和httpd-vhosts.conf,而後重啓Apache。
然 後訪問dummy-host.leader89打開的是C:/Program Files/Apache Software Foundation/Apache2.2/docs/dummy-host.leader89目錄,
訪問dummy-host2.leader89的是C:/Program Files/Apache Software Foundation/Apache2.2/docs/dummy-host2.leader89目錄,
實現了單IP多域名多站點的功能。 apache
打開httpd.conf文件,取消下面四行的註釋,用以打開代理所需的.so支持模塊。 瀏覽器
1 #LoadModule proxy_http_module modules/mod_proxy_http.so 2 #LoadModule proxy_connect_module modules/mod_proxy_connect.so 3 #LoadModule proxy_module modules/mod_proxy.so 4 #LoadModule proxy_module modules/mod_proxy_blancer.so
在httpd.conf文件最後添加如下代碼: tomcat
將下載的tomcat壓縮包解壓兩份,分別命名爲tomcat一、tomcat2。修改tomcat2中conf/server.xml中部分端口號(由於我在本機作測試,因此爲了解決端口號被佔用的問題修改tomcat2的端口號,使tomcat1與tomcat2可以同時啓動,實現多服務器;若是有多臺PC服務器可沒必要修改),修改內容以下: 服務器
………… <Server port="9005" shutdown="SHUTDOWN"> #此處修改成9005,避免與tomcat1的8005衝突 ………… ………… <Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> #此處修改成8081,避免與tomcat1的8080衝突 ………… <!-- Define an AJP 1.3 Connector on port 8009 --> <Connector port="9009" protocol="AJP/1.3" redirectPort="8443" /> #此處修改成9009,避免與tomcat1的8009衝突。若是使用的是mod_proxy_blancer方式此處能夠註釋掉,若是使用的是mod_jk方式則此處必須存在 ………… <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> #去掉該行註釋便可實現session複製功能 …………
1)輪詢均衡策略的配置 網絡
ProxyPass / balancer://proxy/ <Proxy balancer://proxy> BalancerMember http://127.0.0.1:8080/ BalancerMember http://127.0.0.1:8081/ </Proxy> 實現負載均衡的原理以下:
假設Apache接收到http://localhost/test請求,因爲該請求知足ProxyPass條件(其URL前綴爲「/"),該請求會 被分發到後臺某一個BalancerMember,譬如,該請求可能會轉發到http://127.0.0.1:8080/進行處理?當第二 個知足條件的URL請求過來時,該請求可能會被分發到另一臺BalancerMember,譬如,可能會轉發到http://127.0.0.1:8081/如此循環反覆,便實現了負載均衡的機制?
2)按權重分配均衡策略的配置
ProxyPass / balancer://proxy/ <Proxy balancer://proxy> BalancerMember http://127.0.0.1:8080/ loadfactor=3 BalancerMember http://127.0.0.1:8081/ loadfactor=1 </Proxy>
參數"loadfactor"表示後臺服務器負載到由Apache發送請求的權值,該值默認爲1,能夠將該值設置爲1到100之間的任何值?以上面 的配置爲例,介紹如何實現按權重分配的負載均衡,現假設Apache收到http://myserver/test 4次這樣的請求,該請求分別被負載到後臺 服務器,則有3次連續的這樣請求被負載到BalancerMember爲http://127.0.0.1:8080/的服務器,有1次這樣的請求被 負載BalancerMember爲http://127.0.0.1:8081/後臺服務器?實現了按照權重連續分配的均衡策略?
3)權重請求響應負載均衡策略的配置
ProxyPass / balancer://proxy/ lbmethod=bytraffic <Proxy balancer://proxy> BalancerMember http://127.0.0.1:8080/ loadfactor=3 BalancerMember http://127.0.0.1:8081/ loadfactor=1 </Proxy>
參數「lbmethod=bytraffic"表示後臺服務器負載請求和響應的字節數,處理字節數的多少是以權值的方式來表示的? 「loadfactor"表示後臺服務器處理負載請求和響應字節數的權值,該值默認爲1,能夠將該值設置在1到100的任何值?根據以上配置是這麼進行均 衡負載的,假設Apache接收到http://myserver/test請求,將請求轉發給後臺服務器,若是BalancerMember爲http://127.0.0.1:8080/後臺服務器負載到這個請求,那麼它處理請求和響應的字節數是BalancerMember爲http://127.0.0.1:8081/服務器的3倍(回想(2)均衡配置,(2)是以請求數做爲權重負載均衡的,(3)是以流量爲權重負載均衡的,這是 最大的區別)?
至此配置以完成
在tomcat1中webapps文件夾下新建test項目文件夾,test目錄下新建以下頁面
<%@ page contentType="text/html; charset=GBK" %> <%@ page import="java.util.*" %> <html><head><title>Cluster App Test</title></head> <body> Server Info: <% 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.println("<b>Session 列表</b><br>"); System.out.println("============================"); 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>
如需session複製功能此步驟爲必須操做
打開項目的WEB-INF下的web.xml在</web-app>內添加<distributable/>標籤,若是沒有則手動創建目錄結構
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <display-name>TomcatDemo</display-name> <distributable/> #通常均放在web-app結束節點上一行 </web-app>
將tomcat1下的test項目複製一份到tomcat2的webapps目錄下
至此全部操做已完成
啓動tomcat一、tomcat二、apache。打開瀏覽器,輸入http://localhost/test/test.jsp回車,刷新幾回便可從tomcat1與tomcat2的控制檯看到負載效果。輸入session便可看到session複製效果