随笔-1  评论-68  文章-98  trackbacks-0
作者:徐建祥(netpirate@gmail.com
时间:2007-4-19
网址:http://www.anymobile.org

索引 

0、工作原理
1、软件准备
       1.1 软件条目
       1.2 安装JDK
       1.3 安装Tomcat
       1.4 安装Apache
2、配置Tomcat集群
       2.1 修改Tomcat默认应用
       2.2 添加ROOT应用
       2.3 修改server.xml
       2.4 修改web.xml
3、配置Apache HTTP代理
4、优化Tomcat配置
       4.1 屏蔽HTTP Connector
       4.2 配置虚拟主机
       4.3 配置GBK编码
5、测试程序 

0、工作原理 

     Apache(HTTP Server)2.2新增了代理服务器(Proxying)功能:新的代理均衡模块(mod_proxy_balancer)提供负载均衡服务;AJP 1.3(Apache JServ Protocol)替代jk/jk2等连接器与Tomcat通信。
    结合Tomcat的集群(Cluster)功能,服务器结构如下:

    Load Balancer(Apache 2.2 Proxy)
         /           \
      Cluster1      Cluster2
      /     \        /     \
 Tomcat1 Tomcat2 Tomcat3 Tomcat4

注:绿色部分为本文采用的配置情况。

1、 软件准备

1.1    软件条目

操作系统              WinXP/Win2003

JDK_5.0               http://java.sun.com/javase/downloads/index_jdk5.jsp (MSI Installer)
Apache_2.2.4        http://httpd.apache.org/download.cgi (MSI Installer)
Tomcat_5.5.23      http://tomcat.apache.org/download-55.cgi (Core Zip)

 

1.2    安装JDK
安装至目录 D:\Java\jdk1.5.0 下,设置JAVA_HOME/CLASSPATH/PATH,略。

1.3    安装Tomcat
解压缩Zip文件至目录 D:\Apache\Tomcat 5.5.23_S1 下;待配好后,复制到D:\Apache\Tomcat 5.5.23_S2,修改相关的端口和路径。

1.4    安装Apache
安装至目录 D:\Apache\Apache2.2 下,可在Tomcat集群配置完成后再安装。

2、 配置Tomcat集群

2.1 修改Tomcat默认应用

删除$CATALINA_HOME/webapps和$CATALINA_HOME/temp目录;
将文件夹$CATALINA_HOME/conf/Catalina改名为Standalone。

2.2 添加ROOT应用

$CATALINA_HOME/conf/Standalone/localhost/ROOT.xml

<?xml version=”1.0” encoding=”utf-8”?>
<Context path=”” docBase=”E:\Project\wwwroot”
         displayName=”Tomcat 1” debug=”0” privileged=”true” 
         antiResourceLocking=”false” antiJARLocking=”false”>

 <!—Default set of monitored resources -->

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

</Context>


2.3 修改server.xml

$CATALINA_HOME/conf/server.xml

操作步骤

默认

Tomcat 1

Tomcat 2

2.3.1 修改Server端口

8005

10005

20005

2.3.2 修改AJP Connector端口

     Apache JServ Protocol 1.3

8009

10009

20009

2.3.3 修改HTTPConnector端口

8080

10001

20001

2.3.4 修改redirectPort端口

8443

10043

20043

2.3.5 屏蔽Catalina,打开Standalone,并修改jvmRoute的值为Tomcat1/Tomcat2

2.3.6打开Cluster,修改tcpListenPort

4001

10011

20011

2.4 修改web.xml 

$CATALINA_HOME/conf/web.xml

(添加)<distributable/>

        或者

$CATALINA_HOME/conf/Standalone/*/ROOT.xml

(设置)<Context distributable="true" …/>

        设置集群,session共享。

3、 配置Apache HTTP代理,实现负载均衡

有三种方法实现Tomcat的负载均衡:

a. 使用JK本地连接器(Tomcat-Apache通信插件,JServ->JK->JK2->AJServP);
b. 使用2.x版本的Aache HTTP服务器的代理模块;
c. 使用Tomcat的blancer web应用。

$APACHE_HOME/conf/httpd.conf

# 添加下面这段代码
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_http_module modules/mod_proxy_http.so

ProxyRequests Off

ProxyPass / balancer://myCluster/
<Proxy balancer://myCluster/>
       BalancerMember ajp://localhost:10009 route=Tomcat1
       BalancerMember ajp://localhost:20009 route=Tomcat2
</Proxy>

 
       至此,Apache和Tomcat已经安装、配置完毕,可以依次运行两个Tomcat(/bin/startup.bat)和Apache程序(Apache Monitor)。

注:
(1) 若系统设置了系统变量CATALINA_HOME,需修改/bin/startup.bat,屏蔽下面的代码:
#if not "%CATALINA_HOME%" == "" goto gotHome
(2) Apache只是一个代理服务器,所有的请求全部转至Tomcat处理,故启用ROOT应用。

4、 优化Tomcat配置

4.1 屏蔽HTTP Connector

 

<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
<!--
<Connector port="8080" …/>
-->

<!-- Define a SSL HTTP/1.1 Connector on port 8443 -->
<!--
<Connector port="8443" …/>
-->


4.2 配置虚拟主机

4.2.1 编辑server.xml的Engine,添加Host信息

$CATALINA_HOME/conf/server.xml

<Engine name="Standalone" defaultHost="localhost" jvmRoute="Tomcat1">

       <Host name="localhost" appBase="webapps" …>… …</Host>

       <Host name="www.site.com" appBase="webapps/www.site.com"/>

    <Host name="www.site.net" appBase="webapps/www.site.net"/>

</Engine>

4.2.2 创建虚拟主机对应的Webapp目录

 

$CATALINA_HOME/webapps/www.site.com

$CATALINA_HOME/webapps/www.site.net

均为空目录

4.2.3 创建虚拟主机   

$CATALINA_HOME/conf/Standalone/www.site.com/ROOT.xml

$CATALINA_HOME/conf/Standalone/www.site.net/ROOT.xml

<?xml version="1.0" encoding="utf-8"?>

<Context path="" docBase="E:\Project\{site name}" …>

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

</Context>

另一个Tomcat Node也做类似的修改,并分别重启两个Tomcat。

4.3 配置GBK编码

 

$CATALINA_HOME/conf/server.xml

    <!-- Define an AJP 1.3 Connector on port 10009 -->

    <Connector port="10009" URIEncoding="GBK"

               enableLookups="false" redirectPort="10443" protocol="AJP/1.3" />


5、测试程序 

init.jsp

<%

session.setAttribute("name",request.getParameter("name"));

out.println("success!" + session.getId());

%>

testRoute.jsp

<%

String test = session.getId() + " - " + session.getAttribute("name");

System.out.println( new java.util.Date() + ":" + test);

out.println( test );

%>

访问 http://localhost/init.jsp?name=HAHA(只须执行一次)
访问 http://localhost/testRoute.jsp
访问多次就可以发现,两个Tomat服务器是均衡的,且session共享。
 

另外,还可以设置路由JSESSIONID

$CATALINA_HOME/conf/server.xml

<!-- sessionIdAttribute default attribute name is

 org.apache.catalina.cluster.session.JvmRouteOrignalSessionID.

 JSESSIONID.{orignal node id} à

<Valve className="org.apache.catalina.cluster.session.JvmRouteBinderValve"

       enabled="true" sessionIdAttribute="takeoverSessionid"/>

<ClusterListener className="org.apache.catalina.cluster.session.JvmRouteSessionIDBinderListener" />

 

参考资料
       Apache Proxy Module    http://httpd.apache.org/docs/2.2/mod/mod_proxy.html
       Apache Balancer Module       http://httpd.apache.org/docs/2.2/mod/mod_proxy_balancer.html
       Tomcat 5.5 Load Balancer     http://tomcat.apache.org/tomcat-5.5-doc/balancer-howto.html
       Tomcat 5.5 Clustering/Session Replication   http://tomcat.apache.org/.../cluster-howto.html
       Apache Tomcat 5.5 Proxy     http://tomcat.apache.org/tomcat-5.5-doc/proxy-howto.html

(全文完)
[补][推荐]Apache HTTP Server 与 Tomcat 的三种连接方式介绍(刘 冬@IBM) http://www-128.ibm.com/developerworks/cn/opensource/os-lo-apache-tomcat/index.html
posted on 2007-04-23 16:56 Xu Jianxiang 阅读(6217) 评论(6)  编辑  收藏 所属分类: Open SourceServer Side

评论:
# re: Windows 2003下配置Apache代理Tomcat集群 2007-05-26 17:25 | Rocan
你好,非常感谢你提供的这种方法,我已经配置成功,但是你在文章中提到"Apache只是一个代理服务器,所有的请求全部转至Tomcat处理"
那么,我想再整合PHP是不是就不行了  回复  更多评论
  
# re: Windows 2003下配置Apache代理Tomcat集群 2007-06-02 16:07 | netpirate
再架一套Apache+PHP,转换相关请求到新的Apache。Try,:)  回复  更多评论
  
# re: Windows 2003下配置Apache代理Tomcat集群 2007-06-05 01:56 | Xu Jianxiang
to Rocan:
Windows 2003下配置Apache虚拟主机 http://www.blogjava.net/anymobile/articles/122026.html  回复  更多评论
  
# re: Windows 2003下配置Apache代理Tomcat集群 2007-07-06 11:39 | hills

  你好!

  我问一下,如果Tomcat1中保存了个session,如果Tomcat1崩溃了或被关闭停止了,那么这个session可以被复制到Tomcat2中吗?可以继续使用这个session吗?

  谢谢!  回复  更多评论
  
# re: Windows 2003下配置Apache代理Tomcat集群 2007-07-18 09:27 | netpirate
session是一样的,:)  回复  更多评论
  
# re: Windows 2003下配置Apache代理Tomcat集群 2007-11-06 16:46 | jdonee
收藏了  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: