根据Tomcat的官方文档说明可以知道,使用Tomcat配置集群需要与其它Web Server配合使用才可以完成,典型的有Apache和IIS。

这里就使用Apache+Tomcat方式来完成基于Tomcat在集群配置。

软件准备

1)Apache HTTP Server:

使用百度搜索httpd-2.2.25-win32-x86-no_ssl.msi,应该可以找到很多相关的下载链接。这里也提供一个:http://vdisk.weibo.com/s/C3trk_uGGkrmc

2)Tomcat 7:

Tomcat7下载链接:http://tomcat.apache.org/download-70.cgi

3)Tomcat 连接器——JK:

http://mirrors.cnnic.cn/apache/tomcat/tomcat-connectors/jk/binaries/windows/

打开连接后下载版本:tomcat-connectors-1.2.40-windows-i386-httpd-2.2.x.zip

集群设计

下面是一个集群设计架构图:

如果是使用WebLogic或者是使用Glassfish等服务器,只需要根据相关说明做出相关配置即可。但是不论使用什么服务器,架构都是上面这样的。

Tomcat是单实例的,也就是说一个Tomcat只能作为一个Server来使用。

Tomcat Connector

Connector的作用:将不同协议的请求引渡到Tomcat 的Web Container中。Tomcat中现在可以处理的请求根据协议可以分为:HTTP、AJP,其中HTTP请求又可以包括APR方式的HTTP请求。

相关参考文档:

http://tomcat.apache.org/connectors-doc/reference/apache.html

另外配方中的配置,都可以在这样链接下找到。

JK

JK 其实是一个Tomcat Connector。Apache、IIS 是不支持jsp/servlet处理功能的Web Server,使用了JK就可以将jsp/Serverlt请求过渡到Tomcat中,让Tomcat来处理。

集群搭建

下面就来说说如何搭建基于Apache +Tomcat的集群环境。

Apache Server充当LB服务器的角色,其它的Tomcat实例充当Server的角色。按照下面的步骤操作进行,就可以快速的搭起了:

1)安装Apache Server

软件安装不用说明了,和其它的软件安装方式相同。

2)安装tomcat

解压即可,然后再拷贝一份放到磁盘上。这就是两个Tomcat了。

3)在apache Server中添加jk模块

解压之前下载的jk,将mod_jk.so放到Apache Server的modules目录下。

4)配置work.properties和uriworkmap.properties

work.properties如下:

worker.list=controller,s1,s2

worker.s1.type=ajp13
worker.s1.port=8009
worker.s1.host=localhost
worker.s1.lbfactor=1 worker.s2.type=ajp13
worker.s2.port=9009
worker.s2.lbfactor=1
worker.s2.host=localhost worker.controller.type=lb
worker.controller.balanced_workers=s1,s2
worker.controller.sticky_session=false

配置了3个Worker,其中controller代表LB服务器。s1,s2代表两个tomcat server。配置说明:

uriworkermap.properties 如下:

