這種方式應該是現在比較成熟的系統解決方案。主要優點是:
1.方便的實現集羣session同步;
2.方便水平擴展,後面加的Tomcat只要改兩個配置文件就可以了;
分別安裝apache、tomcat和mod_jk三個東東。
apt-get install tomcat6
apt-get install apache2
apt-get install libapache2-mod-jk
安裝完成後,在 /etc/apache2/mods-available 下面有個jk.load,於是我們在這裏新建jk.conf文件,文件內容是:
# 加載mod,可以不寫,apache會自動加載
# LoadModule jk_module modules/mod_jk.so
JkWorkersFile /etc/apache2/workers.properties
# JkLogFile /var/log/apache2/mod_jk.log
# 指定那些請求交給tomcat處理,"controller"爲在workers.propertise裏指定的負載分配控制器名
JkMount /* controller
JkMount /jkstatus status
# 指定日誌級別,默認的日誌級別會讓你的log文件很快變大
JkLogLevel error
然後新增 /etc/apache2/workers.properties 配置文件,內容如下:
#server
worker.list = controller
#========tomcat1========
worker.tomcat1.port=8009
worker.tomcat1.host=192.168.1.1
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor = 1
#========tomcat2========
worker.tomcat2.port=8009
worker.tomcat2.host=192.168.1.2
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor = 1
#========controller,負載均衡控制器========
worker.controller.type=lb
worker.controller.balance_workers=tomcat1,tomcat2
worker.controller.sticky_session=1
#======== Define a 'jkstatus' worker using status ========
worker.list = status
worker.status.type=status
這裏可以配置任意多個Tomcat,此處配置了2個Tomat服務器,因爲都是遠程的,所以端口不用改。如果一臺機器有多個Tomcat,那麼端口要改成不一樣的。
然後開始配置Tomcat,修改/etc/tomcat6/server.xml
<Connectorport="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost"jvmRoute="tomcat1">
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
注意這三個地方就可以了。
另外一個Tomcat也一樣修改,改完記得重啓Tomcat。
然後重啓Apache:
service apache2 restart
這個時候理論上已經配置完成了,然後我們搞個測試頁面test.jsp放到Tomcat的webapp下面:
<%@ 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="test2.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>
這個文件是網上找的,不解釋了。
此時,在瀏覽器裏面輸入http://localhost/test.jsp 應該能看到多次刷新頁面的sessionID看是同一個ID,說明session是複製成功了。
接來下是監控Apache和各臺tomcat的運行情況:
命令行輸入:a2enmod
info
然後在瀏覽器中輸入http://localhost/server-status 就可以看到系統處理信息
然後是監控多臺tomcat的運行情況,可以用jkstatus來解決這個問題。
我們在之前的jk.conf和workers.properties已經配置過了,所以可以直接請求 http://localhost/jkstatus 查看集羣內的tomcat是死是活。