Apache+modjk布置tomcat集群
一、版本:
Apache: 2.2.14;
下载地址:http://archive.apache.org/dist/httpd/binaries/win32/
Mod_jk:tomcat-connectors-1.2.37-windows-i386-httpd-2.2.x;
下载地址:http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/windows/
下载时注意文件名后面的”httpdx.x.x”中的版本号要与apache的版本能对上,否则会因为版本不对导致Apache启动不起来的问题;
Tomcat: 7.0.82
JDK1.7
二、Apache配置:
1、mod_jk.so到Apache安装目录下的modules文件夹下;
2、修改httpd.conf配置文件:
在这个文件的最后增加一行:
include "C:/Cluster/Apache2.2/conf/mod_jk.conf"
3、新增配置文件mod_jk.conf:
文件中输入内容:
#加载mod_jk Module
LoadModule jk_module C:/Cluster/Apache2.2/modules/mod_jk.so
#指定 workers.properties文件路径
JkWorkersFile C:/Cluster/Apache2.2/conf/workers.properties
#指定哪些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器名
JkMount /* controller
4、新增配置文件workers.properties:
文件中输入内容:
#server 列表
worker.list=controller,tomcat1,tomcat2
#========tomcat1========
worker.tomcat1.port=8009
worker.tomcat1.host=192.168.1.110
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=1
worker.tomcat1.socket_timeout=10
worker.tomcat1.socket_keepalive=True
worker.tomcat1.ping_mode=I
worker.tomcat1.ping_timeout=10000
#========tomcat2========
worker.tomcat2.port=8009
worker.tomcat2.host=192.168.1.111
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1
worker.tomcat2.socket_timeout=10
worker.tomcat2.socket_keepalive=True
worker.tomcat2.ping_mode=I
worker.tomcat2.ping_timeout=10000
#========controller,负载均衡控制器========
worker.controller.type=lb
#指定此负载平衡器负责的Tomcat应用节点。
worker.controller.balanced_workers=tomcat1,tomcat2
#指定分担请求的tomcat
worker.controller.sticky_session=0
#设为false,则表明需求会话复制。
worker.controller.sticky_session_force=0
上面配置的tomcat1.host, tomcat1.port, tomcat2.host, tomcat2.port分别填写集群的tomcat服务器的ip地址和端口号(端口号要填写ajp协议的端口号);
三、Tomcat配置:
1、安装JDK1.7并配置环境变量JAVA_HOME, JRE_HOME;
2、分别在要集群的服务器上安装tomcat7;
3、修改Server.xml文件:
修改
为:
对于tomcat2也是同样的修改jvmRoute为tomcat2,其他tomcat依次类推;
增加一行:
如果几个tomcat布置在一台机器上,由于端口冲突不能启动,需要修改启动端口,需要修改的地方有:
4、依次启动tomcat的bin目录下的startup.bat文件(linux下启动startup.sh文件)来启动tomcat;
5、在浏览器中打开:http://ip:port 来测试tomcat启动是否正常;
四、测试:
1、新建一个测试的web工程,在web.xml文件中增加一行:
<distributable/>
2、建立测试页面文件index.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);
}
%>
</body>
</html>
3、启动Apache,在浏览器中打开:http://localhost:80/test/index.jsp,可以看到Apache会把请求负载到tomcat1和tomcat2上,但是session一直没有改变,说明session在两个tomcat之间进行了同步;
五、Linux上的配置:
实际测试中,按照上面的配置时,在单台win7机器上布置了两个tomcat时是能正常负载和session复制,在两台windows的机器上分别布置tomcat时,负载和session复制也是没问题的,但是分别在两台ubuntu的机器上布置tomcat时,能正常负载,但是session没有复制,每次点击提交按钮刷新页面时会切换tomcat,session都会改变,网上搜索过原因,说时两台机器的时间和时区不同导致的,统一修改了两台机器的时区和时间后仍然不行;
后来在tomcat的配置文件Server.xml中增加集群配置并指定Receiver的ip为本机的ip时,session正确复制了,增加的配置信息如下:
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="192.168.1.110" port="4000" autoBind="100" selectorTimeout="5000" maxThreads="50"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/>
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
其中的
其中的address修改为当前tomcat运行机器的ip地址即可;
修改完后重启tomcat即可;
配置说明:
1、Manager用来在节点间拷贝Session,默认使用DeltaManager,DeltaManager采用的一种all-to-all的工作方式,即集群中的节点会把Session数据向所有其他节点拷贝,而不管其他节点是否部署了当前应用。当集群中的节点数量很多并且部署着不同应用时,可以使用BackupManager,BackManager仅向部署了当前应用的节点拷贝Session。但是到目前为止BackupManager并未经过大规模测试,可靠性不及DeltaManager。
2、Membership用于发现集群中的其他节点,这里的address用的是组播地址使用同一个组播地址和端口的多个节点同属一个子集群,因此通过自定义组播地址和端口就可将一个大的tomcat集群分成多个子集群。
3、receiver用于各个节点接收其他节点发送的数据,在默认配置下tomcat会从4000-4100间依次选取一个可用的端口进行接收,自定义配置时,如果多个tomcat节点在一台物理服务器上注意要使用不同的端口。
4、Sender用于向其他节点发送数据,具体实现通过Transport配置。
5、Channel 是一个抽象的端口,和socket类似,集群member通过它收发信息。
6、Valve用于在节点向客户端响应前进行检测或进行某些操作,ReplicationValve就是用于检测当前的响应是否涉及Session数据的更新,如果是则启动Session拷贝操作,filter用于过滤请求,如客户端对图片,css,js的请求就不会涉及Session,因此不需检测,默认状态下不进行过滤,监测所有的响应。
Apache+modjk布置tomcat集群的更多相关文章
- Apache+modproxy布置tomcat集群
一.环境: Apache: 2.2.14: 下载地址:http://archive.apache.org/dist/httpd/binaries/win32/ Tomcat: 7.0.82 JDK1. ...
- apache server和tomcat集群配置三:水平集群下的tomcat集群配置
在jsp文件中加入以下代码,用来测试是否共享session: SessionID: <%= session.getId() %> 之前尝试在linux中,但是因为模拟环境是虚拟机,虚拟机只 ...
- apache server和tomcat集群配置二:垂直负载
垂直负载就是同一个机器中的不同服务器之间的负载.跟水平负载(ip不一样的服务器之间的负载)的最大区别就是要修改tomcat的端口号,避免引起冲突. 还要注意apache中workers.propert ...
- apache server和tomcat集群配置一:水平负载
下载apache server,最新链接http://archive.apache.org/dist/httpd/binaries/win32 当前实验版本2.2.4 下载apache tomca ...
- apache tomcat 集群! (转)
公司需要一个内部测试局域网, 要求可以支持3000并发访问!以前也没做过服务器这方面.临时抱佛脚,查看了N多文档,他人经验,布置好之后,又遇到了N多问题,功夫不负有心人.终于还是完成了要求!观他人的布 ...
- apache tomcat 集群!
公司需要一个内部测试局域网, 要求可以支持3000并发访问!以前也没做过服务器这方面.临时抱佛脚,查看了N多文档,他人经验,布置好之后,又遇到了N多问题,功夫不负有心人.终于还是完成了要求!观他人的布 ...
- Linux+Apache+Tomcat集群配置
参考: http://blog.csdn.net/bluishglc/article/details/6867358# http://andashu.blog.51cto.com/8673810/13 ...
- window xp Apache与Tomcat集群配置--转载
转载地址:http://www.cnblogs.com/obullxl/archive/2011/06/09/apache-tomcat-cluster-config.html 一. 环境说明 Win ...
- Apache+tomcat集群配置
一.软件准备 Apache 2.2 : http://httpd.apache.org/download.cgi,下载msi安装程序,选择no ssl版本 Tomcat 6.0 : http://to ...
随机推荐
- 『科学计算』通过代码理解SoftMax多分类
SoftMax实际上是Logistic的推广,当分类数为2的时候会退化为Logistic分类 其计算公式和损失函数如下, 梯度如下, 1{条件} 表示True为1,False为0,在下图中亦即对于每个 ...
- 『cs231n』RNN之理解LSTM网络
概述 LSTM是RNN的增强版,1.RNN能完成的工作LSTM也都能胜任且有更好的效果:2.LSTM解决了RNN梯度消失或爆炸的问题,进而可以具有比RNN更为长时的记忆能力.LSTM网络比较复杂,而恰 ...
- python-day7-数字类型的内置方法
#=====>part1:数字类型#掌握:int,float#了解:Long(在python2中才有),complex# num=10# num=int(10)# print(type(num) ...
- n阶汉诺塔 记住吧。。
#include "bits/stdc++.h" using namespace std; int c; void move(char a,int n,char b) { prin ...
- WinForm下的TabControl控件
一.TabControl控件介绍 TabControl实现的具体效果: 在实际工作中,我是这么用TabControl控件,实现切换页面效果.比如要实现某个界面进行操作,然后还要查看一下日志,就可以使用 ...
- 部署docker-registry私有仓库
部署docker-registry私有仓库 创建文件夹 sudo mkdir -p /var/docker-data/{registry,certs,auth} sudo openssl req ...
- JavaScript学习总结(二)——逻辑Not运算符详解
在JavaScript 中,逻辑NOT运算符与C和Java中的逻辑 NOT 运算符相同,都由感叹号(!)表示.与逻辑 OR 和逻辑 AND 运算符不同的是,逻辑 NOT 运算符返回的一定是 Boole ...
- jsp jsp标签
JSP标签页称为Jsp Action(JSP动作元素),用于在Jsp页面中提供业务逻辑功能,避免在Jsp页面中直接编写java代码,造成jsp页面难以维护. jsp常用标签 jsp:include标签 ...
- learning shell script prompt to run with superuser privileges (4)
Shell script prompt to run with superuser privileges [Purpose] Check whether have root privil ...
- (C#基础)创建文件,文件夹
文件夹,文件这是常见的,怎么创建?要不要先判断是否存在?非常非常基础的知识点. 代码 using System; using System.Collections.Generic; using Sys ...