apache tomcat集群
今天花了大概两个小时完成了tomcat与apache的集群。现记录一下,也希望能帮助后来者。
建议看这篇博客前,先阅读一下鄙人拙作 tomcat整合apache
看完那个后,再进行集群,就很快了。
和之前 tomcat整合apache中的一样,这次集群用的软件版本如下:
jdk 7 ,tomcat 6.0.44,apache2.2.4,mod_jk的版本是1.2.26。
配置apache
更改apache下的httpd.conf
先把listen 80改成listen 81或者别的,大家都知道,80这个端口经常被占用的。
在最后一行添上
include "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf\mod_jk.conf"
之后 在conf目录下再建立一个mod_jk.conf,写上
LoadModule jk_module modules/mod_jk.so JkWorkersFile conf/workers.properties #指定那些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器名 JkMount /*.jsp controller
如果看完了我之前的那个博客,mod_jk的内容就很容易理解了。
大家看到conf/workers.properties这行代码了,很简单,相对路径conf下建立workers.properties
#server worker.list = controller #========tomcat1======== worker.tomcat1.port=18009 worker.tomcat1.host=localhost worker.tomcat1.type=ajp13 worker.tomcat1.lbfactor = 1 #========tomcat2======== worker.tomcat2.port=28009 worker.tomcat2.host=localhost worker.tomcat2.type=ajp13 worker.tomcat2.lbfactor = 1 #========tomcat3======== worker.tomcat3.port=38009 worker.tomcat3.host=localhost worker.tomcat3.type=ajp13 worker.tomcat3.lbfactor = 1 #========controller,负载均衡控制器======== worker.controller.type=lb worker.controller.balanced_workers=tomcat1,tomcat2,tomcat3 worker.controller.sticky_session=false worker.controller.sticky_session_force=1 #worker.controller.sticky_session=1
OK搞定
lbfactor是干什么的?
如果tomcat1,tomcat2,tomcat3的lbfactor分别是2,5,4那么所有的请求中2/11会分配给tomcat1处理,5/11会给tomcat2....
配置tomcat
修改端口
在这里,我先说明一点,一个tomcat有三个端口#分别是支持http1.1的connector端口,支持ajp1.3的connector端口与tomcat的Server端口#分别如下:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> ....... <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> ....... <Server port="8005" shutdown="SHUTDOWN">
一般情况下,我们改动的都是8080,也就是支持http1.1协议的这端口。
今天的情况是,我们需要在一台机器上,运行三个tomcat,那么这个三个tomcat共9个端口就得全部不一样。
另外,在workers.properties里面的worker.tomcat3.port=38009这个端口也指的是tomcat的ajp端口。
我们有3个tomcat,最好就放到一起吧,如下
首先修改那9个端口号,为了清晰,tomat1的三个端口分别是18080,18009,18005,其余两个类似
修改engine
修改每个tomcat下server.xml中的engine,后面加上jvmRoute="tomcat1",当然tomcat2下的jvmRoute就是tomcat2了,注意这个tomcat1,tomcat2与workers.properties中的那个得对应。
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
加上Cluster
这个,其实不需要重新写,在engine的下面,cluster本来是被注释掉的,去掉注释即可
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
修改web.xml
将一个javaweb项目复制三份,分别放到各个tomcat/webapps下,然后修改每个项目的web.xml
给web-app根目录下加上下面一行,让这个项目支持集群。
<distributable/>
测试
在每个工程的根目录下加上一个jsp(这个jsp来自网络上)
mytest.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.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="mytest.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:81/PathTest/mytest.jsp
刷新几下,添上名称与值 能看到下面的页面:
OK,session在三个tomcat中统一了,集群搞定
几个问题
1 本来有3个tomcat,我们关闭其中一个后,假如是tomcat2,那么之后我们再刷新mytest.jsp的时候,就会发现就只有tomcat1与tomcat3在处理请求了。OK,这是符合我们猜测的。等我们重新启动tomcat2后,再刷新,发现请求还是没有发到tomcat2中#如果我们重新启一个session(就是再开一个浏览器)发现请求在三个tomcat中又能循环处理了#
这说明,tomcat的请求分发机制是:对于某个session,先检查有哪些tomcat可以处理,第一次有三个,那么就用这三个处理;如果某次检查的时候,发现某个tomcat不能用了,那就让session记住它,请求以后就不给那个tomcat了,即使后面这个tomcat又能用了,依旧不给他 说白了,你拒绝我一次,我tm以后都不找你了!但是另起一个session后,两个浏览器就都OK了#可以理解为:"听我姐妹说,你可以,那么就再给你一次机会喽"~~~~
以上为charyle的理解。具体评述见http://www.iteye.com/topic/1017961
2 大家不要忘记,我在PathTest这个项目里,还有几个带图片的jsp,大家看看
http://localhost:81/PathTest/jsp/a.jsp
我们访问,这个地方,找不到图片
怎么办?
把mod_jk改成下面的样子。
LoadModule jk_module modules/mod_jk.so JkWorkersFile conf/workers.properties # 设置虚拟主机,定义端口为81 <VirtualHost 127.0.0.1:81> ServerName 127.0.0.1 DocumentRoot "E:/cluster/tomcat1/webapps" #定义站点项目所在路径,把路径指向 tomcat 中的默认网站目录 DirectoryIndex index.html index.htm index.jsp ErrorLog logs/shsc-error_log.txt #指定那些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器名 JkMount /*.jsp controller </VirtualHost>
关于VirtualHost还有整体的apache的配置,我不是很清楚,总之上面这种配置能解决找不到jpg的问题。
///////////以下是2016-8-16日修改
很惭愧,发现大家用的都是tomcat8或tomcat7,我这还是6,但是也懒得再去升级了
大家看这个博客吧:
http://blog.csdn.net/flyliuweisky547/article/details/21293071
上面的是tomcat8与apache的集群
如果tomcat要把session放到redis里,再看看下面这博客
http://blog.csdn.net/caiwenfeng_for_23/article/details/45666831
///////////以上是2016-8-16日修改
参考资料
http://www.iteye.com/topic/1017961
apache tomcat集群的更多相关文章
- Apache + Tomcat集群配置详解 (1)
一.软件准备 Apache 2.2 : http://httpd.apache.org/download.cgi,下载msi安装程序,选择no ssl版本 Tomcat 6.0 : http://to ...
- (转)Apache+Tomcat集群配置
本文Apache+Tomcat集群配置 基于最新的Apache和Tomcat,具体是2011年4月20日最新的Tomcat和Apache集群和负载均衡配置. 准备环境 Apache Apache是ht ...
- 实战Apache+Tomcat集群和负载均衡
实战Apache+Tomcat集群和负载均衡 目录 1. 什么是J2EE集群... 3 1.1. 序言... 3 1.2. 基本术语... 3 伸缩性(Scalability): ...
- Apache+tomcat集群配置
一.软件准备 Apache 2.2 : http://httpd.apache.org/download.cgi,下载msi安装程序,选择no ssl版本 Tomcat 6.0 : http://to ...
- apache + tomcat 集群
apache2.2与tomcat集成(可以多个tomcat) 需求概况: 有3个服务: localhost:9091, localhost:9190. localhost:9191分别对应3个tomc ...
- Linux+Apache+Tomcat集群配置
参考: http://blog.csdn.net/bluishglc/article/details/6867358# http://andashu.blog.51cto.com/8673810/13 ...
- ngnix apache tomcat集群负载均衡配置
http://w.gdu.me/wiki/Java/tomcat_cluster.html 参考: Tomcat与Apache或Nginx的集群负载均衡设置: http://huangrs.blog. ...
- apache tomcat 集群! (转)
公司需要一个内部测试局域网, 要求可以支持3000并发访问!以前也没做过服务器这方面.临时抱佛脚,查看了N多文档,他人经验,布置好之后,又遇到了N多问题,功夫不负有心人.终于还是完成了要求!观他人的布 ...
- apache tomcat 集群!
公司需要一个内部测试局域网, 要求可以支持3000并发访问!以前也没做过服务器这方面.临时抱佛脚,查看了N多文档,他人经验,布置好之后,又遇到了N多问题,功夫不负有心人.终于还是完成了要求!观他人的布 ...
随机推荐
- Java对象的内存布局以及对象所需内存大小计算详解
1. 内存布局 在HotSpot虚拟机中,对象的内存布局可以分为三部分:对象头(Header). 实例数据(Instance Data)和对齐填充(Padding). 1) 对象头(Header): ...
- Java Web前端到后台常用框架介绍
一.SpringMVC http://blog.csdn.net/evankaka/article/details/45501811 Spring Web MVC是一种基于Java的实现了Web MV ...
- 在做自动化测试之前你需要知道的,转自:http://www.cnblogs.com/fnng/p/3653793.html
什么是自动化测? 做测试好几年了,真正学习和实践自动化测试一年,自我感觉这一个年中收获许多.一直想动笔写一篇文章分享自动化测试实践中的一些经验.终于决定花点时间来做这件事儿. 首先理清自动化测试的概念 ...
- Oracle11g R2创建PASSWORD_VERIFY_FUNCTION对应密码复杂度验证函数步骤
Oracle11g R2创建PASSWORD_VERIFY_FUNCTION对应密码复杂度验证函数步骤 运行测试环境:数据库服务器Oracle Linux 5.8 + Oracle 11g R2数据库 ...
- C++语言编译系统提供的内部数据类型的自动隐式转换
C++语言编译系统提供的内部数据类型的自动隐式转换规则如下: 程序在执行算术运算时,低类型自动隐式转换为高类型. 在函数调用时,将实参值赋给形参,系统隐式的将实参转换为形参的类型,并赋值给形参. 函数 ...
- 解决Setting property 'source' to 'org.eclipse.jst.jee.server的问题
对于这个问题,我相信我的方法已经能帮90%的人解决了! 当你用Eclipse运行web项目的时候,你就会看到控制台出现: WARNING: [SetPropertiesRule]{Server/Ser ...
- SSO 基于CAS实现单点登录 实例解析(二)
本文目录: 概述 演示环境 部署CAS-Server相关的Tomcat 部署CAS-Client相关的Tomcat 测试验证SSO 第一: 本demo在一个机器上实现(三个虚拟主机),来看SSO单点登 ...
- linux的 压缩与解压 命令集
bzip2压缩费时但效果好,而且支持hadoop的hdfs文件切分,gzip不行 bzip2 [-cdz] 文件名 -c :将压缩的过程输出到屏幕 -d :解压缩 -z :压缩 -# :压缩比的参数, ...
- TBschedule入门
tbschedule 淘宝的wiki: http://code.taobao.org/p/tbschedule/wiki/index/ 截取内容如下: 此文档内部包括: 1.设计目标说明 2.主要概念 ...
- 【ShaderToy】基础篇之再谈抗锯齿(antialiasing,AA)
写在前面 在之前的基础篇中,我们讲到了在绘制点线时如何处理边缘的锯齿,也就是使用smoothstep函数.而模糊参数是一些定值,或者是跟屏幕分辨率相关的数值,例如分辨率宽度的5%等等.但这种方法其实是 ...