您的位置:首页 > 运维架构 > Tomcat

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

2013-07-25 12:19 330 查看
如果转载,请表明出处,谢谢!

在上一篇里面实现了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文件夹,都会返回找不到网页!!

所以这里一定要注意,在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@!



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

这就是session没有绑定的后果……


如何修改呢?

再次回到tomcat/conf/server.xml

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

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

大功告成!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: