歡迎您光臨本站 註冊首頁

實踐中整理出tomcat集群和負載均衡

←手機掃碼閱讀     火星人 @ 2014-03-10 , reply:0

(一)環境說明

(1)伺服器有4台,一台安裝apache,三台安裝tomcat

(2)apache2.0.55、tomcat5.5.15、jk2.0.4、jdk1.5.6或jdk1.4.2

(3)ip配置,一台安裝apache的ip為192.168.0.88,三台安裝tomcat的伺服器ip分別為192.168.0.1/2/4

(二)安裝過程

(1)在三台要安裝tomcat的伺服器上先安裝jdk

(2)配置jdk的安裝路徑,在環境變數path中加入jdk的bin路徑,新建環境變數JAVA_HOME指向jdk的安裝路徑

(3)在三台要安裝tomcat的伺服器上分別安裝tomcat,調試三個tomcat到能夠正常啟動

(4)tomcat的默認WEB服務埠是8080,默認的模式是單獨服務,我的三個tomcat的WEB服務埠修改為7080/8888/9999

v修改位置為tomcat的安裝目錄下的conf/server.xml

修改前的配置為

<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />

修改後的配置為

<Connector port="7080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />

依次修改每個tomcat的監聽埠(7080/8888/9999)

(5)分別測試每個tomcat的啟動是否正常

http://192.168.0.1:7080
http://192.168.0.2:8888
http://192.168.0.4:9999

(三)負載均衡配置過程

(1)在那台要安裝apache的伺服器上安裝apache2.0.55,我的安裝路徑為默認C:Program FilesApache GroupApache2

(2)安裝后測試apache能否正常啟動,調試到能夠正常啟動http://192.168.0.88

(3)下載jk2.0.4后解壓縮文件

(4)將解壓縮后的目錄中的modules目錄中的mod_jk2.so文件複製到apache的安裝目錄下的modules目錄中,我的為C:Program FilesApache GroupApache2modules

(5)修改apache的安裝目錄中的conf目錄的配置文件httpd.conf,在文件中加LoadModule模塊配置信息的最后加上一句LoadModule jk2_module modules/mod_jk2.so

(6)分別修改三個tomcat的配置文件conf/server.xml,修改內容如下修改前

<!-- An Engine represents the entry point (within Catalina) that processes
every request. The Engine implementation for Tomcat stand alone
analyzes the HTTP headers included with the request, and passes them
on to the appropriate Host (virtual host). -->

<!-- You should set jvmRoute to support load-balancing via AJP ie :
<Engine name="Standalone" defaultHost="localhost" jvmRoute="jvm1">
-->

<!-- Define the top level container in our container hierarchy -->
<Engine name="Catalina" defaultHost="localhost">

修改後

<!-- An Engine represents the entry point (within Catalina) that processes
every request. The Engine implementation for Tomcat stand alone
analyzes the HTTP headers included with the request, and passes them
on to the appropriate Host (virtual host). -->

<!-- You should set jvmRoute to support load-balancing via AJP ie :-->
<Engine name="Standalone" defaultHost="localhost" jvmRoute="tomcat1">


<!-- Define the top level container in our container hierarchy
<Engine name="Catalina" defaultHost="localhost">
-->

將其中的jvmRoute="jvm1"分別修改為jvmRoute="tomcat1"和jvmRoute="tomcat2"和jvmRoute="tomcat3"

(7)然後重啟三個tomcat,調試能夠正常啟動.

(8)在apache的安裝目錄中的conf目錄下創建文件workers2.propertie,寫入文件內容如下

# fine the communication channel
[channel.socket:192.168.0.1:8009]
info=Ajp13 forwarding over socket

配置第一個伺服器tomcatId=tomcat1 #要和tomcat的配置文件server.xml中的jvmRoute="tomcat1"名稱一致debug=0 lb_factor=1 #負載平衡因子,數字越大請求被分配的幾率越高

