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是死是活。


你可能感兴趣的:(apache,tomcat,String,集群,session,webapp)