作者:徐建祥(
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 软件条目
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 阅读(6234)
评论(6) 编辑 收藏 所属分类:
Open Source 、
Server Side