(一) 環(huán)境說明
- 服務器有4臺醒串,一臺安裝apache,三臺安裝tomcat
- apache2.0.55宠叼、tomcat5.5.15先巴、jk2.0.4、jdk1.5.6或jdk1.4.2
- ip配置:一臺安裝apache的ip為192.168.0.88冒冬,三臺安裝tomcat的服務器ip分別為192.168.0.1/2/4
(二) 安裝過程
- 在三臺要安裝tomcat的服務器上先安裝jdk
- 配置jdk的安裝路徑伸蚯,在環(huán)境變量path中加入jdk的bin路徑,新建環(huán)境變量JAVA_HOME指向jdk的安裝路徑
- 在三臺要安裝tomcat的服務器上分別安裝tomcat简烤,調試三個tomcat到能夠正常啟動
- 分別修改3臺tomcat的server.xml端口為:7080/8888/9999
<Connector port="7080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />
<Connector port="8888" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />
<Connector port="9999" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />
- 分別測試每個tomcat的啟動是否正常
http://192.168.0.1:7080
http://192.168.0.2:8888
http://192.168.0.4:9999
(三) 負載均衡配置過程
- 在那臺要安裝apache的服務器上安裝apache2.0.55,我的安裝路徑為默認C:\Program Files\Apache Group\Apache2
- 安裝后測試apache能否正常啟動剂邮,調試到能夠正常啟動http://192.168.0.88
- 下載jk2.0.4后解壓縮文件
- 將解壓縮后的目錄中的modules目錄中的mod_jk2.so文件復制到apache的安裝目錄下的modules目錄中,我的為C:\Program Files\Apache Group\Apache2\modules
- 修改apache的安裝目錄中的conf目錄的配置文件httpd.conf,在文件中加LoadModule模塊配置信息的最后加上一句LoadModule jk2_module modules/mod_jk2.so
- 分別修改三個tomcat的server.xml横侦,修改內容如下:
將其中的jvmRoute="jvm1"分別修改為jvmRoute="tomcat1"抗斤、jvmRoute="tomcat2"和jvmRoute="tomcat3"
<!-- 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">
-->
- 然后重啟三個tomcat,調試能夠正常啟動
- 在apache的安裝目錄中的conf目錄下創(chuàng)建文件workers2.propertie丈咐,寫入文件內容如下
# Define 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
- 在三個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>
- 重啟apache服務器和三個tomcat服務器,到此負載 均衡已配置完成伤疙。測試負載均衡先測試apache,訪問http://192.168.0.88/jkstatus.jsp辆影,能否正常訪問徒像,并查詢其中的內容,有三個tomcat的相關配置信息和負載說明蛙讥,訪問http://192.168.0.88/TomcatDemo/index.jsp看能夠運行锯蛀,能運行,則已建立負載均衡
(四) tomcat集群配置
- 負載均衡配置的條件下配置tomcat集群
- 分別修改三個tomcat的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>
將集群配置選項的注釋放開即可
- 重啟三個tomcat旁涤,到此tomcat的集群已配置完成
(五) 應用配置
對于要進行負載和集群的的tomcat目錄下的webapps中的應用中的WEB-INF中的web.xml文件要添加如下一句配置 <distributable/>
<?xml version="1.0" encoding="UTF-8"?>
<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>
補充:
因為tomcat的session同步功能需要用到組播翔曲,windows默認情況下是開通組播服務的,但是linux默認情況下并沒有開通劈愚,可以通過指令打開route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0瞳遍,如果需要服務器啟動時即開通組播需在/etc/sysconfig/static-routes文件內加入eht0 net 224.0.0.0 netmask 240.0.0.0。具體組播概念請查閱CCNP相關內容菌羽。