请关注
www.ppst.cc在线视频教程平台
一:软件Software环境
Apache: apache 2.0.55 (由http://httpd.apache.org/进入下载)(点击下载apache 2.0.55)
2. Tomcat: Tomcat 5.5.25 (由http://tomcat.apache.org/进入下载)(点击下载Tomcat 5.5.25 zip版)
3. mod_jk: 在页面 http://tomcat.apache.org/ Download 标题下找到 Tomcat Connectors 链接进入( 点击
下载mod_jk-apache-2.0.55.so)看起来像是个Unix/Linux下动态库实际应是个Win32 DLL 动态库大概是为保
持区别平台配置致性才用了这个扩展名
二:负载均衡
用Apache进行分流把请求按照权重以及当时负荷分tomcat1,tomcat2...去处理
1. 安装apache,tomcat
我把Apache安装在D:\Apache Group\Apache2
解压两分Tomcat, 分别在 D:\Apache Group\Tomcat5_1D:\Apache Group\Tomcat5_2
如果把区别版本Tomcat进行集群目录就可用Tomcat4_3(版本为4.x第 3个tomcat服务器)Tomcat6_4(版本为
6.x第 3个tomcat服务器),这是Unmi本人习惯
2.修改Apache配置文件http.conf
在apache安装目录下conf目录中找到http.conf在文件最后加上下面句话就可以了
conf\mod_jk.conf
3. http.conf 同目录下新建mod_jk.conf文件内容如下
#加载mod_jkModule
LoadModulejk_modulemodules/mod_jk-apache-2.0.55.so
#指定workers.properties文件路径
JkWorkersFileconf/workers.properties
#指定那些请求交给tomcat处理,"controller"为在workers.propertise里指定负载分配控制器
JkMount/*.jspcontroller
#加载mod_jk Module
LoadModule jk_module modules/mod_jk-apache-2.0.55.so
#指定 workers.properties文件路径
JkWorkersFile conf/workers.properties
#指定那些请求交给tomcat处理,"controller"为在workers.propertise里指定负载分配控制器
JkMount /*.jsp controller 如果还要指定*.do也进行分流就再加行
JkMount /*.do controller
如果你想对所有请求进行分流只需要写成
JkMount /* controller
4. 在http.conf同目录下新建 workers.properties文件内容如下(可能要去除 # 不在行首注释)
worker.list=controller,tomcat1,tomcat2#server列表
#tomcat1
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=8109#ajp13端口号在tomcat下server.xml配置,默认8009
worker.tomcat2.host=localhost#tomcat主机地址如不为本机请填写ip地址
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=2#server加权比重值越高分得请求越多
#controller,负载均衡控制器
worker.controller.type=lb
worker.controller.balanced_workers=tomcat1,tomcat2#指定分担请求tomcat
worker.controller.sticky_session=1
worker.list = controller,tomcat1,tomcat2 #server 列表
#tomcat1
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=8109 #ajp13 端口号在tomcat下server.xml配置,默认8009
worker.tomcat2.host=localhost #tomcat主机地址如不为本机请填写ip地址
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor = 2 #server加权比重值越高分得请求越多
#controller,负载均衡控制器
worker.controller.type=lb
worker.controller.balanced_workers=tomcat1,tomcat2 #指定分担请求tomcat
worker.controller.sticky_session=1 5. 修改tomcat配置文件server.xml
如果你是水平集群即在区别电脑上安装tomcat,tomcat安装数量为个可以不必修改tomcat配置文件.我这里是在
同台电脑上安装两个tomcat,实现是垂直集群方式所以必须修改其中个设置以避免端口冲突按照参考文章是把原
来以9开头端口号改为以9开头端口号但是在我机器上如果以9开头端口号例如9080、9082会和我WebSphere
Application Server配置冲突所以我这里采取策略是把原来端口号第 3位改为1如8080改为8180
打开tomcat2/conf/server.xml文件
1) 将关闭Tomcat监听端口改成由8005改为8105
即把
<Server port="8005" shutdown="SHUTDOWN">
改为
<Server port="8105" shutdown="SHUTDOWN">
2) 把http服务端口号由8080改为8180
找到
<!-- Define a non-SSL HTTP/1.1 Connector _disibledevent=>把这里8080改为8180
3) 把AJP端口号由8009改为8109
找到
<!-- Define an AJP 1.3 Connector _disibledevent=>把这里8009改为8109
4) 把 HTTP 代理端口从8082改为8182(这个配置默认是被注释掉可跳过这步)
找到
<CONNECTOR port="8082"
把这里8082改为8182
5) 编写个测试 jsp
建立个目录TestCluster里面新建个test.jsp,内容为
CodeViewCopyPr
<%
.out.prln("=");
%>
<%
.out.prln("=");
%>
把TestCluster放到tomcat1,tomcat2webapps下
6) 启动apache,tomcat1,tomcat2,进行测试
通过 http://localhost/TestCluster/test.jsp 访问多刷新几次页面查看Tomcat1和Tomcat2窗口你将可以看到
打印了行行"="并且从统计上来说大约在tomcat2打印数量是在Tomcat1中两倍可以看到请求会被
tomcat1,tomcat2按照区别权重分流处理,实现了负载均衡
作下面集群配置请在workers.properties把tomcat1和tomcat2权重改为样使请求较平均分配将有便于看到实
验效果
3:配置集群
只配置负载均衡还不行还要session复制也就是说其中任何个tomcat添加session是要同步复制到其它tomcat
集群内tomcat都有相同session
1. 修改tomcat1, tomcat2server.xml,将集群部分配置即对<Cluster>节点在注释符删掉,并将tomcat24001端
口改为4002以避免和tomcat冲突当然如果是两台电脑是不用改端口去掉注释符即可
即取消对如下处
<ClusterName="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
managerClassName=
"org.apache.catalina.cluster.session.DeltaManager"
expireSessionsOnShutdown="false"
............
<ClusterListenerName="org.apache.catalina.cluster.session.ClusterSessionListener"/>
</Cluster>
<Cluster Name="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
managerClassName="org.apache.catalina.cluster.session.DeltaManager"
expireSessionsOnShutdown="false"
............
<ClusterListener Name="org.apache.catalina.cluster.session.ClusterSessionListener"/>
</Cluster>
前后注释标记<!-- -->启用该项配置实现服务器间Session复制
2. 为 Tomcat1和 Tomcat2 增加 jvmRoute(先跳过这步有精力可以试验下)
在 Tomcat1 和 Tomcat2 server.xml 文件找到
<ENGINE name="Catalina" defaultHost="localhost">
分别改为
<ENGINE name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
和
<ENGINE name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">
然而实际我配置时候还不能加jvmRoute属性配置了反而有问题
刷新浏览器窗口总是在某个tomcat控制台输出形如
SessionID:154678FA6D4D0ABD57658B750E7A3532.tomcat1 (在tomcat1窗口)
或者
SessionID:3800571A532AECEA7280F45361861AD4.tomcat2 (在tomcat2窗口)
由控制台打印结果可以看出SessionID在哪个tomcat上产生那么后续该会话请求将总是会这个tomcat来处理
并且注意到SessionID形式比通常情况多了个后缀.tomcat1或.tomcat2还搞不清楚是为什么
配置时请视实际情况而取舍
3. 修改测试项目 TestCluster
修改test.jsp,内容如下
<%@pagecontentType="text/html;char=GBK"%>
<%@pageimport="java.util.*"%>
<html><head><title>ClusterAppTest</title></head>
<body>
<%
.out.prln("SessionID:"+session.getId);
%>
ServerInfo:
<%
out.prln(request.getServerName+":"+request.getServerPort+"<br>");%>
<%
out.prln("<br>ID"+session.getId+"<br>");//如果有新Session属性设置
StringdataName=request.getParameter("dataName");
(dataName!=null&&dataName.length>0){
StringdataValue=request.getParameter("dataValue");
session.Attribute(dataName,dataValue);
}
out.pr("<b>Session列表</b><br>");
Enumeratione=session.getAttributeNames;
while(e.hasMoreElements){
Stringname=(String)e.nextElement;
Stringvalue=session.getAttribute(name).toString;
out.prln(name+"="+value+"<br>");
.out.prln(name+"="+value);
}
%>
<formaction="test.jsp"method="POST">
名称:<inputtype=textsize=20name="dataName">
<br>
数值:<inputtype=textsize=20name="dataValue">
<br>
<inputtype=submit>
</form>
</body>
</html>
<%@ page contentType="text/html; char=GBK" %>
<%@ page import="java.util.*" %>
<html><head><title>Cluster App Test</title></head>
<body>
<%
.out.prln("SessionID:" + session.getId);
%>
Server Info:
<%
out.prln(request.getServerName + " : " + request.getServerPort+"<br>");%>
<%
out.prln("<br> ID " + session.getId+"<br>"); // 如果有新 Session 属性设置
String dataName = request.getParameter("dataName");
(dataName != null && dataName.length > 0) {
String dataValue = request.getParameter("dataValue");
session.Attribute(dataName, dataValue);
}
out.pr("<b>Session 列表</b><br>");
Enumeration e = session.getAttributeNames;
while (e.hasMoreElements) {
String name = (String)e.nextElement;
String value = session.getAttribute(name).toString;
out.prln( name + " = " + value+"<br>");
.out.prln( 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> 4. 配置Session复制
<web-appxmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/webapp_
2_4.xsd"version="2.4">
<display-name>TomcatClusterDemo</display-name>
<distributable/>
<web-app>
<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/webapp_
2_4.xsd" version="2.4">
<display-name>TomcatClusterDemo</display-name>
<distributable/>
<web-app> 也就是在需要集群应用web.xml中加上属性表明该应用可多应用分流处理能进行Session复制
把TestCluster复制到Tomcat1、Tomcat2webapps目录下重启apache,tomcat1,tomcat2
5. 测试Session复制
通过 http://localhost/TestCluster/test.jsp 访问输入名称为 name, 值为 Unmi提交查询多刷新几次浏览器窗
口你将会看到在两个Tomcat窗口都打印出相同SessionID及其中值并且每次刷新后打印结果都样
如果不为应用web.xml加上 同样测试上面那个test.jsp页面每次刷新分流到区别tomcat上都会产生不样
SessionID,在同个tomcat上也是间隔出现区别sessionID
更切身体验是定要自己动手配置遍并仔细观察两个tomcat控制上输出因本文是参考 轻松实现
Apache,Tomcat集群和负载均衡 实战经历该本中有较多贴图
后记:
用 WebSphere Application Server ND 版配置过垂直和水平集群但是自己试验集群环境下应用却不想搬弄这
个庞然大物眼下急于想体验就是 Quartz 如何适应集群环境问题焦点就是:Quartz 定时任务随 Web 应用启动而
Web 应用部署在集群环境中如何保证同时刻只有个同名任务例子在跑
所以会考虑用Apache+Tomcat配置个轻量级WEB应用集群般进行HTTP分流都是使用Apache,包括WAS集群
也是很少用IIS虽然单纯用Tomcatbalancer应用也能配置进行负载分流但那个性能应该好不到哪儿去
用Apache+Tomcat配置Web应用集群就是部署起来麻烦些总是要保持双份应用拷贝WAS集群则不需要不知道
Jboss做WEB应用集群是如何样种情况
好了下面要进行该做事情了,最后也希望能写个工具能完成从下载到安装配置启动停止重启全自动化以及界面人性化。
分享到:
相关推荐
Java 基于 Nginx 的 Tomcat 负载均衡和集群 在本文中,我们将讨论如何使用 Nginx 实现 Tomcat 的负载均衡和集群。这种方法可以解决 Session 共享的问题,并且可以使多台 Tomcat 服务器共享 Session。 首先,需要...
Apache 的 Tomcat 负载均衡和集群 ( linux, centos) jkmod
本篇文章将详细讲解如何使用Nginx作为反向代理服务器来实现对Tomcat应用服务器的负载均衡和集群配置。 首先,我们需要理解Nginx和Tomcat的角色。Nginx是一款高性能的HTTP和反向代理服务器,常用于处理静态内容和...
Apache Tomcat 负载均衡和集群是企业级应用服务器部署中常见的技术,它能够提高系统的可用性、可扩展性和性能。在这个主题中,我们将深入探讨如何通过Apache HTTP Server(通常简称为Apache)配合Tomcat实现负载均衡...
Apache的Tomcat负载均衡与集群配置是Web服务器和应用服务器扩展性能的重要手段,它通过将请求分散到多个服务器上,可以提高系统的响应速度和可用性。在这个过程中,mod_jk模块扮演了关键角色,它是Apache HTTP服务器...
在Linux环境下,构建基于Nginx的Tomcat负载均衡和集群是提高Web应用程序性能和可用性的常见策略。这里我们将深入探讨如何实现这一目标,特别是通过使用cookie来分发请求。 首先,我们需要理解负载均衡的基本概念。...
在高流量或需要高可用性的情况下,单个Tomcat实例可能不足以处理所有的请求,这时就需要实现负载均衡和集群配置。Apache HTTP Server(通常称为Apache)可以通过其模块mod_jk与Tomcat集成,实现这种功能。 首先,...
本教程将探讨如何在Windows环境中利用Nginx作为反向代理服务器,与多个Tomcat实例配合,搭建一个负载均衡和集群的系统。这个压缩包包含多个版本的Tomcat,即qdky-tomcat-6.0.44.6、qdky-tomcat-6.0.44.5、qdks-...
【标题】:“Tomcat均衡负载,...以上知识点是构建Tomcat负载均衡和集群配置的基础,实际操作中还需结合具体环境和需求进行调整。通过阅读提供的文档《Tomcat与Apache的整合1.doc》,可以更深入地学习和实践这些技术。
在配置Apache Tomcat的负载均衡和集群时,可能需要深入理解Tomcat的源码,特别是关于会话管理和集群通信的部分。这有助于定制更符合需求的解决方案。同时,有一些工具可以帮助监控和调试集群,如JConsole、VisualVM...
【标题】:“Tomcat负载均衡集群配置” 在Java Web应用开发中,Tomcat是一个广泛使用的开源Servlet容器。当面临高并发访问或者需要提高系统可用性和容错性时,单个Tomcat服务器可能无法满足需求,这时就需要搭建...
配置Apache+Tomcat负载均衡集群,我们需要以下软件和硬件环境: - **软件**: - JRE(JDK)6u3:用于Java应用程序的运行。 - Tomcat 6.0.14:Web应用服务器。 - Apache 2.2.6:作为负载均衡器。 - mod_jk-2.2.4...
Nginx+Tomcat负载均衡企业实战.docx 本文档主要介绍了 Nginx+Tomcat 负载均衡的企业实战,涵盖了从0开始构建 Nginx WEB 平台、Tomcat WEB 集群、代码发布、Nginx 负载均衡 Tomcat 集群、动静分离、Rewrite 实战等...