tomcat集群搭建

tomcat

1、准备

1-1apr安装

./configure --prefix=/usr/local/apr

make && make install

1-2apr-util安装

./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr

make && make install

1-3apache安装

./configure --prefix=/data/apache --enable-rewrite --enable-so --with-apr=/data/app/apr --with-apr-util=/data/app/apr-util --with-pcre=/data/app/pcre

make && make install

1-4pcre安装

./configure --prefix=/usr/local/pcre

make && make install

1-5mod.jk安装

tar -zxvf tomcat-connectors-1.2.32-src.tar.gz

cd tomcat-connectors-1.2.32-src/native

./buildconf.sh
./configure --with-apxs=/usr/local/apache2/bin/apxs --with-java-home=$JAVA_HOME --with-java-platform=2 --enable-jni

make && make install

如果成功结束,你可以在/usr/local/apache/modules/下找到mod_jk.so文件。

2、部署

2-1、安装tomcat

tar zxvf

2-2、配置apache

vim conf/httpd.conf

LoadModule jk_module modules/mod_jk-1.2.26-httpd-2.2.4.so   //表示载入JK模块
JkWorkersFile conf/workers.properties    //tomcat实例配置
JkMount /* controller       //设置apache分发器,/*表示apache将所有文件都由分发器controller 进行分发,你可以自行设置*.jsp,*.do

vim conf/ workers.properties

worker.list=controller   
#Tomcat1实例配置   
worker.tomcat80.host=10.71.144.80
worker.tomcat80.port=8009    //ajp的端口
worker.tomcat80.type=ajp13  
# 分发权重 值越大负载越大   
worker.tomcat1.lbfactor = 1   


#Tomcat2实例配置   
worker.tomcat81.host=10.71.144.81
worker.tomcat81.port=8009  
worker.tomcat81.type=ajp13  
# 分发权重 值越大负载越大   
worker.tomcat81.lbfactor = 1  

worker.lbcontroller.type=lb   
worker.lbcontroller.balance_workers=tomcat80,tomcat81,tomcat82
worker.lbcontroller.sticky_session=True  

这里就是tomcat80tomcat82必须与之后tomcat中的server.xmljvmRoute值一致

2-3、配置tomcat

vim conf/server.xml

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat35">

……

<Cluster

className="org.apache.catalina.ha.tcp.SimpleTcpCluster"

                 channelSendOptions="8">

  <Manager

className="org.apache.catalina.ha.session.DeltaManager"

   expireSessionsOnShutdown="false"

   notifyListenersOnReplication="true"/>

  <Channel

className="org.apache.catalina.tribes.group.GroupChannel">

<Membership

className="org.apache.catalina.tribes.membership.McastServi

ce"

address="228.0.0.4"

port="45564"

frequency="500"

dropTime="3000"/>

<Receiver

className="org.apache.catalina.tribes.transport.nio.NioRece

iver"

  address="auto"

  port="4000"

  autoBind="100"

  selectorTimeout="5000"

  maxThreads="6"/>

<Sender

className="org.apache.catalina.tribes.transport.Replication

Transmitter">

  <Transport

className="org.apache.catalina.tribes.transport.nio.Poole

dParallelSender"/>

</Sender>

<Interceptor

className="org.apache.catalina.tribes.group.interceptors.Tc

pFailureDetector"/>

<Interceptor

className="org.apache.catalina.tribes.group.interceptors.Me

ssageDispatch15Interceptor"/>

  </Channel>

  <Valve

className="org.apache.catalina.ha.tcp.ReplicationValve"

 filter=""/>

  <Valve

className="org.apache.catalina.ha.session.JvmRouteBinderValve

"/>

  <Deployer

className="org.apache.catalina.ha.deploy.FarmWarDeployer"

tempDir="/tmp/war-temp/"

deployDir="/tmp/war-deploy/"

watchDir="/tmp/war-listen/"

watchEnabled="false"/>

  <ClusterListener

className="org.apache.catalina.ha.session.JvmRouteSessionIDBi

nderListener"/>

  <ClusterListener

className="org.apache.catalina.ha.session.ClusterSessionListe

ner"/>

</Cluster>

2-4session复制

tomcat集群中的 session管理,主要有两种方式:
1).粘性session
表示从同一窗口发来的请求都将有集群中的同一个tomcat进行处理。配 置方式是在上面workers.properties文件中
worker.lbcontroller.sticky_session=True   
粘性session的好处在不会在不同的tomcat上来回跳动处理请求,但是坏处是如果处理该sessiontomcat崩溃,那么之后 的请求将由其他tomcat处理,原有session失效而重新新建一个新的session,这样如果继续从session取值,会抛出 nullpointer的访问异常。
2).session复制
session复制是指tomcat彼此之间通过组播方式将session 发到各个tomcat实例上,如果其中一个访问出错,则另外tomcat仍然具有有效的session内容,从而能正常接管其session。坏处是当 tomcat实例很多,或者用户在session中有大量操作时,组播发送的信息量十分惊人。session复制配置则是在发布的web应用程序中的 web.xml中添加
<distributable/>
此外,session复制所需的JDK必须是JDK 5.0及其以上版本

注:单机部署多个tomcat需要改端口

2-5、启动

1apache

……/apache/bin/apachectl start

……/apache/bin/apachectl stop 关闭

2tomcat

……/tomcat-xxx/bin/startup.sh

……/tomcat-xxx/bin/shutup.sh 关闭

3error

3-1安装apahce

问题:

configure: error: APR not found. Please read the documentation 

解决:

安装apr apr-util

3-2、安装aprapr-util

问题:

执行make命令时报错

xml/apr_xml.c:35:19: error: expat.h: No such file or directory

……

make[1]: * [xml/apr_xml.lo] Error 1
make[1]: Leaving directory `/root/Downloads/apache_svn/apr-util-1.6.0'
make: * [all-recursive] Error 1

解决:

yum install expat-devel

3-3、安装apr

问题:

编译APR包的时候在执行configure可能会出现 rm: cannot remove `libtoolT': No such file or directory

解决:

编辑configure这个文件,将 $RM “$cfgfile” 那行注释掉 ,然后重新编译即可。

3-4apache启动

问题:

AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 192.168.58.135. Set the 'ServerName' directive globally to suppress this message

vim  .../apache/conf/httpd.conf

#ServerName www.example.com:80

ServerName localhost:80

4、日志

4-1.catalina.日期.log

  这个主要是记录tomcat启动时候的信息,类似于我们在eclipse中启动服务的时候在控制台看到的信息。在里面可以看到启动的JVM参数以及操作系统等日志信息。如果没有使用log4j等日志机制,系统的的错误信息与打印语句也在这个日志文件中记录。(linux下所有的日志都在catalina.out中)

4-2.commons-daemon.日期.log

  这个日期放的估计是利用服务方式启动tomcat作为守护进程的日志记录,因为我的tomcat启动方式是以服务的方式启动的,索引产生这个日志文件记录了服务的启动状态。

4-3.host-manager.日期.log

  这个估计是放tomcat的自带的manager项目的日志信息的,也没有看到有什么重要的日志信息

4-4.localhost.日期.log

  这个类似于第一种日志,可是信息没有第一种全

4-5.localhost_access_log.日期.txt

  这个是存放访问tomcat的请求的所有地址以及请求的路径、时间,请求协议以及返回码等信息(重要)

4-6.manager.日志.log

  这个估计也是manager项目专有的日志文件,看不出有什么重要的信息

4-7.tomcat7-stderr.日期.log  

  这个是log4j的错误日志,因此在程序中要合理的捕捉异常。

4-8.tomcat7-stdout.日期.log  

    类似于eclipse的控制台的信息

  这个是程序中的System语句打印的日志(包括系统抛出的异常),也终于明白了为什么一再强调不能用打印语句进行系统调试

原文地址:https://www.cnblogs.com/archimedes-euler/p/11276524.html