这篇文章主要参考《tomcat权威指南》相关章节,我只是进行里安装实验,前端使用apache作为负载均衡服务器,后端使用tomcat作为web服务器。
1.架构图如下:
2.系统软件:
(1) 操作系统:CentOS5.1
(2) 前端负载均衡:Apache HTTTP server2.x
(3)Web容器:apache-tomcat-6.0.16
(4)JDK:jdk1.6
3. Apache服务器安装:
#./configure--prefix=/usr/local/apache --enable-modules=so
--enable-mods-shared=all--enable-proxy --enable-proxy-connect --enable-proxy-ftp --enable-proxy-http--enable-proxy-ajp --enable-proxy-balancer --enable-rewrite
注释:激活tomcat集群需要的 enable-proxy,enable-proxy-http,enable-proxy-connect,enable-proxy-ajp和enable-proxy-balancer,其中proxy-ajp和proxy-balancer必须依赖proxy,如果是自定义的编译除了以上几个必须的模块外,mod_status也要编译进去,切记。enable-proxy-ftp可以不编译。
#make;makeinstall
制作Apache启动项:
#cpsupport/apachectl /etc/rc.d/init.d/httpd
#vi/etc/rc.d/init.d/httpd
添加以下内容:(包括#号)
#Startup script for the Apache Web Server
#chkconfig: 2345 85 15
#description: Apache is a World Wide Web server .It is used to server
# HTMLfiles and CGI.
#processname: httpd
#pidfile: /usr/local/apache/log/httpd.pid
#config: /usr/local/apache/conf/httpd.conf
增加服务项
#chkconfig--add httpd
#chmod755 /etc/rc.d/init.d/httpd
#chkconfig--level 345 httpd on
4.安装JDK:
#chmoda+x jdk-6u4-linux-i586-rpm.bin
#./jdk-6u4-linux-i586-rpm.bin
JAVA环境变量设置:
#vi/etc/profile
在文件最后添加以下内容:
JAVA_HOME=/usr/java/jdk1.6.0_04
CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
PATH=$JAVA_HOME/bin:$PATH
CATALINA_HOME=/usr/local/tomcat
exportJAVA_HOME CLASSPATH PATH CATALINA_HOME
执行如下命令使环境变量生效:
source/etc/profile
测试配置是否成功:
java–version
5.安装tomat#tarzxvf apache-tomcat-6.0.16.tar.gz
#mvapache-tomcat-6.0.16 /usr/local/tomcat
Tomcat随机启动:
#vi /etc/rc.local
添加以下内容:
/usr/local/tomcat/bin/startup.sh
tomcat6配置文件server.xml:
把
<!--You should set jvmRoute to support load-balancing via AJP ie :
<Enginename="Standalone" defaultHost="localhost"jvmRoute="jvm1">
-->
<Enginename="Catalina" defaultHost="localhost">
改成
<!-- You should set jvmRoute to supportload-balancing via AJP ie :
-->
<Enginename="Standalone" defaultHost="localhost"jvmRoute="tomcatX">
<!--
<Enginename="Catalina" defaultHost="localhost">
-->
说明:
第一台tomcat就把jvmRoute="tomcat1"
第二台tomcat就把jvmRoute="tomcat2"
把
<!--
<ClusterclassName="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
-->
去掉注释变为
<ClusterclassName="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
<ClusterclassName="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="8">
<ManagerclassName="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<ChannelclassName="org.apache.catalina.tribes.group.GroupChannel">
<MembershipclassName="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
<ReceiverclassName="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="4000"
autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>
<SenderclassName="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<TransportclassName="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
<InterceptorclassName="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<InterceptorclassName="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
</Channel>
<ValveclassName="org.apache.catalina.ha.tcp.ReplicationValve"
filter=""/>
<ValveclassName="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
<DeployerclassName="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
<ClusterListenerclassName="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
<ClusterListenerclassName="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
配置应用的web.xml:
在每个webapps应用中,修改配置文件web.xml文件 添加元素<distributable/>
在web.xml文件中<web-app>元素下增加以下内容:
<!--此应用将与群集服务器复制Session-->
<distributable/>
具体修改如下:
修改前:
<?xmlversion="1.0" encoding="ISO-8859-1"?>
<web-appxmlns="[url]http://java.sun.com/xml/ns/javaee[/url]"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee[url]http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd[/url]"
version="2.5">
</web-app>
修改后:
<?xmlversion="1.0" encoding="ISO-8859-1"?>
<web-appxmlns="[url]http://java.sun.com/xml/ns/javaee[/url]"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee[url]http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd[/url]"
version="2.5">
<!--此应用将与群集服务器复制Session-->
<distributable/>
</web-app>
配置apache的ajp负载均衡功能:
确保将以下Module的注释去掉
LoadModuleproxy_module modules/mod_proxy.so
LoadModuleproxy_connect_module modules/mod_proxy_connect.so
LoadModuleproxy_ftp_module modules/mod_proxy_ftp.so
LoadModuleproxy_http_module modules/mod_proxy_http.so
LoadModuleproxy_ajp_module modules/mod_proxy_ajp.so
LoadModuleproxy_balancer_module modules/mod_proxy_balancer.so
LoadModulestatus_module modules/mod_status.so
增加以下内容:
#Proxypass Config
Includeconf/extra/httpd-modproxy.conf
建立文件httpd-modproxy.conf输入内容:
<Location/server-status>
SetHandlerserver-status
OrderDeny,Allow
Denyfrom all
Allowfrom all
</Location>
<Location/balancer-manager>
SetHandlerbalancer-manager
OrderDeny,Allow
Denyfrom all
Allowfrom all
</Location>
ProxyRequestsOff
ProxyPass/ balancer://tomcatcluster stickysession=jsessionid nofailover=On
<Proxybalancer://tomcatcluster>
BalancerMember[url]http://192.168.232.5:8080[/url] loadfactor=1
BalancerMember[url]http://192.168.232.6:8080[/url] loadfactor=2
</Proxy>
注释:
ProxyRequestsOff 表示启用反向代理,必须开启;
ProxyPass为代理转发的Url,即将所有访问/的请求转发到群集balancer://tomcatcluster,这里为/即将所有访问/的请求转发到群集balancer://tomcatcluster的/test目录;
BalancerMember为群集的成员,即群集服务器1或2,负载均衡服务器会根据均衡规则来将请求转发给BalancerMember;