Apache+Tomcat+JK 实现集群、负载均衡

本文介绍如何使用 Apache 和 Tomcat 实现负载均衡与集群配置,包括软件安装步骤、Apache 和 Tomcat 的配置修改、测试项目的创建及最终测试验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Apache+Tomcat+JK 实现集群、负载均衡

1.         软件说明

apache_2.2.10-win32-x86-no_ssl.msi

mod_jk-1.2.27-httpd-2.2.10.so

jakarta-tomcat-5.5.9 

(注: windows xp 系统)

2.           配置

一、             负载均衡

1.       安装 apche,tomcat

http://httpd.apache.org/   下载 Apache

http://tomcat.apache.org/ 下载 Tomcat

http://tomcat.apache.org/download-connectors.cgi 下载 JK

这里使用的都是 windows 下的版本。

安装 Apache Tomcat,

将下载的 mod_jk-1.2.27-httpd-2.2.10.so 文件复制到 apache 安装目录 modules 目录

 

2.       修改 Apache 配置文件

apache 安装目录下 conf 目录中找到 http.conf ,在文件最后加上下面一句:

http.conf

 

# 指定 mod_jk 配置文件的位置

Include conf/mod_jk.conf

 

conf 目录中新建 mod_jk.conf 文件,内容如下:

mod_jk.conf

 

# 加载 mod_jk Module

LoadModule jk_module modules/mod_jk-1.2.27-httpd-2.2.10.so

# 指定 workers.properties 文件路径

JkWorkersFile  conf/workers.properties

# url 请求的配置文件路径

JkMountFile conf/uriworkermap.properties

 

接着在 conf 目录下新建 workers.properties 文件,内容如下:

workers.properties

 

worker.list=controller # server 列表,分发控制器 注意不要放 tomcat 实例

# Tomcat1 实例配置 这里要和 Tomcat 配置文件 service.xml jvmRoute 保持一致  

worker.tomcat1.port=8009 #ajp13 端口号,在 tomcat server.xml 配置 , 默认 8009

worker.tomcat1.host=localhost # tomcat 的主机地址,如不为本机,请填写 ip 地址

worker.tomcat1.type=ajp13

worker.tomcat1.lbfactor = 1 # server 的加权比重,值越高,分得的请求越多

# Tomcat2 实例配置

worker.tomcat2.port=9009

worker.tomcat2.host=localhost

worker.tomcat2.type=ajp13

worker.tomcat2.lbfactor = 1

 

# 负载均衡分发控制器

worker.controller.type=lb

worker.controller.balanced_workers=tomcat1,tomcat2  # 指定分担请求的 tomcat

worker.controller.sticky_session=false  # 关闭 粘性 session( 默认是 true 打开的 )

 

接着在 conf 目录下新建 uriworkermap.properties 文件,内容如下:

uriworkermap.properties

 

# 指定那些请求交给 tomcat 处理 ,"controller" 为在 workers.propertise 里指定的负载分配控制器

/*.jsp=controller

 

 

3.       修改 tomcat 配置文件

修改 tomcat conf 目录下的 server.xml 文件。如果你在不同电脑上安装 tomcat,tomcat

的安装数量为一个,可以不必修改 tomcat 配置文件,我这里是在同一台电脑上安装两

tomcat ,所以需要更改其中一个的设置打开 tomcat2/conf/server.xml 文件:

 

 

 

 

 

4.       编写测试项目 test

test.jsp

 

<%
   System.out.println("===========================");
%>

test 放到 tomcat1,tomcat2 webapps 下的 test 应用中

5.       启动 apache tomcat 进行测试

通过 http://localhost/test/test.jsp   访问,查看 tomcat1 的窗口,可以看到打印了一行

"============" ,再刷新一次, tomcat2 也打印了一条,再刷新,可以看到请求会被 tomcat1,tomcat2 轮流处理 , 实现了负载均衡

 

 

 

二、             配置集群

只配置负载均衡还不行,还要 session 复制,也就是说其中任何一个 tomcat 的添加

session ,是要同步复制到其它 tomcat 集群内的 tomcat 都有相同的 session

 

1.       修改 tomcat1, tomcat2 server.xml

将集群部分配置的在注释符删掉 , 并将 tomcat2 4001 端口改为 4002 ,以避免与

tomcat 冲突,当然,如果是两台电脑,是不用改端口的,去掉注释符即可

 

 

 

 

 

 

Engine 标签中添加 jvmRoute=’tomcat1’ jvmRoute 名称必须和 worker.properties 中的 tomcat 实例名称一致,不然无法实现 session_stricky( 粘性 session) 。同时还要将 apache/conf/workers.properties 文件中 worker.controller.sticky_session=true

 

 

 

2.       修改测试项目 test

修改 test.jsp 内容如下:

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 = 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>

 

然后在 test 新建 WEB-INF 目录, WEB-INF 下新建 web.xml, 内容如下:

web.xml

 

<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>TestDemo</display-name>
       <distributable/>
</web-app>

 

web.xml 配置文件加上 <distributable/> 节点,此配置说明当前 Web 工程处于分布式部署环境。如果不进行这个配置,每次访问页面 tomcat 都会产生一个新的 sessionid

 

3.       测试

test 应用复制到 tomcat1,tomcat2 webapps 下,重启 apache,tomcat1,tomcat2

输入网址 http://localhost/test/test.jsp    ,表单输入 songsp , 值为 test session, 提交查询,        Tomcat1 处理请求。如下图:

 

       Tomcat1 服务关闭。在输入 bbbb,aaaaa 提交,由于 Tomcat1 关闭, Tomcat2 来处理请求,并且 session 同步的。如下图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值