# Define the communication channel
[channel.socket:192.168.0.2:8009]
info=Ajp13 forwarding over socket
tomcatId=tomcat2
debug=0
lb_factor=1

# Define the communication channel
[channel.socket:192.168.0.4:8009]
info=Ajp13 forwarding over socket
tomcatId=tomcat3
debug=0
lb_factor=1

[status:]
info=Status worker, displays runtime information.

[uri:/jkstatus.jsp]
info=Display status information and checks the config file for changes.
group=status:

[uri:/*]
info=Map the whole webapp
debug=0

(9)在三個tomcat的安裝目錄中的webapps建立相同的應用,我和應用目錄名為TomcatDemo,在三個應用目錄中建立相同 WEB-INF目錄和頁面index.jsp,index.jsp的頁面內容如下

<%@ 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.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>

(10)重啟apache伺服器和三個tomcat伺服器,到此負載 均衡已配置完成.測試負載均衡先測試apache,訪問http://192.168.0.88/jkstatus.jsp能否正常訪問,並查詢其中的內容,有三個tomcat的相關配置信息和負載說明,訪問http://192.168.0.88/TomcatDemo/index.jsp看能夠運行,能運行,則已建立負載均衡.

(四)tomcat集群配置

(1)負載均衡配置的條件下配置tomcat集群

(2)分別修改三個tomcat的配置文件conf/server.xml,修改內容如下修改前

<!--
<Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
managerClassName="org.apache.catalina.cluster.session.DeltaManager"
expireSessionsOnShutdown="false"
useDirtyFlag="true"
notifyListenersOnReplication="true">

<Membership
className="org.apache.catalina.cluster.mcast.McastService"
mcastAddr="228.0.0.4"
mcastPort="45564"
mcastFrequency="500"
mcastDropTime="3000"/>

<Receiver
className="org.apache.catalina.cluster.tcp.ReplicationListener"
tcpListenAddress="auto"
tcpListenPort="4001"
tcpSelectorTimeout="100"
tcpThreadCount="6"/>

<Sender
className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"
replicationMode="pooled"
ackTimeout="5000"/>

<Valve className="org.apache.catalina.cluster.tcp.ReplicationValve"
filter=".*.gif;.*.js;.*.jpg;.*.png;.*.htm;.*.html;.*.css;.*.txt;"/>

<Deployer className="org.apache.catalina.cluster.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>

<ClusterListener className="org.apache.catalina.cluster.session.ClusterSessionListener"/>
</Cluster>
-->

修改後

<!-- modify by whh -->
<Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
managerClassName="org.apache.catalina.cluster.session.DeltaManager"
expireSessionsOnShutdown="false"
useDirtyFlag="true"
notifyListenersOnReplication="true">

<Membership
className="org.apache.catalina.cluster.mcast.McastService"
mcastAddr="228.0.0.4"
mcastPort="45564"
mcastFrequency="500"
mcastDropTime="3000"/>


<Receiver
className="org.apache.catalina.cluster.tcp.ReplicationListener"
tcpListenAddress="auto"
tcpListenPort="4001"
tcpSelectorTimeout="100"
tcpThreadCount="6"/>

<Sender
className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"
replicationMode="pooled"
ackTimeout="5000"/>

<Valve className="org.apache.catalina.cluster.tcp.ReplicationValve"
filter=".*.gif;.*.js;.*.jpg;.*.png;.*.htm;.*.html;.*.css;.*.txt;"/>

<Deployer className="org.apache.catalina.cluster.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>

<ClusterListener className="org.apache.catalina.cluster.session.ClusterSessionListener"/>
</Cluster>
<!-- modify by whh -->

將集群配置選項的註釋放開即可,如上.

(3)重啟三個tomcat.到此tomcat的集群已配置完成.


[火星人 ] 實踐中整理出tomcat集群和負載均衡已經有638次圍觀

http://coctec.com/docs/java/show-post-61786.html