Apache与Tomat集群

来源:互联网 发布:php冒泡排序算法 编辑:程序博客网 时间:2024/06/01 13:54

这篇文章主要参考《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;


0 0