如果转载,请表明出处,谢谢!
在上一篇里面实现了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"?> <!—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.tomcat2.port=20009 worker.bls.type=lb 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文件夹,都会返回找不到网页!!所以这里一定要注意,在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@!"); %> |
Hello! xplanner |
说明整合依然有效。
然后再键入http://localhost/test.jsp 看到
Check the CMD,dude! And you will found "Jump@Jump@Jump@!" |
去tomcat的运行命令行窗口,可以看到出现 Jump@Jump@Jump@!
回到IE,刷新页面,可以看到这句话分别在两个tomcat的窗口出现!!
这就是session没有绑定的后果……
如何修改呢?
再次回到tomcat/conf/server.xml
找到<Cluster .... > 把这句的注释去掉。记住!两个tomcat都要改!
OK,再次运行。这次你不停的刷新只会发现只在一个tomcat下面显示Jump@Jump@Jump@!
大功告成!!