- 浏览: 914807 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (537)
- Java SE (114)
- Struts (18)
- Hibernate (25)
- Spring (3)
- Page_Tech (41)
- Others (87)
- Database (29)
- Server (24)
- OpenSource_Tools (15)
- IDE_Tool (22)
- Algorithm (28)
- Interview (22)
- Test (28)
- Hardware (1)
- Mainframe (25)
- Web application (4)
- Linux (3)
- PHP (17)
- Android (1)
- Perl (6)
- ubuntu (1)
- Java EE (9)
- Web Analysis (5)
- Node.js (2)
- javascript (2)
最新评论
-
一键注册:
request.getRequestURL()和request.getRequestURI() -
SuperCustomer:
...
SED的暂存空间和模式空间 -
juyo_ch:
讲得挺好理解的,学习了
java 死锁及解决 -
chinaalex:
最后一题答案正确,但是分析有误.按照如下过程,上一行为瓶,下一 ...
zz智力题 -
liaowuxukong:
多谢博主啦,弱弱的了解了一点。
C++/Java 实现多态的方法(C++)
Tomcat负载均衡和集群环境的搭建:
魏超 2010年3月31日星期三
注1:实现此集群的方法参考了网上的很多文章,但由于很多文章都表明是原创的,故无法知道整个操作流程的真正作者是谁。下面就是我用我们真实的项目去实现这个过程。同时修复这过程中一些问题。以下的所有步骤均为亲自测试,截图也是真实的。
注2:要完成集群和负载均衡配置,最简单步骤为完成所有标有下划线的操作。无下划线的部分为对操作的解释或是额外的说明。
1. 准备条件:
材料 |
本次搭建所用具体版本 |
Apache |
Apache 2.2.15 (用于分发请求) |
Tomcat N个 |
apache-tomcat-6.0.26.zip 2个 (根据需求准备N个免安装的tomcat) |
Mod_jk |
mod_jk-1.2.30-httpd-2.2.3.so (注意,这个需要和apache的版本匹配。2.2.3的mod_jk用于匹配Apache 2.2.X版本) |
用于部署的项目 |
Tlcom 1.2.6 sp3 |
材料 |
下载地址 |
Apache2.2 |
|
Tomcat6.0.26 |
|
Mod_jk-1.2.30 |
2. 安装apache 和 tomcat
将apache安装到硬盘上, 然后将2个tomcat解压。(这里的安装和解压不限定具体目录,安装和解压到某个目录下即可)。
这里我将apache2.2安装到D:\Apache Software Foundation\。2个tomcat也解压到同一个目录下。
接着检查apache是否能正常启动。
3. 对apache 配置负载均衡
(1)取出下载的mod_jk-1.2.30-httpd-2.2.3.so。将其放置到Apache2.2\modules目录下。
(2)打开Apache2.2\conf\ httpd.conf文件。在其末尾添加上一行:
include "D:\Apache Software Foundation\Apache2.2\conf\mod_jk.conf"
即调用conf目录下的mod_jk.conf这个配置文件。当然,apache conf目录下原来是没有这个文件的。我们需要自己新建这个文件。
(3)在conf目录下新建Mod_jk.conf内容如下:
#加载mod_jk Module
LoadModule jk_module modules/ mod_jk-1.2.30-httpd-2.2.3.so
#指定 workers.properties文件路径
JkWorkersFile conf/workers.properties
#指定那些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器
JkMount /*.jsp controller
第2行中的mod_jk-1.2.30-httpd-2.2.3.so,就是我们之前放到modules目录下的那个.so文件。这里的名字就根据放进去的实际名字来写。版本不同,名字也就不一样。当然,mod_jk-1.2.30-httpd-2.2.3.so这个文件允许自己重命名。重命名后,只要在这里相应的配置上重命名后的名字,不会影响这个插件的功能。
第4行中conf/workers.properties文件也是不存在的,也需要我们自己建立。这个文件的作用是对用于均衡负载的 负载器进行具体的登记。(比如我们用的2个tomcat).换句话说,workers.properties就是对几个worker的登记表。我们的2个tomcat就作为2个worker被登记在这个文件中。而具体要如何进行登记,下面再具体说。
第6行的作用就是配置apache对哪些请求进行转发。这里我按照网络上的教程,配置了对所有jsp页面的请求的转发。那么,当有jsp请求到达apache时,apache就会根据当时的负载情况,从worker中挑出负载低的那个worker,将这个jsp请求转发给他。(这里需要注意,当部署到tomcat上的项目有更多类型的请求的时候,需要在这里配置更多的请求规则)。而controller会在workers.peroperties中被配置。总的来说,转发规则的格式如下:
JkMount + 过滤请求类型 + 处理器
(4)接着,我们在conf目录下新建workers.properties内容如下:
worker.list = controller,tomcat1,tomcat2 #server 列表
#========tomcat1========
worker.tomcat1.port=8009 #ajp13 端口号,在tomcat下server.xml配置,默认8009
worker.tomcat1.host=localhost #tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat1.type=ajp13 #定向包协议
worker.tomcat1.lbfactor = 1 #server的加权比重,值越高,分得的请求越多
worker.tomcat1.redirect = tomcat2
#========tomcat2========
worker.tomcat2.port=18009 #ajp13 端口号,在tomcat下server.xml配置,默认8009
worker.tomcat2.host=localhost #tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat2.type=ajp13 #定向包协议
worker.tomcat2.lbfactor = 1 #server的加权比重,值越高,分得的请求越多
worker.tomcat2.redirect = tomcat1
#========controller,负载均衡控制器========
worker.controller.type=lb
worker.controller.balanced_workers=tomcat1,tomcat2 #指定分担请求的tomcat
worker.controller.sticky_session=1
第一行,worker.list,列出了worker的列表。Tomcat1, tomcat2就是我们为2个tomcat的命名。而controller相当于包工头。他负责对2个(或者更多)的worker进行负载分配。在上面提到的Mod_jk.conf文件中配置的对jsp请求的处理器就是controller.在这里再由controller具体将任务分配给某一个tomcat.
下面几行就是分别对worker的配置。Port, host等属性都需要根据tomcat的实际配置来填。
实际上,这里对tomcat还有一个属性可以进行配置,即worker.tomcat2.activation = disabled 。就是对某一个tomcat的活动性进行禁用。这句配置的意思是,负载均衡启动的时候,其实负载都到tomcat1上面去。Tomcat2默认不参与负载。当tomcat1当掉的时候,通过worker.tomcat1.redirect = tomcat2 ,tomcat2就会自己启动起来,接替tomcat1继续工作。当然,这样就和负载均衡没有关系了。
(5)到此,对apache的配置基本告一段落。如果集群中有更多的tomcat的话,请在worker.properties中进行配置。(注:当有6个tomcat进行集群的时候,为了提高性能, worker.properties中的 redirect和activation就可以起到作用。我们可以对tomcat两两配对,两两互相设置redirect,两个其中一个设置activation. 形成3对,这样,就可以处理意外宕机的情况,保证6台集群可以继续运行下去。)
4. Tomcat集群配置
将2个tomcat分别解压后,分别打开apache-tomcat-6.0.26 \conf\server.xml文件。
(1) 修改端口:
2个tomcat, 为了避免端口冲突,其中一个端口使用默认的,而另一个得修改。必须修改的端口如下:
以上3个地方都在前面加上一个“1”.就可以避免2个tomcat端口冲突。(注:这是tomcat6需要修改的端口。其他版本的tomcat可能不止要修改这些端口。总之冲突的端口均需要修改)
(2) 修改集群设置:
在<Engine>或<Host>元素下添加以下内容均可。
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="224.0.0.1"
port="45564"
frequency="500"
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="4001"
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>
按照apache tomcat官方文档上面的说法,对于tomcat6要做集群的话,只需要将<Engine>元素下的
<!--
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
-->
的注释符号去掉,启用这句配制就可以正常使用集群了。不过由于我搭建的测试环境2个tomcat是在同一台机子上面,因此只启用这个<Cluster>的话,这个元素下的默认Receiver port就会冲突。因此必须补全这些配置。
另外,按照官方文档里说明的<Cluster>的默认配置,<Membership>元素下的address属性默认值为228.0.0.4 . 这个配置在我的系统上始终会出现2个tomcat无法交换数据包的问题。需改成224.0.0.1才能正常使用。
需要而外注意的是,2个tomcat里添加到上面这段<Cluster>配置,其<Receiver>下的Port元素必需配置成不同的。如其中一个是4001,一个是4002.(tomcat默认可以检测到4000~4100之间的端口)。
(3)修改<Engine>的属性。
2个tomcat, jvmRoute分别配置成tomcat1和tomcat2,即和apache/conf里worker.properites配置文件中配置的worker名称对应。
5. Tlcom 集群配置:
(1) 修改tlcom的web.xml,添加 <Context distributable="true" />
所有需要集群的web项目,其web.xml中都必须添加<Context distributable="true" />
这个定义
(2) 将tlcom分别部署到2个tomcat中:
这里因为我沿用原来在tomcat上的开发方式,并不直接把项目放到tomcat/webapp目录下,而是通过将rone.xml和tlcom.xml两个配置文件放到apache-tomcat-6.0.26 A\conf\Catalina\localhost目录下
(3) 分别启动两个tomcat
可以在tomcat\bin目录下执行
来启动,也可以通过在eclipse中先将server配置好(配置对应的2个tomcat server),在eclipse中启动。
启动tomcat1:
和正常eclipse中启动一样,加载插件:
RONE初始化:
成功启动:
启动tomcat2:
启动过程和tomcat1一样,值得注意的是,在tomcat2启动的时候,tomcat1会打印出集群中加入member的提示:
(4) 启动apache.通过IP访问apache. 比如我的是 http://10.188.182.43 (这里80端口写不写是一样的)。
你会发现可能RONE都登陆不了,或者登陆了页面都无法正常打开。原因在于我们一开始配置的Mod_jk.conf文件。文件末尾的请求转发。我们只转发了jsp页面的请求,就是说apache只会把jsp页面的请求转发到2个tomcat上去。因此我们需要修改过滤的规则。我没有找到资料具体的各种规则应该怎么写,只能写一个大的过滤:
JkMount /* controller
JkMount /*.do controller
将mod_jk.conf末尾改成上面这样。重启apache,你就可以看到RONE登陆界面了
(5) 测试:
我们进行一下传输配置的验证。可以看到tomcat2的consol开始打印信息。那么这次操作负载均衡器就把请求发送到tomcat2上面去了。
验证完成
直接把tomcat2停止掉。可以在tomcat1的控制台中看到关于集群成员关闭的信息:
不要刷新页面,直接再次点击“全部验证”。可以看到,tomcat1上开始了验证业务。页面上没有出现异常,登陆用户的session也还在。业务处理透明地从tomcat2上转移到了tomcat1上去了。
6. 非本地访问apache
我这里会出现本地可以正常通过http://10.188.182.43/rone/portal访问apache,而从别的PC无法访问的情况。经检查是windows防火墙的配置问题。当然,我们不能直接去禁用防火墙,只能为防火墙新建一条规则开放80端口在可信的网络域中。
发表评论
-
Apache vs Tomcat
2012-03-22 23:23 894本质区别:1)apache支持静态页面;tomcat支持动态页 ... -
jrebel.jar
2010-10-09 14:44 1453jrebel.jar-noverify -javaagent ... -
web.xml中load-on-startup标签的含义
2010-09-16 10:25 845在servlet的配置当中,<load-on-start ... -
context-param和init-param区别
2010-09-16 10:19 1167web.xml里面可以定义两种参数:(1)applicatio ... -
状态码301和302
2010-08-02 10:38 2670先简要说一下重定向就 ... -
开源的项目tair 简介
2010-07-29 10:02 1572简介¶tair 是淘宝自己开发的一个分布式 key/value ... -
Eclipse中使用Tomcat的两种方式
2010-06-18 16:57 14161、直接配置Tomcat中的Server.xml,加入Cont ... -
Tomcat problem occured||WTP中Publishing failed:Resource /xxxx does not exist问题的解决
2010-06-17 14:28 1491使用WTP开发WEB程序,需要把WEB-INF/lib下的某个 ... -
Tomcat全攻略(TOMCAT详细教程)
2010-03-03 10:03 9375随着java的流行,其在web上的应用也越来越广,tomcat ... -
request.getRequestURL()和request.getRequestURI()
2009-12-25 10:40 8838先申明,我是自己琢磨出来的,不知道对不对!! 但是,我想应该不 ... -
WTP入门教程
2009-12-08 16:31 1581环境配置:Eclipse版本 eclipse-SDK-3.3. ... -
eclipse+wst+tomcat6.0搭建web开发环境
2009-12-08 16:28 2094最近发布的Eclipse3.3及其 ... -
eclipse下实现热部署,tomcat不重新reload context
2009-12-08 16:20 18051. 打开server的编辑器 2. 在modules页签内, ... -
tomcat 和 jboss的热部署(热发布)问题
2009-12-08 16:17 2075所谓的热部署(热发布)(下面称为“热部署”),就是说,在web ... -
tomcat-Context
2009-11-28 11:00 1077<Context>代表了运行在<Host&g ... -
在Eclipse中使用Tomcat插件的遇到的一些问题
2009-11-21 16:18 4244图片: Window-> ... -
Sysdeo Eclipse Tomcat Launcher plugin 中DevLoader的用处
2009-11-21 16:14 1684Sysdeo Eclipse Tomcat Launcher ... -
Devloader.zip
2009-11-21 16:14 1379Installation: The classes i ... -
org.apache.catalina.loader.DevLoader
2009-11-21 16:12 2637java.lang.ClassNotFoundExceptio ... -
tomcat中三种部署项目的方法
2009-10-06 00:47 1260在tomcat中三种部署项目 ...
相关推荐
ZooKeeper Linux 集群搭建流程可以分为四步:下载和解压 ZooKeeper、创建目录和 myid 文件、修改 ZooKeeper 启动配置文件、启动 ZooKeeper 节点。通过这些步骤,可以成功搭建 ZooKeeper Linux 集群,满足分布式系统...
"nginx+tomcat集群实例"是一种常见的Web服务架构,结合了Nginx的高效代理和负载均衡能力以及Tomcat对Java应用的良好支持。正确配置和管理这种架构,可以实现高并发、高可用的服务,满足大规模Web应用的需求。
ZZ-2021030 网络搭建与应用赛项赛卷《网络环境》.pdf
ZZ-2021030 网络搭建与应用赛项赛卷-网络搭建及安全部署竞赛报告单
base zz zz zz zz zz base zz zz zz zz zz base zz zz zz zz zz base zz zz zz zz zz
"ZZ-2022030网络搭建与应用全国职业院校技能大赛 赛项规程" 本赛项规程旨在选拔中等职业学校信息技术类网络搭建与应用方向优秀技术技能型人才,引领中职学校信息技术类专业建设与课程改革发展方向。该赛项通过真实...
它以其高性能、高可靠性、以及易用性和灵活性而著称,常被用来作为负载均衡器使用。本文将详细解析Nginx中geo模块的作用、用法以及配置负载均衡的示例。 geo模块是Nginx的一个指令,它能够根据客户端的IP地址设置...
在IT行业中,Tomcat是一个广泛使用的开源Java Servlet容器,它实现了Java EE的Web部分,包括Servlet和JSP规范。在本教程中,我们将探讨如何将Tomcat 5.5的admin应用部署到Tomcat 7.0上。这是一个常见的升级过程,...
在Linux环境下搭建Java、Tomcat和WebLogic服务器是IT领域常见的任务,这涉及到操作系统管理、JVM配置、应用服务器的安装与部署等多个知识点。以下是对这些主题的详细讲解。 首先,我们从Java的安装开始。Java是运行...
### PHP开发工具与环境搭建知识点概述 #### 一、PHP开发工具 **1.1 设计工具** - **ArgoUML**: Java编写的UML绘图工具,支持生成PHPstub,适合进行软件架构设计。 - **UmbrelloUML**: 需要在Unix/KDE环境下运行的...
### iOS开发环境搭建详解 #### 一、准备工作 在搭建iOS开发环境之前,我们需要进行一些必要的准备工作。首先,确保你的主机CPU支持Intel硬件虚拟化技术(IntelVT)。这是因为在虚拟机中安装macOS Snow Leopard...
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat ...
ZZ-2022030 网络搭建与应用赛项正式赛卷 2022-2023年的网络搭建与应用赛项赛题 参赛同学值得拥有
### 在Windows 10系统中搭建Rust语言开发环境详细介绍 #### 一、Rust语言简介 Rust是一门系统编程语言,它以其强大的安全特性而闻名,特别是针对并发安全问题有着独特的解决策略。该语言支持多种编程范式,包括...
在准备2024年的嵌入式面试过程中,掌握如何...通过以上内容的学习和理解,相信能够为准备2024年嵌入式面试的求职者们提供有力的支持,不仅能够成功搭建起自己的开发环境,还能够在面试中更加自信地展示自己的专业技能。
ZZ-2021030 网络搭建与应用赛项赛卷《技能要求》
2019年网络搭建与应用国赛样题1,完整操作及配置文件与防火墙截图已经具备,需注意的是,该样题交换机生成树部分是难点,其他相对简单。