日期:2014-5-17 浏览次数:20193次

整合Apache与Tomcat

最近一系统需要以Apache+Tomcat的方式部署。经过查阅Apache和Tomcat官网资料(Apache官网 , Tomcat连接其它服务器相关资料 )后终于搞掂。在此记录下整合及部署过程中的一些关键内容。

??? 目前,Apache2.2连接Tomcat的方式有两种:一种是通过Apache自己的mod_proxy模块连接;一种是通过Tomcat自带的mod_jk模块。此次使用mod_jk方式进行连接。下面是步骤:

  1. 在运行Apache的服务器上编译出mod_jk的二进制文件(linux为mod_jk.so文件),然后将该文件放到apache安装目录(以下简称为APACHE_HOME)的modules目录下
  2. 在APACHE_HOME的conf目录下定义workers.properties和mod_jk.conf文件。workers.properties文件用于定义mod_jk连接Tomcat时的相关参数;mod_jk.conf文件作用和httpd.conf作用相同都是用于定义Apache及其模块的相关参数。设置workers.properties的一些参数时可能同时还需要设置Tomcat的server.xml文件。(具体可参考workers.properties详细介绍 )
  3. 以下worker.properties的内容为:定义了两个tomcat节点、一个负载均衡的工作线程和一个用于显示负载信息的线程。
    worker.list=node1,node2,balance_ctl,balance_stat
    
    # 定义连接tomcat的worker的公用属性
    worker.node_template.type=ajp13
    worker.node_template.lbfactor=1
    worker.node_template.socket_timeout=45
    worker.node_template.connection_pool_timeout=600
    #设置了connection_pool_timeout属性后,还要在tomcat的server.xml的AJP设置中加入connectionTimeout="6000000"此处的单位为毫秒
    worker.node_template.socket_keepalive=true
    #当apache与tomcat之间有防火墙时还要增加socket_keepalive属性
    
    #定义worker
    worker.node1.reference=worker.node_template
    worker.node1.host=127.0.0.1
    worker.node1.port=8009
    worker.node1.redirect=node2
    #redirect指定当node1挂掉后转到node2处理
    
    worker.node2.reference=worker.node_template
    worker.node2.host=xx.xx.xx.xx
    worker.node2.port=8009
    worker.node2.activation=disable
    #activation表示只有node1挂了将请求转到node2时node2才激活并开始工作
    
    # 用于做负载均衡
    worker.balance_ctl.type=lb
    worker.balance_ctl.balance_workers=node1,node2
    worker.balance_ctl.sticky_session=true
    #sticky_session设置为true时,还要在tomcat的server.xml的相应<Engine>加入jvmRoute="XXX"这里的jvmRout的值为上述定义worker的host对应的tomcat所在的机器的worker名字
    
    # 定义status用于查看apapche负载情况的实时信息
    worker.balance_stat.type=status
    worker.balance_stat.read_only=true
    ?
  4. mod_jk.conf的内容:
    # 指定Apache加载mod_jk模块
    LoadModule    jk_module  modules/mod_jk.so
    
    #指明workers.properties文件的位置
    JkWorkersFile conf/workers.properties
    
    # 定义mod_jk的日志信息
    JkLogFile     logs/mod_jk.log
    JkLogLevel    info
    JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
    
    #定义请求的映射
    JkMount  /*.jsp balance_ctl    #表示apache会将所有以.jsp结尾的请求都转发到balance_ctl工作线程处理
    JkMount  /*.do balance_ctl
    JkMount  /jkmanager/* balance_stat   # 这样就可以通过[ServerURL]/jkmanager/地址就可以实时查看服务器负载情况了  
    ?
  5. 配置完成后先启动所有Tomcat再启动Apache。之后验证。
  6. 停止时先停Apache再停止Tomcat。