Apache负载Tomcat集群部署方法
1.部署约定
使用普通用户tsaip安装,确保安装时,用户有权限操作指定目录。
2.软件列表
httpd-2.2.24.tar.gz
tomcat-connectors-1.2.37-src.tar.gz
apache-tomcat-7.0.23.tar.gz
3.软件安装
搭建的集群有两个tomact节点外加一个apache组成,三者将安装在同一机器上:
apache: 安装路径:/usr/local/apache2 (可选但需权限) 端口:10080
tomcat1:安装路径:/usr/local/apache-tomcat-7.0.23.-1 端口:18080
tomcat2:安装路径:/usr/local/apache-tomcat-7.0.23.-2 端口:28080
3.1 安装apache
1.进入下载好的httpd-2.2.24.tar.gz文件所在目录,执行解压操作:
tar -zxvf httpd-2.2.24.tar.gz
2.进入解压出的文件夹根目录:
cd httpd-2.2.24
3.进行编译参数配置:
./configure --prefix=/usr/local/apache2--enable-mods-shared=all
4.编译安装:
make
make install
5.启动和关闭apache
完成上述步骤后,apache的安装就结束了,通过下面的命令启动和关闭apache:
启动:
/usr/local/apache2/bin/apachectlstart
关闭:
/usr/local/apache2/bin/apachectlstop
3.2 安装Apache Tomcat Connector(mod_jk)
1.进入下载好的tomcat-connectors-1.2.37-src.tar.gz文件所在目录,执行解压操作:
tar -zxvf tomcat-connectors-1.2.37-src.tar.gz
2.进入解压出的文件夹下的native子目录:
cd tomcat-connectors-1.2.37-src/native
3.进行编译参数配置:
./buildconf.sh
./configure --with-apxs=/usr/local/apache2/bin/apxs\
--with-java-home=$JAVA_HOME --with-java-platform=2 \
--enable-jni
4.编译安装:
make
make install
如果成功结束,可以在/usr/local/apache2/modules/下找到mod_jk.so文件。
3.3 安装tomcat
两次解压apache-tomcat-7.0.23.tar.gz,并分别重命名为apache-tomcat-7.0.23-1和apache-tomcat-7.0.23-2
4.集群配置
4.1 配置tomcat
1.修改端口
对于tomcat配置主要集中在conf/server.xml文件上。
Tomcat1中shutdown端口改为18005,HTTP端口改为18080,AJP端口改为18009。
Tomcat2中shutdown端口改为28005,HTTP端口改为28080,AJP端口改为28009。
2.开启tomcat集群支持
同样是在conf/server.xml文件里,进行两处改动:
改动1:为<Engine>设置jvmRoute
修改<Engine name="Catalina"defaultHost="localhost">
Tomcat1设为<Engine name="Catalina"defaultHost="localhost" jvmRoute="tomcat1">
Tomcat2设为<Engine name="Catalina"defaultHost="localhost" jvmRoute="tomcat2">
改动2:在<Engine/>中添加关于集群的配置
把以下配置复制到<Engine/>中
<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>
4.2 配置apache
打开apache安装目录下的conf/httpd.conf文件
修改Listen 和ServerName两项,改成
Listen 10080
ServerName 135.33.88.228:10080
并在文件最后追加以下内容:
1 # Load mod_jk module
2 LoadModulejk_module modules/mod_jk.so
3 # Specifyjk log file.
4 JkLogFilelogs/mod_jk.log
5 # Specifyjk log level [debug/error/info]
6 JkLogLevelinfo
7 # Specifyworkers.properties, this file tell jk:
8 # howmany nodes and where they are.
9 JkWorkersFileconf/workers.properties
10 # Specify which requests should handled bywhich node.
11 JkMount /* controller
在apache安装目录下的conf目录下创建workers.properties文件,文件的内容如下:
1 #所有节点列表,其中controller是一个逻辑结点,负责负载均衡控制,
2 #如果JkMount中的URL指定给了controller就表示这个请求会被自动散列到某个物理节点上。
3 #注意:真正负责处理请求的tomcat的名称(这里就是tomcat1,tomcat2)必须于它们在conf/server.xml
4 #文件中配置的jvmRout的属性值是一致的!
5 worker.list= controller,tomcat1,tomcat2
6
7 #========tomcat1========
8 worker.tomcat1.port=18009
9 worker.tomcat1.host=135.33.88.228 (部署机器的ip)
10 worker.tomcat1.type=ajp13
11 worker.tomcat1.lbfactor = 1
12 #========tomcat2========
13 worker.tomcat2.port=28009
14 worker.tomcat2.host=135.33.88.228 (部署机器的ip)
15 worker.tomcat2.type=ajp13
16 worker.tomcat2.lbfactor = 1
17
18 #========controller,负载均衡控制器========
19 worker.controller.type=lb
20 worker.controller.balance_workers=tomcat1,tomcat2
21 worker.controller.sticky_session=1
5.测试验证
在两个tomcat中分别部署一个组合服务引擎的war包,确保两个tomcat中的服务引擎的包名称相同,分别启动两个tomcat和apache。
1.验证tomcat部署正确:
访问http://IP:18080/组合服务引擎的包名/cxf/Orchservice?wsdl,能正常打开wsdl。访问http://IP:28080/组合服务引擎的包名/cxf/Orchservice?wsdl,能正常打开wsdl。
2.验证apache启动正确:
访问http://IP:10080/组合服务引擎的包名/cxf/Orchservice?wsdl,能正常打开wsdl。
6.错误处理
关于在安装apache过程中报Cannot use an external APR withthe bundled APR-util错误的解决办法
有时候,在安装apache,执行./configure操作时会报这个错误,解决方法是安装apache2.2.x自身携带的apr,方法为:
1.自源码安装目录httpd-2.2.24进入apache2.2.x自带apr的安装目录
cdsrclib/apr
2.安装apr(此处将之安装在/usr/local/apr下,如果系统中已经安装apr,可找到安装目录进行覆盖)
./configure--prefix=/usr/local/apr
make
make install
3.安装apr-util
./configure--prefix=/usr/local/apr-util --with-apr=/usr/local/apr
make
make install
4.使用新安装的apr重新进行apache编译配置
放回安装根目录httpd-2.2.24,执行:
./configure--prefix=/usr/local/apache2 \
--enable-mods-shared=all \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr-util/bin