Apache+Tomcat 整合及负载均衡 二 (原创)

如果转载,请表明出处,谢谢!


在上一篇里面实现了Apache和Tomcat的整合,在这一篇里记录他们的更高级的应用——负载均衡。

由于条件有限,我这次的实验室在一台机子上用一个apache当代理跑两个tomcat。所以两个tomcat的端口都需要更改以避免冲突,以下是步骤:

PS:开始前,一定记得完成上一篇里面的复制两份tomcat的操作


1.打开C:\apache-tomcat-5.5.25Server1 重命名 webapps和temp文件夹。因为tomcat默认会加载这里面的应用,而我们这里是把应用放到C:\Project\目录下去,并设置为tomcat开启时默认进行编译的应用文件夹。为了进行测试,我们在C:\Project下面建立ROOT文件夹,写入index.html:

 Hello!

<A HREF="\xplanner" >xplanner</A>

注:xplanner这个超链接是指向C:\Project目录下的xplanner文件夹的web应用。


2. 在C:\apache-tomcat-5.5.25Server1 \conf\Catalina\localhost\下添加ROOT.xml:

 <?xml version="1.0" encoding="utf-8"?>
<Context path="" docBase="C:\Project"  distributable="true"
         displayName="tomcat1" debug="0" privileged="true"
         antiResourceLocking="false" antiJARLocking="false">

 <!—Default set of monitored resources -->

 <WatchedResource>WEB-INF/web.xml</WatchedResource>

</Context>

注:

这里有一个属性 distributable="true"是为了实现集群session共享。

另外,在tomcat\conf\Catalina\localhost下面建立这个ROOT.xml是为了让tomcat的默认根目录是打开我的工程项目文件夹:C:\Project  ,这样我这个文件夹下所有的文件都可以被TOMCAT编译。

要注意!这里的文件名不能随便取,文件名对应的是Context的path,即URL里面的虚拟路径,如我设置的文件名不叫ROOT.xml,而叫ROOT1.xml,那么当你输入"http://localhost的时候,出来的就不是自己设置的根目录!!一定要把文件名和path一致!!比如我URL路径为/test那么对应的文件名是test.xml,那么找的就是C:\Project\test!!

 


3. 对另外一份tomcat的进行同样的修改,然后修改...\conf\下的server.xml文件:

 操作

 默认

 tomcat1

 tomcat2

 Server port

 8005

 10005

 20005

 AJP1.3 port

8009 

10009 

20009 

Http connector port 

8080 

 10001

20001 

 Redirect port

8443 

10043 

20043 

 TcpListenport

4001 

10011 

 20011

 jvmRoute

jvm1

tomcat1

 tomcat2

 注: 这里一定要注意 jvmRoute !! 这里的名字一定要和下面的workers.properties里面的worker名字一致!!否则,即使实现了负载均衡,但是无法进行session绑定,那么,同一用户会在两台server上跳来跳去!


4. 修改apache目录下的conf\workers.properties (在上一篇里面创建的):

worker.list=bls,status
worker.tomcat1.port=10009
worker.tomcat1.host=localhost
worker.tomcat1.type=ajp13
#worker.tomcat1.lbfactor = 3

worker.tomcat2.port=20009
worker.tomcat2.host=localhost
worker.tomcat2.type=ajp13
#worker.tomcat2.lbfactor = 1

worker.bls.type=lb
worker.retries=3
worker.bls.balanced_workers=tomcat1,tomcat2
worker.bls.sticky_session=1

worker.status.type=status

注:

worker.list=bls,status    这里把上一篇里面的tomcat改为bls是为了实现负载均衡,这里没有必要把所有的tomcat都写上,因为httpd.conf里面其实用不到他们

worker.tomcat1.lbfactor=3  这个是server的加权比重,值越高,分得的请求越多.如果两个的lbfactor设置为一样,那么收到的请求会一人一半。这里设置为3:1开,那么四个请求1号处理三个。如果不设置这条语句,那么默认为永远不跳,即一个session永远在一个server上。

worker.bls.type=lb               这里申明bls是一个负载均衡类型

worker.bls.balanced_workers  指出均衡服务器

其他的请参看第一篇


5. 修改apache/conf/httpd.conf:

 <VirtualHost *:80>
    ServerAdmin admin@localhost
    DocumentRoot "C:\Project"
    ServerName localhost
    ErrorLog logs/localhost-error_log
    CustomLog logs/localhost-access_log common
</VirtualHost>

其他请参见上一篇。

这里值得一提的是 DocumentRoot文件夹,我发现一个很让人郁闷的地方,当利用apache作为代理时,用户去访问http://localhost:80时,apache实际上是去找DocumentRoot下面的ROOT文件夹,如果文件夹下没东西甚至没有这个文件夹,或者你给它指定另外的文件夹,比如“C:\Project\test”,只要test下面没有ROOT文件夹,都会返回找不到网页!!Apache+Tomcat 整合及负载均衡 二 (原创) - Edison - 飞所以这里一定要注意,在C:\Project下面一定要有一个ROOT来存放默认项目。之前在写ROOT.xml时也有叙述!


 好,现在我们进行第一次测试。在C:\Project\ROOT下面建立文件test.jsp:

 Check the CMD,dude!
And you will found "Jump@Jump@Jump@!"
<%
 System.out.println("Jump@Jump@Jump@!");
%>

然后分别启动两个tomcat和apache,打开IE键入 http://localhost,可以看到之前写的

Hello!

xplanner 

说明整合依然有效。

然后再键入http://localhost/test.jsp 看到

 Check the CMD,dude!

And you will found "Jump@Jump@Jump@!"

去tomcat的运行命令行窗口,可以看到出现 Jump@Jump@Jump@!  Apache+Tomcat 整合及负载均衡 二 (原创) - Edison - 飞

回到IE,刷新页面,可以看到这句话分别在两个tomcat的窗口出现!!

这就是session没有绑定的后果……Apache+Tomcat 整合及负载均衡 二 (原创) - Edison - 飞

如何修改呢?


再次回到tomcat/conf/server.xml

找到<Cluster .... > 把这句的注释去掉。记住!两个tomcat都要改!

OK,再次运行。这次你不停的刷新只会发现只在一个tomcat下面显示Jump@Jump@Jump@! 

大功告成!!Apache+Tomcat 整合及负载均衡 二 (原创) - Edison - 飞

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值