Apache负载均衡Session共享Tomcat集群

本文详细介绍了如何通过Apache配置负载均衡,实现与Tomcat集群的Session共享。首先,介绍了Apache、Tomcat的安装,然后重点讲述了Apache的mod_jk模块配置,包括mod_jk.conf和workers.properties文件的设置。接着,调整了两个Tomcat实例的端口以避免冲突,并启用SimpleTcpCluster实现集群。最后,通过创建测试应用验证了session的复制与共享功能。

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

准备:

1:Apache,下载后直接安装,安装完成后能够访问本地http://localhost/,代表安装完成。此次使用Apache2.2版本。

2:Tomcat下载后直接安装,安装完成后能够访问本地http://localhost:8080,代表安装完成。此次使用Tomcat6.0版本。

3:JK,Apache/IIS 用来连接后台Tomcat的模块,支持集群和负载均衡。此次使用mod_jk-1.2.31-httpd-2.2.3.so版本。

方法一:-----------------------------------------------------

配置Apache:

1:修改httpd.conf

我的安装路径:E:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf

在最后加上Include conf/mod_jk.conf

2:新建mod_jk.conf

在conf目录下新建mod_jk.conf配置文件,内容如下:

 

# Load mod_jk module
# Update this path to match your modules location
LoadModule jk_module modules/mod_jk-1.2.31-httpd-2.2.3.so
# Where to find workers.properties
# Update this path to match your conf directory location (put workers.properties next to httpd.conf)
JkWorkersFile conf/workers.properties
# Where to put jk shared memory
# Update this path to match your local state directory or logs directory
JkShmFile logs/mod_jk.shm
# Where to put jk logs
# Update this path to match your logs directory location (put mod_jk.log next to access_log)
JkLogFile logs/mod_jk.log
# Set the jk log level [debug/error/info]
JkLogLevel info
# Select the timestamp log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
# Send everything for context /examples to worker named worker1 (ajp13)
JkMount /* controller

 

3:新建workers.properties配置文件,内容如下:

 

#server
worker.list = controller
#========tomcat1========
worker.tomcat1.port=8009
worker.tomcat1.host=172.23.49.131
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor = 1
# Define preferred failover node for tomcat1
#worker.tomcat1.redirect=tomcat2##如果tomcat1宕机,则把请求叫给tomcat2处理
#========tomcat2========
worker.tomcat2.port=9009
worker.tomcat2.host=127.0.0.1
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor = 1
# Disable tomcat2for all requests except failover
#worker.tomcat2.activation=disabled  ##当tomcat1正常工作时,tomcat2”休息“
#========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


4:添加文件

 

将刚才下载的mod_jk-1.2.31-httpd-2.2.3.so复制到E:\Program Files\Apache Software Foundation\Apache2.2\modules目录下。

 

到这里Apache的配置基本完成————————————————————————————————————————

配置Tomcat:

1:将刚才下载的tomcat复制两份apache-tomcat-01,apache-tomcat-02。

假如2个tomcat在同一机器上,我们需要修改部分端口。打开apache-tomcat-02的conf目录下的server.xml。

2:修改tomcat02的shutDown端口为9005,tomcat01保持8005不变。

3:修改tomcat02的Connector端口为9080,tomcat01保持8080不变。

4:修改AJP/1,3的端口为9009,tomcat01保持8009不变。

5:修改<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">标签内容,加上jvmRoute="tomcat1"属性,注:tomcat01和tomcat02都要修改。

 

6:启用<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>标签,注:tomcat01和tomcat02都要启用。

 

到这里Tomcat的配置基本完成————————————————————————————————————————

 

方法二:-----------------------------------------------------

配置Apache:

1:修改httpd.conf

我的安装路径:E:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf

在最后加上:

 

ProxyRequests Off
ProxyPass / balancer://abc/ stickysession=jsessionid nofailover=On
<Proxy balancer://abc/>
       BalancerMember ajp://127.0.0.1:8009 loadfactor=1 route=tomcat1
       BalancerMember ajp://localhost:9009 loadfactor=1 route=tomcat2
</Proxy>

 

 

 

 

 

 

 

配置Tomcat:

同方法一

到这里配置基本完成————————————————————————————————————————

 

测试成果:

在tomcat01和tomcat02的webapps中添分别加文件夹test,在test下添加文件夹WEB-INF和test.jsp,在WEB-INF中添加web.xml配置文件。

web.xml配置文件内容如下:

 

<?xml version="1.0" encoding="ISO-8859-1"?>
<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_5.xsd" version="2.5">
<distributable />
</web-app>

 

 

 

 

 

 

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>"); 
  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="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> 

 

 

 

 

 

到这里测试内容配置基本完成————————————————————————————————————————

访问地址http://127.0.0.1/test/test.jsp,显示页面

 

F5刷新页面后

 

多次刷新页面,其中sessionID为同一个id,说明session已经实现复制。

输入内容查看

 

F5刷新页面

 

可以发现复制session的同时,session中的变量也同时被复制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值