- 浏览: 264293 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (88)
- JAVA / base (26)
- JAVA / web (12)
- JAVA / Lib-tools (5)
- SERVER / tomcat (4)
- DB / mysql (4)
- DB / mongodb (2)
- DB / memcached (2)
- DB / redis (2)
- WEB / Front-end (3)
- WEB / security (4)
- WEB / css (2)
- WEB / js (4)
- OS / linux (3)
- IT / Architecture (4)
- IT / other (2)
- Android (9)
- Go (1)
- Other (1)
- OS / Mac (2)
最新评论
-
Zero2Max:
哈哈,马士兵老师也发现了。
java实现接口的bug -
xly1981:
能像CSRF攻击一样带个图就更棒了
XSS跨站攻击 -
xmong:
df274119386 写道在javascript中看到下面的 ...
CSRF攻击与防御策略 -
df274119386:
在javascript中看到下面的语句 e.value = t ...
CSRF攻击与防御策略 -
xmong:
<div class="quote_title ...
Tomcat集群
TOMCAT集群
目录
TOMCAT集群 1
1 集群 1
1.1 什么是集群 1
1.2 集群的特性 1
1.3 集群的分类 1
1.4 TOMCAT集群配置的优缺点 2
1.5 APACHE+TOMCAT 2
1.6 环境说明 2
2 软件安装 3
2.1 安装说明 3
2.2 JDK安装 3
2.3 APACHE安装 4
2.4 TOMCAT安装 4
3 集群配置 6
3.1 APACHE+MOD_JK+TOMCAT配置 6
3.2 测试 7
4 SESSION复制 8
4.1 SESSION复制配置 8
4.2 测试 10
1 集群
1.1 什么是集群
集群是一组协同工作的服务实体,用以提供比单一服务实体更具扩展性与可用性的服务平台。在客户端看来,一个集群就象是一个服务实体,但 事实上集群由一组服务实体组成。
1.2 集群的特性
与单一服务实体相比较,集群提供了以下两个关键特性:
1,可扩展性--集群的性能不限于单一的服务实体,新的服 务实体可以动态地加入到集群,从而增强集群的性能。
2, 高可用性--集群通过服务实体冗余使客户端免于轻易遇到out of service的警告。在集群中,同样的服务可以由多个服务实体提供。如果一个服务实体失败了,另一个服务实体会接管失败的服务实体。集群提供的从一个出 错的服务实体恢复到另一个服务实体的功能增强了应用的可用性。
为了具有可扩展性和高可用性特点,集群的必须具备以下两大能力:
(1) 负 载均衡--负载均衡能把任务比较均衡地分布到集群环境下的计算和网络资源。
(2) 错误恢复--由于某种原因,执行某个任务的资源出现故障,另一服 务实体中执行同一任务的资源接着完成任务。这种由于一个实体中的资源不能工作,另一个实体中的资源透明的继续完成任务的过程叫错误恢复。
负载均衡 和错误恢复都要求各服务实体中有执行同一任务的资源存在,而且对于同一任务的各个资源来说,执行任务所需的信息视图(信息上下文)必须是一样的。
1.3 集群的分类
集群主要分成三大类:高可用集群(High Availability Cluster/HA), 负载均衡集群(Load Balance Cluster),高性能计算集群(High Performance Computing Cluster/HPC)
(1) 高可用集群(High Availability Cluster/HA):一般是指当集群中有某个节点失效的情况下,其上的任务会自动转移到其他正常的节点上。还指可以将集群中的某节点进行离线维护再上线,该过程并不影响整个集群的运行。常见的就是2个节点做 成的HA集群,有很多通俗的不科学的名称,比如"双机热备", "双机互备", "双机",高可用集群解决的是保障用户的应用程序持续对外提供服 务的能力。
(2) 负载均衡集群(Load Balance Cluster):负载均衡集群运行时一般通过一个或者多个前端负载均衡器将工作负载分发到后端的一组服务器上,从而达到将工作负载分发。这样的计算机集群有时也被称为服务器群(Server Farm)。一般web服务器集群、数据库集群 和应用服务器集群都属于这种类型。这种集群可以在接到请求时,检查接受请求较少,不繁忙的服务器,并把请求转到这些服务器 上。从检查其他服务器状态这一点上 看,负载均衡和容错集群很接近,不同之处是数量上更多。
(3) 高性能计算集群(High Performance Computing Cluster/HPC):高性能计算集群采用将计算任务分配到集群的不同计算节点而提高计算能力,因而主要应用在科学计算领域。这类集群致力于提供单个计算机所不能提供的强大的计算能力
1.4 Tomcat集群配置的优缺点
通常配置tomcat集群有三种方式:使用DNS轮询,使用apache r-proxy代理方式,使用apache mod_jk方式。
(1)DNS轮询的缺点:当集群中某台服务器停止之后,用户由于dns缓存的缘故,便无法访问服务,必 须等到dns解析更新,或者这台服务器重新启动。还有就是必须把集群中的所有服务端口暴露给外界,没有用apache做前置代理的方式安全,并 且占用大量公网IP地址,而且tomcat还要负责处理静态网页资源,影响效率。优点是集群配置最简单,dns设置也非常简单。
(2)R- proxy的缺点:当其中一台tomcat停止运行的时候,apache仍然会转发请求过去,导致502网关错误。但是只要服务器再启动就不存 在这个问题。
(3)mod_jk方式的优点是,Apache 会自动检测到停止掉的tomcat,然后不再发请求过去。缺点就是,当停 止掉的tomcat服务器再次启动的时候,Apache检测不到,仍然不会转发请求过去。
R-proxy和mod_jk的共同优点是.可 以只将Apache置于公网,节省公网IP地址资源。可以通过设置来实现Apache专门负责处理静态网页,让Tomcat专门负责处理jsp和 servlet等动态请求。共同缺点是:如果前置Apache代理服务器停止运行,所有集群服务将无法对外提供。R-proxy和 mod_jk对静态页面请求的处理,都可以通设置来选取一个尽可能优化的效果。这三种方式对实现最佳负载均衡都有一定不足,mod_jk相对好些,可以通过设置lbfactor参数来分配请求任务。
1.5 Apache+Tomcat
Apache+ Tomcat整合的目标:
(1) 可以提高整体web服务器性能,将动态页面交给tomcat处理,将静态文件交给apache处理,可以大大提高服务器的静态文件处理性能。
(2) 可以实现web服务器的负载均衡,服务器可采用集群的方式来响应客户端请求。Apache的作用是做代理,将请求分发给各个tomcat处理,tomcat作为集群服务器处理请求。这样可以提高整体web服务器性能和访问量。
(3) 可以实现无缝升级应用程序和容错处理,在tomcat集群中如果有一个tomcat挂掉了,用户还可以通过其他tomcat来进行访问,同时如果我们想升级应用程序,我们可以通过升级每个tomcat的应用程序来实现升级,在升级的过程中不会影响web服务器的访问。
下面就是以1个apache+2个tomcat通过mod_jk配置集群。
1.6 环境说明
所需软件包:
JDK:jdk-6u7-linux-i586.bin
Apache:httpd-2.2.19.tar.gz
Tomcat:apache-tomcat-7.0.16.tar.gz
Mod_jk:mod_jk-1.2.31-httpd-2.2.x.so
服务器:
服务器系统版本信息:CentOS release 5.3
服务器IP:172.30.4.6
2 软件安装
2.1 安装说明
将下载好的软件保存到服务器上:目录为/usr/tomcattest,也可以建立其他文件夹保存。
JDK:jdk-6u7-linux-i586.bin
Apache:httpd-2.2.19.tar.gz
Tomcat:apache-tomcat-7.0.16.tar.gz
Mod_jk:mod_jk-1.2.31-httpd-2.2.x.so
2.2 JDK安装
2.3 Apache安装
2.4 Tomcat安装
3 集群配置
3.1 apache+mod_jk+tomcat配置
3.2 测试
1, 创建测试项目
新建一个项目:项目名称都为TestTomcat
新建一个jsp页面:名称为testjsp.jsp
2, 发布项目
(1)将测试项目打包,包名为TestTomcat.war,将测试项目发布到tomcat1服务器上 。
(2)修改项目testjsp.jsp文件
(3)将修改后的项目TestTomcat.war发布到tomcat2服务器上
3, 测试集群
分别在不同的客户端上访问apache代理服务器。
http://172.30.4.6/TestTomcat/testjsp.jsp
访问结果:
tomcat2=======Wed Jun 29 13:25:03 CST 2011
或者
tomcat1======Wed Jun 29 13:26:03 CST 2011
4 Session复制
在Tomcat集群中实现session同步,可以通过session共享和复制来实现,下面以session复制来实现session同步。
4.1 Session复制配置
1, Tomcat中server.xml的配置
[root@172-30-4-6 ~]# cd /usr/tomcat1/conf #进入tomcat配置目录
[root@172-30-4-6 conf]# vim server.xml #修改server.xml配置
# 在<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">后面加上以下配置:
#分别给集群中每个tomcat在Engine后添加cluster配置,需要修改红色部分的配置:
address=”172.30.4.6” #本机IP地址
port=”4001” #同一机器需要修改端口号,tomcat1为4001,tomcat2为4002
2, Tomcat应用项目中web.xml的配置
[root@172-30-4-6 ~]# cd /usr/tomcat1/webapps #进入到web应用项目中
[root@172-30-4-6 webapps]# vim /TestTomcat/WEB-INF/web.xml #修改web.xml
#在web.xml文件中加入
4.2 测试
1, 修改项目文件
[root@172-30-4-6 ~]# cd /usr/tomcat1/webapps #进入到web应用项目中
[root@172-30-4-6 webapps]# vim /TestTomcat/ testjsp.jsp #修改testjsp.jsp
[root@172-30-4-6 ~]# cd /usr/tomcat2/webapps #进入到web应用项目中
[root@172-30-4-6 webapps]# vim /TestTomcat/ testjsp.jsp #修改testjsp.jsp
2, 测试
(1) 访问http://172.30.4.6/TestTomcat/testjsp.jsp
页面显示结果为:
tomcat1===Thu Jun 30 11:24:10 CST 2011==27E35C1389F5595A17F8B5FD00561EDA.tomcat1===tomcat1
(2) 关闭tomcat1
[root@172-30-4-6 ~]# /usr/tomcat1/bin/shutdown.sh
(3) 访问http://172.30.4.6/TestTomcat/testjsp.jsp
页面显示结果为:
tomcat2==Thu Jun 30 11:37:42 CST 2011===605087B0015E978752640DB389B874A2.tomcat2===tomcat1
#证明session复制成功
sessionID是变了,但session里面保存的内容没变,如tomcat2中打印出来的值是tomcat1
Session ID变了就表示Session已经不是原来那个Session了,是产生了一个全新的会话,至于值没变,是不是因为把原来的值赋给了新的Session ?
是的
sessionID是变了,但session里面保存的内容没变,如tomcat2中打印出来的值是tomcat1
Session ID变了就表示Session已经不是原来那个Session了,是产生了一个全新的会话,至于值没变,是不是因为把原来的值赋给了新的Session ?
sessionID是变了,但session里面保存的内容没变,如tomcat2中打印出来的值是tomcat1
目录
TOMCAT集群 1
1 集群 1
1.1 什么是集群 1
1.2 集群的特性 1
1.3 集群的分类 1
1.4 TOMCAT集群配置的优缺点 2
1.5 APACHE+TOMCAT 2
1.6 环境说明 2
2 软件安装 3
2.1 安装说明 3
2.2 JDK安装 3
2.3 APACHE安装 4
2.4 TOMCAT安装 4
3 集群配置 6
3.1 APACHE+MOD_JK+TOMCAT配置 6
3.2 测试 7
4 SESSION复制 8
4.1 SESSION复制配置 8
4.2 测试 10
1 集群
1.1 什么是集群
集群是一组协同工作的服务实体,用以提供比单一服务实体更具扩展性与可用性的服务平台。在客户端看来,一个集群就象是一个服务实体,但 事实上集群由一组服务实体组成。
1.2 集群的特性
与单一服务实体相比较,集群提供了以下两个关键特性:
1,可扩展性--集群的性能不限于单一的服务实体,新的服 务实体可以动态地加入到集群,从而增强集群的性能。
2, 高可用性--集群通过服务实体冗余使客户端免于轻易遇到out of service的警告。在集群中,同样的服务可以由多个服务实体提供。如果一个服务实体失败了,另一个服务实体会接管失败的服务实体。集群提供的从一个出 错的服务实体恢复到另一个服务实体的功能增强了应用的可用性。
为了具有可扩展性和高可用性特点,集群的必须具备以下两大能力:
(1) 负 载均衡--负载均衡能把任务比较均衡地分布到集群环境下的计算和网络资源。
(2) 错误恢复--由于某种原因,执行某个任务的资源出现故障,另一服 务实体中执行同一任务的资源接着完成任务。这种由于一个实体中的资源不能工作,另一个实体中的资源透明的继续完成任务的过程叫错误恢复。
负载均衡 和错误恢复都要求各服务实体中有执行同一任务的资源存在,而且对于同一任务的各个资源来说,执行任务所需的信息视图(信息上下文)必须是一样的。
1.3 集群的分类
集群主要分成三大类:高可用集群(High Availability Cluster/HA), 负载均衡集群(Load Balance Cluster),高性能计算集群(High Performance Computing Cluster/HPC)
(1) 高可用集群(High Availability Cluster/HA):一般是指当集群中有某个节点失效的情况下,其上的任务会自动转移到其他正常的节点上。还指可以将集群中的某节点进行离线维护再上线,该过程并不影响整个集群的运行。常见的就是2个节点做 成的HA集群,有很多通俗的不科学的名称,比如"双机热备", "双机互备", "双机",高可用集群解决的是保障用户的应用程序持续对外提供服 务的能力。
(2) 负载均衡集群(Load Balance Cluster):负载均衡集群运行时一般通过一个或者多个前端负载均衡器将工作负载分发到后端的一组服务器上,从而达到将工作负载分发。这样的计算机集群有时也被称为服务器群(Server Farm)。一般web服务器集群、数据库集群 和应用服务器集群都属于这种类型。这种集群可以在接到请求时,检查接受请求较少,不繁忙的服务器,并把请求转到这些服务器 上。从检查其他服务器状态这一点上 看,负载均衡和容错集群很接近,不同之处是数量上更多。
(3) 高性能计算集群(High Performance Computing Cluster/HPC):高性能计算集群采用将计算任务分配到集群的不同计算节点而提高计算能力,因而主要应用在科学计算领域。这类集群致力于提供单个计算机所不能提供的强大的计算能力
1.4 Tomcat集群配置的优缺点
通常配置tomcat集群有三种方式:使用DNS轮询,使用apache r-proxy代理方式,使用apache mod_jk方式。
(1)DNS轮询的缺点:当集群中某台服务器停止之后,用户由于dns缓存的缘故,便无法访问服务,必 须等到dns解析更新,或者这台服务器重新启动。还有就是必须把集群中的所有服务端口暴露给外界,没有用apache做前置代理的方式安全,并 且占用大量公网IP地址,而且tomcat还要负责处理静态网页资源,影响效率。优点是集群配置最简单,dns设置也非常简单。
(2)R- proxy的缺点:当其中一台tomcat停止运行的时候,apache仍然会转发请求过去,导致502网关错误。但是只要服务器再启动就不存 在这个问题。
(3)mod_jk方式的优点是,Apache 会自动检测到停止掉的tomcat,然后不再发请求过去。缺点就是,当停 止掉的tomcat服务器再次启动的时候,Apache检测不到,仍然不会转发请求过去。
R-proxy和mod_jk的共同优点是.可 以只将Apache置于公网,节省公网IP地址资源。可以通过设置来实现Apache专门负责处理静态网页,让Tomcat专门负责处理jsp和 servlet等动态请求。共同缺点是:如果前置Apache代理服务器停止运行,所有集群服务将无法对外提供。R-proxy和 mod_jk对静态页面请求的处理,都可以通设置来选取一个尽可能优化的效果。这三种方式对实现最佳负载均衡都有一定不足,mod_jk相对好些,可以通过设置lbfactor参数来分配请求任务。
1.5 Apache+Tomcat
Apache+ Tomcat整合的目标:
(1) 可以提高整体web服务器性能,将动态页面交给tomcat处理,将静态文件交给apache处理,可以大大提高服务器的静态文件处理性能。
(2) 可以实现web服务器的负载均衡,服务器可采用集群的方式来响应客户端请求。Apache的作用是做代理,将请求分发给各个tomcat处理,tomcat作为集群服务器处理请求。这样可以提高整体web服务器性能和访问量。
(3) 可以实现无缝升级应用程序和容错处理,在tomcat集群中如果有一个tomcat挂掉了,用户还可以通过其他tomcat来进行访问,同时如果我们想升级应用程序,我们可以通过升级每个tomcat的应用程序来实现升级,在升级的过程中不会影响web服务器的访问。
下面就是以1个apache+2个tomcat通过mod_jk配置集群。
1.6 环境说明
所需软件包:
JDK:jdk-6u7-linux-i586.bin
Apache:httpd-2.2.19.tar.gz
Tomcat:apache-tomcat-7.0.16.tar.gz
Mod_jk:mod_jk-1.2.31-httpd-2.2.x.so
服务器:
服务器系统版本信息:CentOS release 5.3
服务器IP:172.30.4.6
2 软件安装
2.1 安装说明
将下载好的软件保存到服务器上:目录为/usr/tomcattest,也可以建立其他文件夹保存。
JDK:jdk-6u7-linux-i586.bin
Apache:httpd-2.2.19.tar.gz
Tomcat:apache-tomcat-7.0.16.tar.gz
Mod_jk:mod_jk-1.2.31-httpd-2.2.x.so
2.2 JDK安装
1) 拷贝软件包 [root@172-30-4-6 ~]# mkdir /usr/java #创建jdk安装目录 [root@172-30-4-6 ~]# cd /usr/tomcattest #进入jdk软件包目录 [root@172-30-4-6 tomcattest]# cp jdk-6u7-linux-i586.bin /usr/java #将jdk安装文件拷贝到安装目录 2) 安装JDK [root@172-30-4-6 tomcattest]# cd /usr/java #进入jdk安装目录 [root@172-30-4-6 java]# ./ jdk-6u7-linux-i586.bin #执行安装jdk文件 3) 配置环境变量 [root@172-30-4-6 java] vim /etc/profile #修改系统环境变量文件 #添加内容如下: export JAVA_HOME=/usr/java/jdk1.6.0_02 export JAVA_BIN=/usr/java/jdk1.6.0_02/bin export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export JAVA_HOME JAVA_BIN PATH CLASSPATH [root@172-30-4-6 profile]# cd /usr/bin [root@172-30-4-6 profile]# ln -s -f /usr/java/jdk1.6.0_02/jre/bin/java [root@172-30-4-6 profile]# ln -s -f /usr/java/jdk1.6.0_02/bin/javac 4) 测试 [root@172-30-4-6 profile]# java -version #查看java安装版本 显示结果:java version "jdk1.6.0_02"
2.3 Apache安装
1) 解压 [root@172-30-4-6 ~]# cd /usr/tomcattest #进入apache软件包目录 [root@172-30-4-6 tomcattest]# tar -zxvf httpd-2.2.19.tar.gz #解压apache安装文件 2) 安装 [root@172-30-4-6 tomcattest]# cd httpd-2.2.19 #进入apache安装目录 [root@172-30-4-6 httpd-2.2.19]# ./configure --prefix=/usr/apache # configure参数可以自己根据需要修改,可以使用—help获得相关命令参数信息。 [root@172-30-4-6 httpd-2.2.19]# make #编译 [root@172-30-4-6 httpd-2.2.19]# make install #安装 3) 启动 [root@172-30-4-6 httpd-2.2.19]# cd /usr/apache/ #进入apache安装目录 [root@172-30-4-6 apache]# ./bin/apachectl start #启动apache服务器 4) 测试 访问apache服务器:http://172.30.4.6 响应结果:It works! #apache服务器安装成功
2.4 Tomcat安装
1. 解压 [root@172-30-4-6 ~]# cd /usr/tomcattest #进入tomcat软件包目录 [root@172-30-4-6 tomcattest]# tar –zxvf apache-tomcat-7.0.16.tar.gz #解压tomcat安装包 2. 安装 [root@172-30-4-6 tomcattest]# cp -P apache-tomcat-7.0.16 /usr/tomcat1 #拷贝tomcat1 [root@172-30-4-6 tomcattest]# cp -P apache-tomcat-7.0.16 /usr/tomcat2 #拷贝tomcat2 3. 配置 因为该例子是在同一台服务器上安装两个tomcat服务器,避免服务器端口使用冲突,tomcat1端口采用默认配置,tomcat2端口需要重新配置。 [root@172-30-4-6 tomcattest]# cd /usr/tomcat2/conf #进入tomcat2配置目录,可修改server.xml配置文件 [root@172-30-4-6 tomcattest]# cd /usr/tomcat1/conf #进入tomcat1配置目录,可修改server.xml配置文件 [root@172-30-4-6 conf]# vim server.xml #修改tomcat2配置文件 (1) 修改server端口号 #tomcat1 默认配置 <Server port="8005" shutdown="SHUTDOWN"> #tomcat2 修改端口号为9005 <Server port="9005" shutdown="SHUTDOWN"> (2) 修改HTTP connector端口号 #tomcat1默认配置 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> #tomcat2 修改端口号为9080 <Connector port="9080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> (3) 修改 AJP connector 端口号 #tomcat1 默认配置 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> #tomcat2 修改端口号9009 <Connector port="9009" protocol="AJP/1.3" redirectPort="8443" /> (4) 修改 engine 名称 #tocmat1 修改jvmRoute=”tomcat1” <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1"> #tocmat2 修改jvmRoute=”tomcat2” <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2"> 4. 启动 [root@172-30-4-6 tomcattest]# /usr/tomcat1/bin/startup.sh #启动tomcat1 [root@172-30-4-6 tomcattest]# /usr/tomcat1/bin/startup.sh #启动tomcat2 5. 测试 #tomcat1测试 http://172.30.4.6:8080 #tomcat2 测试 http://172.30.4.6:9080 结果:显示tomcat首页
3 集群配置
3.1 apache+mod_jk+tomcat配置
1, httpd.conf的配置 [root@172-30-4-6 ~]# cd /usr/apache/conf #进入apache配置目录 [root@172-30-4-6 conf]# vim httpd.conf #修改httpd.conf配置文件 Include conf/mod_jk.conf #增加include配置 2, mod_jk.conf的配置 [root@172-30-4-6 conf]# touch mod_jk.conf #创建mod_jk.conf文件 [root@172-30-4-6 conf]# vim mod_jk.conf #修改mod_jk配置 #mod_jk 配置mod_jk包 LoadModule jk_module modules/mod_jk-1.2.31-httpd-2.2.x.so #workers 配置工作负责文件 JkWorkersFile conf/workers.properties #jk log 配置jk日志文件 JkLogFile logs/mod_jk.log #jk log leve 配置日志级别 JkLogLevel info # 配置jk日志内存共享 JkShmFile logs/mod_jk.shm #balancer 配置负载均衡模式 JkMount /*.jsp balancer [root@172-30-4-6 conf]# cp /usr/tomcattest/mod_jk-1.2.31-httpd-2.2.x.so /usr/apache/modules #将mod_jkb包拷贝到apache的modules目录下 3, workers.properties的配置 [root@172-30-4-6 conf]# touch workers.properties #创建worker.properties文件 [root@172-30-4-6 conf]# vim workers.properties #tomcat1的配置 worker.tomcat1.port=8009 worker.tomcat1.host=172.30.4.6 worker.tomcat1.reference=worker.template worker.tomcat1.activation=A #worker.tomcat1.lbfactor=1 #tomcat2 的配置 worker.tomcat2.port=9009 worker.tomcat2.host=172.30.4.6 worker.tomcat2.reference=worker.template worker.tomcat2.activation=A #worker.tomcat2.lbfactor=1 worker.list=balancer #balancer 负载配置 worker.balancer.type=lb worker.balancer.balance_workers=tomcat1,tomcat2 worker.balancer.sticky_session=1 #tempalte 负载模板配置 worker.template.type=ajp13
3.2 测试
1, 创建测试项目
新建一个项目:项目名称都为TestTomcat
新建一个jsp页面:名称为testjsp.jsp
<%@ page language="java" import="java.util.Date"contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>欢迎访问</title> </head> <body> <% System.out.println(new Date()+"=============tomcat1================="); %> tomcat1=======<%=new Date()%> </body> </html>
2, 发布项目
(1)将测试项目打包,包名为TestTomcat.war,将测试项目发布到tomcat1服务器上 。
(2)修改项目testjsp.jsp文件
<%@ page language="java" import="java.util.Date"contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>欢迎访问</title> </head> <body> <% System.out.println(new Date()+"=============tomcat2================="); %> tomcat2=======<%=new Date()%> </body> </html>
(3)将修改后的项目TestTomcat.war发布到tomcat2服务器上
3, 测试集群
分别在不同的客户端上访问apache代理服务器。
http://172.30.4.6/TestTomcat/testjsp.jsp
访问结果:
tomcat2=======Wed Jun 29 13:25:03 CST 2011
或者
tomcat1======Wed Jun 29 13:26:03 CST 2011
4 Session复制
在Tomcat集群中实现session同步,可以通过session共享和复制来实现,下面以session复制来实现session同步。
4.1 Session复制配置
1, Tomcat中server.xml的配置
[root@172-30-4-6 ~]# cd /usr/tomcat1/conf #进入tomcat配置目录
[root@172-30-4-6 conf]# vim server.xml #修改server.xml配置
# 在<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">后面加上以下配置:
<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"> <Membership className="org.apache.catalina.tribes.membership.McastService" address="228.0.0.4" port="45564" frequency="500" dropTime="3000"/> <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="auto" #默认为auto,改为自己的IP port="4000" #同一台服务器上的tomcat必须修改为不同的端口,tomcat1修改为4001,tomcat2修改为4002。 autoBind="100" selectorTimeout="5000" maxThreads="6"/> <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"> <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/> </Sender> <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"/> <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" tempDir="/tmp/war-temp/" deployDir="/tmp/war-deploy/" watchDir="/tmp/war-listen/" watchEnabled="false"/> <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/> <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/> </Cluster>
#分别给集群中每个tomcat在Engine后添加cluster配置,需要修改红色部分的配置:
address=”172.30.4.6” #本机IP地址
port=”4001” #同一机器需要修改端口号,tomcat1为4001,tomcat2为4002
2, Tomcat应用项目中web.xml的配置
[root@172-30-4-6 ~]# cd /usr/tomcat1/webapps #进入到web应用项目中
[root@172-30-4-6 webapps]# vim /TestTomcat/WEB-INF/web.xml #修改web.xml
#在web.xml文件中加入
<!--此应用将与群集服务器复制Session--> <distributable/>
4.2 测试
1, 修改项目文件
[root@172-30-4-6 ~]# cd /usr/tomcat1/webapps #进入到web应用项目中
[root@172-30-4-6 webapps]# vim /TestTomcat/ testjsp.jsp #修改testjsp.jsp
<%@ page language="java" import="java.util.Date"contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>欢迎访问</title> </head> <body> <% System.out.println(new Date()+"=============tomcat1================="); session.setAttribute("name", "tomcat1"); %> tomcat1=======<%=new Date()%>===<%=session.getId() %>===<%=session.getAttribute("name") %> </body> </html>
[root@172-30-4-6 ~]# cd /usr/tomcat2/webapps #进入到web应用项目中
[root@172-30-4-6 webapps]# vim /TestTomcat/ testjsp.jsp #修改testjsp.jsp
<%@ page language="java" import="java.util.Date"contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>欢迎访问</title> </head> <body> <% System.out.println(new Date()+"=============tomcat2================="); %> tomcat2=======<%=new Date()%>===<%=session.getId() %>===<%=session.getAttribute("name") %> </body> </html>
2, 测试
(1) 访问http://172.30.4.6/TestTomcat/testjsp.jsp
页面显示结果为:
tomcat1===Thu Jun 30 11:24:10 CST 2011==27E35C1389F5595A17F8B5FD00561EDA.tomcat1===tomcat1
(2) 关闭tomcat1
[root@172-30-4-6 ~]# /usr/tomcat1/bin/shutdown.sh
(3) 访问http://172.30.4.6/TestTomcat/testjsp.jsp
页面显示结果为:
tomcat2==Thu Jun 30 11:37:42 CST 2011===605087B0015E978752640DB389B874A2.tomcat2===tomcat1
#证明session复制成功
评论
5 楼
xmong
2013-03-06
yzxqml 写道
xmong 写道
yzxqml 写道
tomcat1===Thu Jun 30 11:24:10 CST 2011==27E35C1389F5595A17F8B5FD00561EDA.tomcat1===tomcat1
tomcat2==Thu Jun 30 11:37:42 CST 2011===605087B0015E978752640DB389B874A2.tomcat2===tomcat1
SessionID都变了,复制成功了么?没有吧。。。。
tomcat2==Thu Jun 30 11:37:42 CST 2011===605087B0015E978752640DB389B874A2.tomcat2===tomcat1
SessionID都变了,复制成功了么?没有吧。。。。
sessionID是变了,但session里面保存的内容没变,如tomcat2中打印出来的值是tomcat1
Session ID变了就表示Session已经不是原来那个Session了,是产生了一个全新的会话,至于值没变,是不是因为把原来的值赋给了新的Session ?
是的
4 楼
yzxqml
2013-03-03
xmong 写道
yzxqml 写道
tomcat1===Thu Jun 30 11:24:10 CST 2011==27E35C1389F5595A17F8B5FD00561EDA.tomcat1===tomcat1
tomcat2==Thu Jun 30 11:37:42 CST 2011===605087B0015E978752640DB389B874A2.tomcat2===tomcat1
SessionID都变了,复制成功了么?没有吧。。。。
tomcat2==Thu Jun 30 11:37:42 CST 2011===605087B0015E978752640DB389B874A2.tomcat2===tomcat1
SessionID都变了,复制成功了么?没有吧。。。。
sessionID是变了,但session里面保存的内容没变,如tomcat2中打印出来的值是tomcat1
Session ID变了就表示Session已经不是原来那个Session了,是产生了一个全新的会话,至于值没变,是不是因为把原来的值赋给了新的Session ?
3 楼
xmong
2013-02-25
yzxqml 写道
tomcat1===Thu Jun 30 11:24:10 CST 2011==27E35C1389F5595A17F8B5FD00561EDA.tomcat1===tomcat1
tomcat2==Thu Jun 30 11:37:42 CST 2011===605087B0015E978752640DB389B874A2.tomcat2===tomcat1
SessionID都变了,复制成功了么?没有吧。。。。
tomcat2==Thu Jun 30 11:37:42 CST 2011===605087B0015E978752640DB389B874A2.tomcat2===tomcat1
SessionID都变了,复制成功了么?没有吧。。。。
sessionID是变了,但session里面保存的内容没变,如tomcat2中打印出来的值是tomcat1
2 楼
yzxqml
2013-02-17
tomcat1===Thu Jun 30 11:24:10 CST 2011==27E35C1389F5595A17F8B5FD00561EDA.tomcat1===tomcat1
tomcat2==Thu Jun 30 11:37:42 CST 2011===605087B0015E978752640DB389B874A2.tomcat2===tomcat1
SessionID都变了,复制成功了么?没有吧。。。。
tomcat2==Thu Jun 30 11:37:42 CST 2011===605087B0015E978752640DB389B874A2.tomcat2===tomcat1
SessionID都变了,复制成功了么?没有吧。。。。
1 楼
pandong8183
2012-09-17
写得好啊!!
相关推荐
【标题】:“Tomcat集群配置” 在Web应用的高可用性和可扩展性需求日益增长的今天,Tomcat集群成为了一个重要的解决方案。Tomcat集群能够通过负载均衡和故障转移来提高服务的稳定性和性能。以下是对Tomcat集群配置...
当我们需要处理高并发、负载均衡等需求时,单个Tomcat服务器可能无法满足,这时就需要进行Tomcat集群部署。下面将详细介绍Tomcat集群部署的相关知识点。 1. **集群的概念**: 集群是一种通过多台服务器协同工作来...
本资料包包含了“tomcat集群配置”的程序及文档,提供了现成的例子,帮助我们理解和实践Tomcat集群的搭建与管理。 首先,我们需要了解Tomcat集群的基本概念。集群是指多个Tomcat实例协同工作,它们共享相同的会话...
【标题】:Tomcat集群-负载平衡 在Java Web应用开发中,Apache Tomcat作为一款广泛应用的开源Servlet容器,常被用于部署和运行Java EE应用。然而,单一的Tomcat服务器可能无法满足高并发、高可用性和高可扩展性的...
Apache + Tomcat 集群配置 Apache + Tomcat 集群配置是指将 Apache 服务器与 Tomcat 服务器集成,以提高服务器的性能和可扩展性。本文将详细介绍如何配置 Apache + Tomcat 集群,包括安装 Apache 和 Tomcat 服务器...
在本场景中,我们关注的是“tomcat集群jar包”,这通常涉及到在多个Tomcat实例间分配工作负载以实现高可用性和可扩展性的技术。 集群的概念在分布式系统中非常重要,特别是对于像Tomcat这样的Web服务器。当单个...
在IT领域,特别是Web应用服务器的管理与优化中,Tomcat集群实现Session复制是一个关键的技术点,它确保了高可用性和负载均衡,特别是在处理大量并发请求的场景下。本文将深入探讨这一主题,涵盖其原理、配置方法以及...
### Linux配置Tomcat集群知识点详解 #### 一、概述与目标 在Linux环境下配置Tomcat集群,主要目的是构建一个能够实现水平扩展、具备高可用性、支持负载均衡以及错误恢复能力的服务架构。通过集群的方式,可以提高...
### Apache Tomcat 集群与负载均衡 #### 1. 集群相关简介 ##### 1.1 集群 集群是一组通过高速网络互相连接的计算机,它们作为一个整体协同工作,对外呈现出单一系统的特性。客户端与集群交互时,会感觉像在与一个...
【Tomcat集群优化详细配置】 在IT行业中,服务器性能优化是一项关键任务,特别是在高并发、大规模用户访问的场景下。Tomcat,作为广泛使用的Java应用服务器,常常需要通过集群部署来提升系统的可用性和可伸缩性。...
【Java企业级电商项目架构演进之路 Tomcat集群与Redis分布式】 这门课程是针对Java开发者设计的,旨在提升他们的企业级项目架构能力,特别是聚焦于Tomcat集群和Redis分布式缓存的应用。课程内容丰富,适合希望晋升...
【Tomcat集群搭建详解】 Tomcat集群是一种将多个Tomcat服务器组织起来,共同提供服务的架构,以实现更高的可用性和可扩展性。集群的主要目的是在负载均衡和错误恢复的基础上,确保服务的连续性和性能。 **1. 集群...
在分布式系统中,Tomcat集群是一种常见的架构模式,用于提高应用程序的可用性和可扩展性。然而,当多个Tomcat实例组成一个集群时,session(用户会话)共享成为一个挑战,因为每个实例都有自己的内存空间,无法直接...
【Tomcat集群部署方案】 Apache Tomcat集群部署是提高Web应用程序可伸缩性和高可用性的常见策略。在集群环境中,多个Tomcat实例协同工作,共同处理来自客户端的请求,从而实现负载均衡和故障转移。本方案将详细介绍...
当我们谈论“tomcat集群配置文件”时,我们指的是将多个Tomcat实例组织成一个集群,以提高应用程序的可用性和可伸缩性。在集群环境中,负载均衡、故障转移和资源共享是关键特性。 首先,要配置Tomcat集群,你需要...
本篇内容将详细探讨如何在Linux环境中配置Tomcat集群,以提高系统的可用性和性能。 一、Linux基础 在开始配置之前,需要对Linux操作系统有一定的了解。熟悉基本的命令行操作,如文件管理、用户权限、网络设置等,这...
### Tomcat集群部署方案知识点详解 #### 一、集群概念及特性 **1.1 什么是集群** 集群是由多台独立的计算机通过网络连接组成的集合体,这些计算机共同协作完成任务,对外表现为单一的服务实体。集群的主要目的是...