Apache mod_jk Tomcat集羣

這種方式應該是現在比較成熟的系統解決方案。主要優點是:

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,此處配置了2Tomat服務器,因爲都是遠程的,所以端口不用改。如果一臺機器有多個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是死是活。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章