Tomcat:基于Apache+Tomcat的集群搭建
根据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的集群搭建的更多相关文章
- 基于zookeeper的Swarm集群搭建
简介 Swarm:docker原生的集群管理工具,将一组docker主机作为一个虚拟的docker主机来管理. 对客户端而言,Swarm集群就像是另一台普通的docker主机. Swarm集群中的每台 ...
- 基于centos6.5 hbase 集群搭建
注意本章内容是在上一篇文章“基于centos6.5 hadoop 集群搭建”基础上创建的 1.上传hbase安装包 hbase-0.96.2-hadoop2 我的目录存放在/usr/hadoop/hb ...
- 基于Twemproxy的Redis集群搭建以及想法
基于Twemproxy的Redis集群方案(转) redis3.0 已经发布了几个月了,但是我这等菜鸟到网上还是没有找到很好的关于搭建redis3.0集群的文章,而且好像很多公司的redis版本还保持 ...
- 基于Docker的redis集群搭建
Redis集群官方介绍:http://www.redis.cn/topics/cluster-tutorial.html 基于Docker搭建Redis集群 环境:6个节点,三主三从 制作Redis镜 ...
- 基于centos6.5 hadoop 集群搭建
1.修改Linux主机名2.修改IP3.修改主机名和IP的映射关系 ######注意######如果你们公司是租用的服务器或是使用的云主机(如华为用主机.阿里云主机等) /etc/hosts里面要配置 ...
- quay.io/coreos/etcd 基于Docker镜像的集群搭建
etcd是一个高可用的键值存储系统,主要用于共享配置和服务发现.etcd是由CoreOS开发并维护的,灵感来自于 ZooKeeper 和 Doozer,它使用Go语言编写,并通过Raft一致性算法处理 ...
- 基于Hadoop伪分布式集群搭建Spark
一.前置安装 1)JDK 2)Hadoop伪分布式集群 二.Scala安装 1)解压Scala安装包 2)环境变量 SCALA_HOME = C:\ProgramData\scala-2.10.6 P ...
- 基于Dokcer搭建Redis集群搭建(主从集群)
最近陆陆续续有不少园友加我好友咨询 redis 集群搭建的问题,我觉得之前写的这篇 <基于Docker的Redis集群搭建> 文章一定是有问题了,所以我花了几分钟浏览之前的文章总结了下面几 ...
- Centos7下Etcd集群搭建
一.简介 "A highly-available key value store for shared configuration and service discovery." ...
- MySQL集群搭建方案(PXC)
服务器快过期了,清一点库存,把运维这块的知识复习下 为什么要搭MySQL集群 技术层面上,传统的单节点数据库,万一宕机了,就凉凉了.容灾性能差.抗并发能力有限,数据量大的时候查询有瓶颈.学习层面上,作 ...
随机推荐
- 使用ASP.NET 4的自动启动特性,解决ASP.NET第一次访问速度慢问题
些web应用在可以处理用户访问之前,需要装载很多的数据,或做一些花费很大的初始化处理.今天使用 ASP.NET 的开发人员经常使用应用的Global.asax 文件中的 “Application_St ...
- Asp.net Mvc模块化开发之“开启模块开发、调试的简单愉快之旅”
整个世界林林种种,把所有的事情都划分为对立的两个面. 每个人都渴望的财富划分为富有和贫穷,身高被划分为高和矮,身材被划分为胖和瘦,等等. 我们总是感叹,有钱人的生活我不懂;有钱人又何尝能懂我们每天起早 ...
- Android使用SAX解析XML(1)
可扩展标记语言XML是一种数据交换格式,允许用户自己定义,适合Web传输,能提供独立于程序的数据.XML在Android中也有广泛的应用,Android解析XML的方法有很多,本文介绍使用SAX(Si ...
- XE8 (RTM) Android SDK 更新安装
适用:XE8 Android 平台 问题:安装 XE8 RTM 时,如果勾选了 Android SDK 5.0.1 (API 21) 及 Android NDK (android-ndk-r9c) , ...
- 【java学习系列】 Android第一本书《第一行代码》
开始Java的学习,从Android,开始吧.<第一代码>开始阅读和调试demo例子. 下面是 <第一行代码>的思维导图:
- reset
html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, ...
- 前端上传组件Plupload使用指南
我之前写过一篇文章<文件上传利器SWFUpload使用指南>,里面介绍了上传组件SWFUpload的使用方法,但现在随着html5技术的逐渐推广和普及,再去使用以flash为上传手段的SW ...
- angularjs 指令—— 绑定策略(@、=、&)
angularjs 指令—— 绑定策略(@.=.&) 引入主题背景:angular 的指令配置中的template可以直接使用硬编码写相应的代码,不过也可以根据变量,进行动态更新.那么需要用到 ...
- javascript 图片淡入淡出效果 实例源代码
代码说明:把代码粘贴好之后,需要更改html代码中的图片路径,即可执行成功.后面还有对js代码的详细说明,希望大家好好消化,好好理解. html源代码: <head> <title& ...
- [deviceone开发]-一个很炫的手势动画示例
一.简介 这是iOS下的效果,android下完全一致.通过do_GestureView组件和do_Animation组件,deviceone能很容易实现复杂的跨平台纯原生动画效果,这个示例就是通过手 ...