- 浏览: 457107 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (229)
- gef (1)
- emf (0)
- rcp (2)
- 杂谈 (3)
- draw2d (2)
- xml (1)
- spring (16)
- osgi (1)
- jsp (6)
- hibernate (8)
- j2se (41)
- oracle (25)
- js (23)
- ognl (1)
- struts2 (2)
- webwork (1)
- prototype (1)
- dwr (3)
- struts (7)
- axis2 (3)
- axis1 (6)
- lucene (9)
- pop3 (1)
- aspectj (1)
- 网络协议 (6)
- bat (6)
- Quartz (5)
- jms (3)
- jndi (7)
- 网络爬虫 (7)
- acegi (1)
- linux (5)
- 缓存 (1)
- mysql (1)
- 在使用Java处理图形应用时,经常有人推荐设置 -Djava.awt.headless=true,具体含义和效果查了一下,记录在这里分享 Headless模式是系统的一种配置模式。在该模式下,系统缺少了显示设备、键盘或鼠标。 Headless模式虽然不是我们愿意见到的,但事实上我们却常常需要在该模式下工作,尤其是服务器端程序开发者。因为服务器(如提供Web服务的主机)往往可能缺少前述设备,但又需要使用他们提供的功能,生成相应的数据,以提供给客户端(如浏览器所在的配有相关的显示设备、键盘和鼠标的主 (1)
最新评论
-
hanmiao:
注释掉的那壹行少了壹個斜线,楼主...
servlet导出excel -
天下无贼:
Thread.Interrupt方法,只是通过扔出异常的方式, ...
Java Thread.interrupt 害人! 中断JAVA线程(zz) -
天下无贼:
呵呵,是你自己写错了。
Java Thread.interrupt 害人! 中断JAVA线程(zz) -
MO_ZHUANG_D:
如果是真的就感激不尽了
Axure RP教程 -
小嘴冰凉:
在开始执行的时候,如果是数据库存储,程序会从数据库中查job信 ...
quartz的持久化
Linux下配置Tomcat群集
[编 写 人] 曹中欣
[文档版本] Ver 1.00
[创建时间] 2006年06月20日
[最后修订] 2006年06月20日
[文档编号]
配置前的准备工作
在配置集群应用前要对集群的配置信息有一个良好的设计,下面就是我们这次配置的集群信息:
在同一网段内的不同机器上配置集群,以下是以2台机器做群集,
机器类型 操作系统 硬件配置 角色 备注
普通PC Linux as 4 IP:10.3.15.85 PORT:9080 Managed Server Pc1
普通PC Linux as 4 IP: 10.3.15.84 PORT:9080 Managed Server Pc2
普通PC Linux as 4 IP: 10.3.15.85 PORT:80 Balancer Server Pc1
1 操作系统
RedHat Linux as4
2 所需软件
Apache 2.0.54 下载地址
http://apache.freelamp.com/httpd/httpd-2.0.54.tar.gz
Tomcat5.5.9 下载地址
http://apache.justdn.org/jakarta/tomcat-5/v5.5.9/bin/jakarta-tomcat-5.5.9.tar.gz
Mod_jk 1.2.14 下载地址
http://apache.justdn.org/jakarta/tomcat-connectors/jk/source/jk-1.2.14/jakarta-tomcat-connectors-1.2.14-src.tar.gz
Jdk 1_5_0_04 下载地址
http://java.sun.com/j2se/1.5.0/download.jsp
备注:下载时将所需软件包文件保存在/usr/local目录下,也可以采用jdk1.4
3 安装步骤
3.1 安装JDK
# cd /usr/local/
# chmod 777 jdk-1_5_0_04-linux-i586-rpm.bin
# ./jdk-1.5.0_04-linux-i586-rpm.bin
# cd /usr/java/
# ln -s /usr/java/jdk-1_5_0_04 /usr/local/java
# vi /etc/profile
#添加如下内容
JAVA_HOME=/usr/local/java/
CLASSPATH=/usr/local/java/lib/dt.jar:/usr/local/java/lib/tools.jar
PATH=/usr/local/java/bin:$PATH
export PATH JAVA_HOME CLASSPATH
3.2 安装Apache
# cd /usr/local/
# tar xvfz httpd-2.0.54.tar.gz
# cd httpd-2.0.54
#./configure—prefix=/usr/local/apache—enable-module=so
# make
# make install
# cd /usr/local/apache/conf
# vi ./httpd.conf
将Listen 80修改为Listen <Your IP>:80
将ServerName修改为ServerName <HOST-NAME>:80
在DirectoryIndex中添加index.jsp
# cd /usr/local/apache/bin/
# ./apachectl configtest
若显示Syntax ok则表明安装成功
#./apachectl start
启动apache服务,访问本机80端口,查看端口是否正常
# ./apachectl stop
关闭服务
备注:prefix定义apache的安装路径
3.3 安装Tomcat
# cd /usr/local/
# tar xvfz jakarta-tomcat-5.5.9.tar.gz
# ln –s /usr/local/jakarta-tomcat-5.5.9 /usr/local/tomcat
# vi /usr/local/tomcat/bin/catalina.sh
JAVA_HOME=/usr/local/java
启动服务后,访问本机8080端口,查看端口是否正常
# /usr/local/tomcat/bin/startup.sh /startup.bat
关闭服务
# /usr/local/tomcat/bin/shutdown.sh /shutdown.bat
3.4 安装JK
#cd /usr/local/
# tar xzvf jakarta-tomcat-connectors-1.2.14-src.tar.gz
#cd jakarta-tomcat-connectors-1.2.14-src/jk/native
#chmod 755 buildconf.sh
#./buildconf.sh
#./configure—with-apxs=/usr/local/apache/bin/apxs
#make
#make install
#cd /usr/local/ jakarta-tomcat-connectors- jk1.2.14-src/jk/native/apache-2.0/
#cp mod_jk.so /usr/local/apache/modules/
4 系统整合
4.1 在文件最末尾加上如下语句
#vi /usr/local/apache/conf/httpd.conf
# Load mod_jk
LoadModule jk_module modules/mod_jk.so
# Configure mod_jk
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel info
JkMount /*.jsp loadbalancer
JkMount /servlet/* loadbalancer
JkMount /application/* loadbalancer
4.2 添加workers.properties
#vi /usr/local/apache/conf/workers.properties
内容如下:
worker.list=loadbalancer
#Define a ‘local_worker’ worker using ajp13
worker.worker1.port=8009
worker.worker1.host=10.3.15.84
worker.worker1.type=ajp13
worker.worker1.lbfactor=1
worker.worker1.local_worker=0
worker.worker1.cachesize=1000
worker.worker1.cache_timeout=600
worker.worker1.socket_keepalive=1
worker.worker1.socket_timeout=0
worker.worker1.reclycle_timeout=300
worker.worker1.retries=3
#Define another ‘local_worker’ worker using ajp13
worker.worker2.port=8009
worker.worker2.host=10.3.15.85
worker.worker2.type=ajp13
worker.worker2.lbfactor=1
worker.worker2.local_worker=1
worker.worker2.cachesize=1000
worker.worker2.cache_timeout=600
worker.worker2.socket_keepalive=1
worker.worker2.socket_timeout=0
worker.worker1.reclycle_timeout=300
worker.worker1.retries=3
#Define the LB worker
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=worker1,worker2
worker.loadbalancer.local_worker_only=1
worker.loadbalancer.sticky_session=true
worker.loadbalancer.sticky_session_force=true
注:以上定义了两个worker,一个为worker1,另一个为worker2,定义了一个负载平衡服务器loadbalancer,其中标蓝色的为重点配置项,相关的详细说明可以看官方的网站文档:http://tomcat.apache.org/connectors-doc/
worker.list=loadbalancer
设定工作的负载平衡器,各Tomcat节点不能加入此列表。
worker.worker1.lbfactor
负载平衡的权重比,如果此权重比越大,则分配到此节点的请求越多,如以上两个节点的权重比为1:1,则为平均分配。
worker.loadbalancer.balance_workers=worker1,worker2
指定此负载平衡器负责的Tomcat应用节点。
worker.loadbalancer.sticky_session=true
此处指定集群是否需要会话复制,如果设为true,则表明为会话粘性,不进行会话复制,当某用户的请求第一次分发到哪台Tomcat后,后继的请求会一直分发到此Tomcat服务器上处理;如果设为false,则表明需求会话复制。
worker.loadbalancer.sticky_session_force=true
如果上面的sticky_session设为true时,建议此处也设为true,此参数表明如果集群中某台Tomcat服务器在多次请求没有响应后,是否将当前的请求,转发到其它Tomcat服务器上处理;此参数在sticky_session=true时,影响比较大,会导致转发到其它Tomcat服务器上的请求,找不到原来的session,所以如果此时请求中有读取session中某些信息的话,就会导致应用的null异常。
4.3 修改server.xml
#vi /usr/local/tomcat/conf/server.xml
在120行左右加入如下语句
<Engine name=”Standalone” defaultHost=”localhost” jvmRoute=”tomcat1”></Engine>
若第二台worker1,将jvmRoute的修改为worker2
并且把下面群集配置释放出来,也就是去掉注释。
<Cluster className=”org.apache.catalina.cluster.tcp.SimpleTcpCluster”
managerClassName=”org.apache.catalina.cluster.session.DeltaManager”
expireSessionsOnShutdown=”false”
useDirtyFlag=”true”>
<Membership
className=”org.apache.catalina.cluster.mcast.McastService”
mcastAddr=”228.0.0.4”
mcastPort=”45564”
mcastFrequency=”500”
mcastDropTime=”3000”/>
<Receiver
className=”org.apache.catalina.cluster.tcp.ReplicationListener”
tcpListenAddress=”10.3.15.85”
tcpListenPort=”4001”
tcpSelectorTimeout=”100”
tcpThreadCount=”6”/>
<Sender
className=”org.apache.catalina.cluster.tcp.ReplicationTransmitter”
replicationMode=”pooled”/>
<Valve className=”org.apache.catalina.cluster.tcp.ReplicationValve”
filter=”.*\.gif;.*\.js;.*\.jpg;.*\.htm;.*\.html;.*\.txt;”/>
<Deployer className=”org.apache.catalina.cluster.deploy.FarmWarDeployer”
tempDir=”/tmp/war-temp/”
deployDir=”/tmp/war-deploy/”
watchDir=”/tmp/war-listen/”
watchEnabled=”false”/>
</Cluster>
至此,系统已经整个完毕
启动apache和tomcat服务
# /usr/local/apache/bin/apachectl start
#/usr/local/tomcat/bin/catalina.sh start
将如下内容添加至/etc/rc.d/rc.local文件末尾,以便系统启动后开启apache,tomcat服务
/usr/local/tomcat/bin/catalina.sh start
/usr/local/apache/bin/apachectl start
5 测试群集
经过以上所有步骤,一个具有2个节点的tomcat群集已经配置完毕,但有时可能不能进行节点间的会话复制,是因为要把所有节点的server.xml中的tcpListenAddress=”auto”改为tcpListenAddress=”10.3.15.85” ,也就是改为真实的ip地址。
如果在启动时,出现如下信息:skipping state transfer. No members active in cluster group. 也需要修改上面的信息。否则,session是不能在多个tomcat间复制session的。
5.1 编写一个简单web应用,包含如下内容:
写一个如下的2个jsp页面。
test.jsp内容如下:
<%@ page contentType=”text/html; charset=GBK” %>
<%@ page import =”com.WorkerBean”%>
<%@ page import=”java.net.*” %>
<html>
<head>
<title>
test
</title>
</head>
<body bgcolor=”#ffffff”>
<%= request.getSession().getId() %>
<%
int i=0;
WorkerBean test = new WorkerBean();
//HttpSession tsession=request.getSession();
test.setWorker_no(request.getSession().getId()+i);
session.setAttribute(“worker_no”,test.getWorker_no());
System.out.println(“OK”);
System.out.println(“session.getAttribute()==”+session.getAttribute(“worker_no”));
out.println(“session.getAttribute()==”+session.getAttribute(“worker_no”)); out.println(“OK”);
%>
<a href=”testResult.jsp”> testResult.jsp</a>
<h1>Tomcat </h1>
</body>
</html>
testResult.jsp内容如下
<%@ page contentType=”text/html; charset=GBK” %>
<%@ page import =”com.WorkerBean”%>
<%@ page import=”java.net.*” %>
<html>
<head>
<title>
test
</title>
</head>
<body bgcolor=”#ffffff”>
<%
System.out.println(“OK”);
System.out.println(“session.getAttribute()==”+session.getAttribute(“worker_no”));
out.println(“OK”); out.println(“session.getAttribute()==”+session.getAttribute(“worker_no”));
%>
<h1>Tomcat </h1>
</body>
</html>
5.2 编写这个jsp调用的javaBean类。
WorkerBean.java
public class WorkerBean implements java.io.Serializable {
String worker_no;
/**
@return返回worker_no。
*/
public String getWorker_no() {
return worker_no;
}
/**
@param worker_no要设置的worker_no。
*/
public void setWorker_no(String worker_no) {
this.worker_no = worker_no;
}
}
注意:这个类一定要实现序列化,是为了把session对象存在这个类中,session是要在群集中复制的,否则session对象不能在群集中复制。
5.3配置web.xml文件
注意:一定要加入<distributable/>,其他的就是和普通的应用一样的。
<?xml version=”1.0” encoding=”UTF-8”?>
<!DOCTYPE web-app PUBLIC “-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN” “http://java.sun.com/dtd/web-app_2_3.dtd”>
<web-app>
<display-name>web</display-name>
<distributable/>
</web-app>
5.4确保server.xml如附录1和附录2所示:略
5.5 发布web应用,把上面的所有文件考到tomcat的webapps/ROOT目录下,覆盖掉原来的文件就可以了。
5.6 测试web应用
启动apache和tomcat1和tomcat2.
在浏览器地址栏中输入 http://10.3.15.85/ 会看到如下页面
在浏览器地址栏中输入http://10.3.15.85/test.jsp 会看到如下页面
点击上面页面中的2.jsp连接,进入如下页面
可以同看控制台的输出发现,2个tomcat轮流的响应请求的。
然后,任意的关掉其中的一台tomcat, 再点击2.jsp ,还是可以得到回应的。说明群集自动接管了出错机器的应用,发现其中的session的值也是相同的,说明session在群集中不同的tomcat之间进行了会话复制。
总结:通过以上测试和其他工具的测试,发现如果用2台机器作tomcat群集,比一台单独得tomcat支持更多的并发,同时可以做到一台出错时,另一台自动接管。但没有2台单独得tomcat支持的并发多。
发表评论
-
java泛型中的上界下界(上限下限) (转)
2013-01-23 18:02 1095java泛型中的super关键字不太常用,也不太好理解,今天又 ... -
Ant中过滤器的使用
2011-12-07 20:06 1002Ant中过滤器的使用 <?xml version=&q ... -
将实体声明和实体引用读入 DOM
2011-06-17 17:10 1295实体是一个声明,指定 ... -
多线程编程 实战篇 (四)
2010-12-07 17:48 1031[线程的中断] 不客气地 ... -
Java Thread.interrupt 害人! 中断JAVA线程(zz)
2010-12-07 17:42 3747程序是很简易的。然而,在编程人员面前,多线程呈现出了一组新的难 ... -
Flex+%2B+LCDS+%2B+Java+入门教程
2010-09-03 16:07 862Flex+LCDS+Java+入门教程 -
Flex完全自学入门手册
2010-09-03 13:08 891http://lichen.blog.51cto.com/69 ... -
java 5 多线程sun教程
2010-05-21 10:43 1199http://gceclub.sun.com.cn/Concu ... -
ibm的nio教程
2010-04-12 18:13 1148ibm的nio教程 -
cas单点登陆
2009-12-17 17:05 838http://blog.csdn.net/DL88250/ar ... -
CAS项目实践
2009-12-17 16:40 1143目的:使用单点登录系 ... -
Tomcat SSL配置大全
2009-12-17 16:13 1134由于配置CAS的单点登陆系统,需要先配置Tomcat的SSL, ... -
Thread.getContextClassLoader() 详解
2009-12-17 12:24 1206答 : 这个问题经常出现在编写框架代码 , 需要动态加载很多类 ... -
Session知识共享
2009-12-09 17:02 961摘要:虽然session机制在 ... -
跨应用程序的session共享
2009-12-09 15:03 2356原创 跨应用程序的session共享 收藏 常常有这样的情况 ... -
HTTP代理如何正确处理Cookie
2009-12-09 14:15 1547大多数的 Web 应用程序 ... -
使用HttpURLConnection类(利用sessionId保持会话
2009-12-09 11:19 5559TestServlet.java package n ... -
使用HttpURLConnection获得重定向地址
2009-12-09 09:37 1798今天跟TiGERTiAN谈到HttpURLConnec ... -
java多线程之 wait(),notify(),notifyAll()
2009-12-01 11:38 951java多线程之 wait(),notify(),notify ... -
Callable 和 Future
2009-12-01 11:28 1711天在书上看到callable和future这个两个东东,以前没 ...
相关推荐
集群技术在IT行业中被广泛应用,特别是在高可用性和负载均衡的需求下。本集群配置教程主要针对Linux操作系统、Apache HTTP Server、Tomcat应用服务器以及mod_jk模块进行深入讲解,旨在帮助你构建一个稳定、高效的...
为了配置Apache和Tomcat群集,你至少需要一台开发服务器。实际生产环境中,可能需要多台服务器以实现真正的群集效果。 **3 软件环境** - **操作系统**: Red Hat Enterprise Linux Server 5.4 - **远程终端工具**: ...
Linux—Nginx-tomcat负载均衡群集 一.实验环境 一台nginx服务器:192.168.88.137 两台tomcat服务器:192.168.88.216 192.168.88.217 一台测试机 二.实验拓扑图 三.具体实验步骤 1)配置两台tomcat服务器...
本文将深入探讨如何在Linux环境下,使用Atang群集软件配合Tomcat构建一个健壮的服务集群。 #### Tomcat Linux配置步骤 1. **下载与解压Tomcat** 首先,访问Tomcat官方网站下载所需版本。本文以Tomcat 6.0为例,...
Linux防护与群集是IT行业中一个重要的领域,它涉及到服务器的安全性和高可用性。下面将分别从各个章节的标题和内容来深入解析这些知识点。 第一章 系统安全及应用:这部分内容可能涵盖Linux系统的安全基础,包括...
总之,Linux环境下Apache+Tomcat+JK的负载均衡和群集配置是一个涉及多个组件集成的过程,需要对Web服务器、应用服务器和连接器的内部工作原理有深入理解。这个过程中,正确配置和调试是成功的关键,同时,随着技术的...
- 在Linux环境下,使用`startup.sh`脚本启动Tomcat服务。 - 使用`service httpd restart`命令重启Apache服务,确保所有配置生效。 6. **测试验证** - 通过浏览器访问`http://172.16.116.1/index.jsp`,检查是否...
【Nginx+Tomcat+Session 高性能群集搭建】是现代Web服务架构中常见的一种方式,尤其在处理高并发、大流量场景时。Nginx以其高性能、轻量级和反向代理能力而备受青睐,而Tomcat作为Java应用服务器,常用于运行Java ...
FineReport 群集配置方案是基于 Linux 平台使用 Apache+Tomcat+JK 实现负载均衡和群集的完整过程。这篇文章将详细介绍从编译、部署到配置的整个过程,并解决了在实现过程中遇到的问题。 Apache 服务器是在 Linux ...
为了实现高可用性,Nginx和Tomcat都需要配置为热备或负载均衡群集。Nginx可以监控后端服务器的状态,当检测到某个Tomcat实例故障时,会自动停止向该实例发送请求,转而将流量导向其他健康的服务器。此外,Tomcat可以...
本指南将深入探讨如何对Apache+Tomcat+Linux环境进行优化,以提升服务器性能、减少资源消耗并增强稳定性。 一、Apache优化 1. **配置优化**:调整Apache的配置文件`httpd.conf`,例如,减少`KeepAliveTimeout`以...
- 对于高可用性和负载均衡,Tomcat支持集群配置,通过`cluster`元素在`server.xml`中设置,配合网络负载均衡器或应用服务器群集软件实现。 10. **SSL配置**: - 若要启用HTTPS,需要在`conf/server.xml`的`...
在进行Red Hat Enterprise Linux 6.1 (RHEL 6.1) 高可用性(HA)集群的安装之前,首先需要准备必要的软件包,并确保所有节点上都安装了相同的版本。 **步骤1:创建CDROM加载目录** 在每台服务器上创建用于挂载安装...
Nginx的实时升级特性使得在不中断服务的情况下保持系统更新成为可能。 LVS(Linux Virtual Server)被用于实现更高层次的负载均衡。LVS使用直接路由模式,当接收到代理服务器的请求时,直接将响应返回给客户端,...
即群集节点,可以是Oracle的Real Application Clusters (RAC)、Linux的Load Balancing Across Multiple Servers (LVS)、Veritas的Volume Manager with High Availability Services (VCS)、IBM AIX的High ...
基于XML文本通信协议,客户端可以方便应用于各种环境平台和硬件平台,如Windows、Linux,PDA等开发应用环境中。 完善的通讯协议, 通讯协议跟传输层无关, 目前CWSS支持TCP, UDP和HTTP(POST)三种传输访问; c. SOTP...
CWSS提供了一个集成的C++通用通讯平台,其功能与Java下的Web服务器(如Tomcat、JBoss)相似,能够统一管理SOCKET通信、线程池管理和调用管理,极大地简化了C++网络应用的开发与部署过程。此外,CWSS还可以注册为NT...
基于XML文本通信协议,客户端可以方便应用于各种环境平台和硬件平台,如Windows、Linux,PDA等开发应用环境中。 完善的通讯协议, 通讯协议跟传输层无关, 目前CWSS支持TCP, UDP和HTTP(POST)三种传输访问; c. SOTP...
基于XML文本通信协议,客户端可以方便应用于各种环境平台和硬件平台,如Windows、Linux,PDA等开发应用环境中。 完善的通讯协议, 通讯协议跟传输层无关, 目前CWSS支持TCP, UDP和HTTP(POST)三种传输访问; c. SOTP...