講解tomcat負載均衡的主設置
通過對Apache的安裝和一些負載因子,以及服務器的一些設置問題做了介紹之后,我們對整個操作系統概念有了一個全面的認識。那么現在是時候進行Tomcat負載均衡的配置介紹了。這個才是我們的核心問題。通過不同的服務器集群,它的負載配置難度也不盡相同。
如果僅僅為了配置一個可用的集群,Tomcat的負載均衡配置將會非常簡單。分別打開兩個tomcat的server.xml配置文件,其中一臺可以采用默認的設置,只需要修改兩個地方,而另一個要有較大改動以避免與前一臺沖突。如果兩臺不在同一臺服務器上運行,對于端口就不需做改動。首先是配置關閉端口,找到<Server port="8005" shutdown="SHUTDOWN">,第一臺不變,把第二臺改為9005。
下面配置Connector的端口,找到non-SSL HTTP/1.1 Connector,即tomcat單獨工作時的默認Connector,保留第一臺默認配置,在8080端口偵聽,而把第二臺設置為在9080端口偵聽。往下找到AJP 1.3 Connector,<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />,這是tomcat接收從Apache過來的ajp連接請求時使用的端口,保留第一臺默認設置,把第二臺端口改為9009。第一臺tomcat的server.xml中找到<Engine name="Catalina" defaultHost="localhost">,去掉這段或改為注釋,把上方緊挨的<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">注釋符去掉,對于第二臺,去掉注釋符并把jvm1改為jvm2。
向下找到<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>,去掉注釋,這里的配置是為了可以在集群中的所有tomcat負載均衡節點間共享會話(Session)。如果僅僅為了獲得一個可用的tomcat集群,Cluster只需要這么配置就可以了。
只需要簡單的幾步就配置完成,然后可以測試一下tomcat負載均衡是否配置成功。引用網上的一個測試方法,就是在webapps目錄下新建test目錄,在test目錄下新建test.jsp文件,代碼我稍作改動如下:
- <%@ page contentType="text/html; charset=GBK" %>
- <%@ page import="java.util.*" %>
- <html><head><title>shiyang</title></head>
- <body>
- 服務信息:
- <%
- out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br/>");%>
- <%
- out.println("<br> ID " + session.getId()+"<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><br/>");
- 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 value="提交">
- </form>
- </body>
- </html>
在test目錄下繼續新建WEB-INF目錄和web.xml,在<web-app>節點下加入<distributable />,這一步非常重要,是為了通知tomcat服務器,當前應用需要在集群中的所有節點間實現Session共享。如果tomcat中的所有應用都需要Session共享,也可以把conf/context.xml中的<Context>改為<Context distributable="true">,這樣就不需對所有應用的web.xml再進行單獨配置。測試代碼完成!
先啟動Apache服務,在先后啟動兩臺tomcat,分別點startup.bat批處理。如果一切順利的話,就會啟動成功。再次訪問http://localhost,可以看到小貓頁面。訪問http://localhost/test/test.jsp。可以看到包括服務器地址,端口,session等信息在內的頁面。
然后你可以測試一下容錯功能,關閉一個tomcat,看看服務是否正常,然后重啟tomcat,關掉另一臺tomcat,看看是否也可以繼續提供服務。當然你也可以配置多臺tomcat負載均衡,但是原理都一樣。