首页 > 代码库 > tomcat集群

tomcat集群

通过Apache和JK插件实现tomcat负载均衡的集群。

1、安装HTTP服务器Apache。下载双击安装httpd-2.2.25-win32-x86-openssl-0.9.8y.msi,安装后访问localhost即可看到安装成功。

2、下载mod_jk.so(tomcat的插件提供和Apache等HTTP服务的链接)放到Apache安装目录的modules文件夹下。

3、修改conf下的httpd.conf文件,加上一下内容,

     #加载jk模块  

     LoadModule jk_module modules/mod_jk.so


     #设置jk的配置文件 

     JkWorkersFile conf/workers.properties

 

  #配置JK的日志输出文件 

     JkLogFile logs/mod_jk.log
     JkLogLevel debug

 

     #配置负载均衡器处理那些内容
     JkMount  /*.do loadbalancer
     JkMount  /*.jsp loadbalancer

4、在conf目录下新建JK的工作配置文件workers.properties内容如下:

  #server
  worker.list = controller
  #========tomcat1========  
  worker.tomcat1.port=11009
  worker.tomcat1.host=localhost(如果不是同一台主机,写相应iP地址)
  worker.tomcat1.type=ajp13
  worker.tomcat1.lbfactor = 1
  #========tomcat2========
  worker.tomcat2.port=12009
  worker.tomcat2.host=localhost
  worker.tomcat2.type=ajp13
  worker.tomcat2.lbfactor = 1
  #========controller,负载均衡控制器========
  worker.controller.type=lb
  worker.controller.balanced_workers=tomcat1,tomcat2
  worker.controller.sticky_session=false
  worker.controller.sticky_session_force=1
  #worker.controller.sticky_session=1

5、安装tomcat,并复制成两份,修改tomcat配置如下。

  1)打开AJP协议配置的注解,修改tomcat1和tomcat2端口与tomcat标示与workers.properties中的配置一致

  <Connector port="11009" protocol="AJP/1.3" redirectPort="8443" />

  <Engine name="Catalina" defaultHost="localhost" jvmRoute="worker1">

  2)打开tomcat集群配置的注释:

  <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

  3)修改HTTP协议链接的端口和服务的端口,保证两个tomcat的端口不一致否侧端口占用无法启动

   <Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

  <Server port="9005" shutdown="SHUTDOWN">

  4)修改tomcat下centext.xml配置文件中的属性:

  <Context distributable="true">

6、配置成功进行测试。

  在tomcat 的\webapps\ROOT下放入test.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 = http://www.mamicode.com/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 = http://www.mamicode.com/session.getAttribute(name).toString();
     out.println( name + " = " + value+"<br>");
         System.out.println( name + " = " + value);
   }
%>
  <form action="test.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>

7、分别启动两个tomcat,测试是否成功启动。访问localhost/test.jsp

可以看到如下效果:

 

刷新页面发现访问的tomcat变成了worker1但是session的id没有变,说明两个tomcat完成了session的复制。

还可以添加session的值,发现两个tomcat的session的值得到了共享。配置成功。

 

tomcat集群