/*=controller

然后将这两个文件放到Apache Server的conf目录下。这个其实并没有规定放到哪里。

另外:

worker.properties如何配置,可以参考文档:

http://tomcat.apache.org/connectors-doc/reference/workers.html

uriworkermap.properties 如何配置,可以参考文档:

http://tomcat.apache.org/connectors-doc/reference/uriworkermap.html

5)在apache server下配置mod_jk.conf

Mod_jk.conf内容如下:

# Load mod_jk module
LoadModule jk_module modules/mod_jk.so
# Where to find workers.properties
JkWorkersFile conf/workers.properties
JkMountFile conf/uriworkermap.properties
# Where to put jk logs
JkLogFile logs/mod_jk.log
# Set the jk log level [debug/error/info]
JkLogLevel info
# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
# JkOptions indicate to send SSL KEY SIZE,
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
# JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"
# Send servlet for context /examples to worker named ajp13
#JkMount /servlet/* controller
# Send JSPs for context /examples to worker named ajp13
#JkMount /* controller

配置完毕后,将文件放到Apache Server的conf目录下。

6)配置httpd.conf,引入JK

打开Apache Server的conf目录下的httpd.conf文件,在最后加入:

Include conf/mod_jk.conf

这个配置,就是让Apache Server启动时,加载mod_jk的。

7)将tomcat配置为集群实例

Tomcat作为集群实例时,可以是在不同的机器上的,也可以在相同的机器上的,只要配置对了host和port就可以的。我这里配置的是在同一台机器上的。

下面就是这两个tomcat的端口的配置:

Tomcat

S1 port

S2 port

Connector HTTP/1.1

8001

9001

Connector AJP/1.3

8009

9009

然后配置如下:

为<Engine name="Catalina" defaultHost="localhost" >添加jvmRoute,变为:

<Engine name="Catalina" defaultHost="localhost" jvmRoute="s1">

去掉<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>前后的注释。

<Engine name="Catalina" defaultHost="localhost" jvmRoute="s1">

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

….

</Engine>

配置完成后如图:

S1:

S2:

到此集群就搭建好了。

在集群环境下访问应用

1)创建Web应用ClusterTest

添加index.jsp:

<body>
Hello, index.jsp<br> <%=session.getId()%>
<%=request.getLocalName()%>
<%=request.getLocalPort()%>
</body>

配置web.xml为:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>ClusterTest</display-name> <distributable/>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

使用Eclipse导出为war文件ClusterTest.war。

2) 部署web应用

将ClusterTest.war放到两个tomcat的webapps目录下。

3)启动集群:

按顺序启动ApacheServer、Tomcat(S1)、Tomcat(S2)。

4)浏览器访问web应用。

输入链接:http://localhost/ClusterTest即可:

可以看到sessionId(点号前面那一段),主机名称,请求的端口号。其中点号后面的表示是处理请求的Server名称。不断的刷新浏览器,seesionId是一样的,只是server名称不同。

也可以直接使用浏览器访问S1或者S2:

其实使用Apache+Tomcat有3种方案,参考: http://www.ibm.com/developerworks/cn/opensource/os-lo-apache-tomcat/index.html

如果想使用IIS+Tomcat配置集群,可以参考:http://tomcat.apache.org/connectors-doc/reference/iis.html

Tomcat:基于Apache+Tomcat的集群搭建的更多相关文章

  1. 基于zookeeper的Swarm集群搭建

    简介 Swarm:docker原生的集群管理工具,将一组docker主机作为一个虚拟的docker主机来管理. 对客户端而言,Swarm集群就像是另一台普通的docker主机. Swarm集群中的每台 ...

  2. 基于centos6.5 hbase 集群搭建

    注意本章内容是在上一篇文章“基于centos6.5 hadoop 集群搭建”基础上创建的 1.上传hbase安装包 hbase-0.96.2-hadoop2 我的目录存放在/usr/hadoop/hb ...

  3. 基于Twemproxy的Redis集群搭建以及想法

    基于Twemproxy的Redis集群方案(转) redis3.0 已经发布了几个月了,但是我这等菜鸟到网上还是没有找到很好的关于搭建redis3.0集群的文章,而且好像很多公司的redis版本还保持 ...

  4. 基于Docker的redis集群搭建

    Redis集群官方介绍:http://www.redis.cn/topics/cluster-tutorial.html 基于Docker搭建Redis集群 环境:6个节点,三主三从 制作Redis镜 ...

  5. 基于centos6.5 hadoop 集群搭建

    1.修改Linux主机名2.修改IP3.修改主机名和IP的映射关系 ######注意######如果你们公司是租用的服务器或是使用的云主机(如华为用主机.阿里云主机等) /etc/hosts里面要配置 ...

  6. quay.io/coreos/etcd 基于Docker镜像的集群搭建

    etcd是一个高可用的键值存储系统,主要用于共享配置和服务发现.etcd是由CoreOS开发并维护的,灵感来自于 ZooKeeper 和 Doozer,它使用Go语言编写,并通过Raft一致性算法处理 ...

  7. 基于Hadoop伪分布式集群搭建Spark

    一.前置安装 1)JDK 2)Hadoop伪分布式集群 二.Scala安装 1)解压Scala安装包 2)环境变量 SCALA_HOME = C:\ProgramData\scala-2.10.6 P ...

  8. 基于Dokcer搭建Redis集群搭建(主从集群)

    最近陆陆续续有不少园友加我好友咨询 redis 集群搭建的问题,我觉得之前写的这篇 <基于Docker的Redis集群搭建> 文章一定是有问题了,所以我花了几分钟浏览之前的文章总结了下面几 ...

  9. Centos7下Etcd集群搭建

    一.简介 "A highly-available key value store for shared configuration and service discovery." ...

  10. MySQL集群搭建方案(PXC)

    服务器快过期了,清一点库存,把运维这块的知识复习下 为什么要搭MySQL集群 技术层面上,传统的单节点数据库,万一宕机了,就凉凉了.容灾性能差.抗并发能力有限,数据量大的时候查询有瓶颈.学习层面上,作 ...

随机推荐

  1. Repository 设计模式介绍

    在DDD设计中大家都会使用Repository pattern来获取domain model所需要的数据. 1.什么是Repository? "A Repository mediates b ...

  2. 记一次ckeditor上传图片到服务器问题

    package com.util;import java.io.IOException; import java.io.PrintWriter; import java.util.List;impor ...

  3. 使用exe4j打包Java程序

    工具: exe4j软件(云盘存) 可以运行的Java程序的jar包 打开我们已经安装好的exe4j软件,首先看到的是一个欢迎界面,我们直接[next]就可以了: 2 在第二步中我们选择[JAR in ...

  4. IOS 2D游戏开发框架 SpriteKit

    最近发现Xcode自带的2D游戏开发框架SpriteKit可以直接引入到APP中进行混合开发,这就是说可以开发出既带业务应用又带游戏的苹果APP,咋怎么觉得这是一个自己的小发现....呵呵....., ...

  5. Linux命令速查手册,超详细Linux命令教程

    一.常用命令速查 ls cd pwd cat more less tail head cp scp mv mkdir rmdir touch rm ps kill top free clear tre ...

  6. ViewHolder被设计成静态内部类的作用

    当你的内部类不需要依赖于外界的属性或方法等,而又想提供给外界使用,可以采取静态内部类的方式来写 其中static的作用是可以提供给外界调用,比如说类名.内部类这种方式 而ViewHolder的实际是为 ...

  7. loadrunner用javavuser进行接口测试

    在日常工作中会遇到被测试系统通讯都是通过加密的数据包,加密算法是公司自己开发的,并且发送的数据包还要经过系统的压缩,以保证系统的性能.利用loadrunner就无法解决这里的加密的技术问题,利用jav ...

  8. 解析XML

    1.解析String类型的XML字符串得到属性值 String  resultXML = "<?xml version="1.0" encoding="U ...

  9. 如何在window Form中使用Font Awesome?

    随着技术的发展,web上以前的图片按钮现在逐步换成了图标字体,这些图标字体是矢量的,矢量图意味着每个图标都能在所有大小的屏幕上完美呈现,可以随时更改大小和颜色,而且不失真,真心给人一种“高大上”的感觉 ...

  10. Perfect Scrollbar – 完美的 jQuery 滚动条插件

    Perfect Scrollbar 是一个很小的,但完美的 jQuery 滚动插件.滚动条不会影响原来的设计布局,滚动条的设计是完全可定制的.你可以改变几乎所有的 CSS 样式的滚动条,滚动条设计对脚 ...