hongmeigui22027 发表于 2015-7-30 14:32:59

apache整合tomcat部署集群

  近日,由于公司项目需要,所以学习了apache整合tomcat以及集群的一些知识。
    所以做下笔记日后回顾可以用到。
    apache只有处理静态事物的能力, 而tomcat的强项就是处理动态的请求,所以apache和tomcat整合相互取长补短,由apache作为入口,如果是请求静态页面或者是静态文件,由apache直接提供,如果是请求动态页面,则让apache分发到tomcat,由tomcat处理以后再响应给客户端。
  apache和tomcat的整合需要准备的一些软件列表:

  图1
  说明:
  1.首先安装apache服务(httpd-2.2.25-win32-x86-no_ssl.msi),默认是80端口的,如果80端口被占用,则无法安装成功;
    用一下命令可以查询80端口被哪个进程id占用,netstat -aon|findstr "80"
    再用一下命令查询该进程id是代表哪个进程,tasklist|findstr "2016"
    apache检查错误方法:进入cmd 然后进入 Apache安装目录(具体为你自己的安装目录)\bin> httpd.exe -w -n "Apache2" -k start
  2.打开apache的安装目录下面的modules文件夹,把图1中的mod_jk.so文件放入
  3.在apache安装目录的conf文件夹下面配置mod_jk.conf文件,如果没有则新增一个,内容为:

  图2
  图2中的第一行,指定mod_jk的配置文件,配置tomcat以及负载均衡
    图2中的第二行和第三行表示,当请求后缀我jsp或者是do的时候,apache把请求转发给tomcat来处理
  3.配置完上面的配置文件以后,在apache的安装目录下的httpd.conf文件的末尾,把mod_jk.so模块以及mod_jk.conf配置文件加载进去

  图3
  4.配置apache的安装目录下的workers.properties文件,如果该文件不存在,自己新增一个即可

  图4
  介绍下图4中的各个参数:



#server
worker.list = controller      #控制器名称
#========tomcat1========
worker.tomcat1.port=8009      #ajp协议的端口,如果2个tomcat部署在同一个服务器中,那个ajp端口需要不同
worker.tomcat1.host=127.0.0.1 #tomcat的所在主机的ip,如果是本机,则写本机的ip即可
worker.tomcat1.type=ajp13   #协议类型
worker.tomcat1.lbfactor=1   #负载因子
#========tomcat2========
worker.tomcat2.port=9009
worker.tomcat2.host=127.0.0.1
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1    #如果2个tomcat,该参数相同,表示等比例,如果想tomcat负载多一点,只要把这个参数改的大一点即可,具体多少还是得看情况
#========controller,负载均衡控制器========
worker.controller.type=lb
worker.controller.retries=3#请求失败以后重试次数
worker.controller.balance_workers=tomcat1,tomcat2   #controller控制的tomcat的名称,分别为tomcat1和tomcat2,由tomcat中的server.xml中设值
worker.controller.sticky_session=false    #回话是否有粘性,false表示无粘性,同一个回话的请求会到不同的tomcat中处理
worker.controller.sticky_session_force=false #当一个节点蹦了,如果设值为true,那么服务器返回500错误给客户端,如果设值为false,则转发给其他的tomcat,但是会丢失回话信息
#更详细的参数说明:http://tomcat.apache.org/connectors-doc/reference/workers.html
  5.安装好apache服务以后再准备好tomcat(两个tomcat作为例子)

  图5
  tomcat需要配置server.xml文件



















   













  另外就是在web项目的web.xml中添加属性,用于告诉web容器,该项目属于分布式项目,不然无法session replication
  6. 静态文件直接由apache响应,所需需要把部署的项目中的静态文件放在apache的安装目录下的htdocs文件夹下,偷懒的方法就是直接把tomcat的webapps中的项目拷贝一份放到htdocs中,所以htdocs的作用与tomcat的webapps类似
  7.部署的时候经常会出现一些错误,当遇到错误的时候我经常需要查看日志文件,我经常查看的日志有apache的日志以及tomcat的日志

  图6
  apache安装目录下的logs文件夹下就存放这apache的相关日志
  access.log文件用于记录apache接收到请求以及响应状态的日志
  error.log文件用于记录apache的运行错误
  httpd.pid文件用于记录进程pid
  mod_jk.log文件用于记录请求转发给tomcat的日志

  图7
  tomcat的日志:
  localhost_access_log.日期.txt文件用于记录tomcat接收到的请求以及响应的状态等,作用于apache的access.log类似
  catalina.日期.txt文件用于记录tomcat启动时候控制台的一些信息以及服务端错误信息
  localhost.日期.txt文件用于记录站点访问信息,Tomcat下内部代码丢出的日志,文件名localhost.日期.log(jsp页面内部错误的异常,org.apache.jasper.runtime.HttpJspBase.service类丢出的,日志信息就在该文件!)
  8.官方文档中对于集群中session repliction的要求:

  图8
  总共8点:
    1).session中的属性必须全部为实现Serializable
    2).tomcat的server.xml配置文件中的节点的注释去掉
    3).就是用于用于检测当前的响应是否涉及Session数据的更新,如果是则启动Session拷贝操作,这个属性后面会有一个filter属性,filter即过滤不需要Session拷贝操作的内容
    4).如果tomcat在同一个机器上的,那么确保tcpListenerPort端口的唯一性
    5).web.xml中必须添加属性
    6).如果使用mod_jk,那么需要在server.xml中的节点中添加jvmRoute=“tomcat1”属性,事实证明在ajp端口那边添加也是可行的
    7).确保所有的tomcat时钟同步,使用ntp服务器来达成
    8).确保负载均衡器的sticky_session=false已经设置,即设置为非粘性
  
  参考:
    1.https://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html
    2.http://www.iyunv.com/dennisit/p/3370220.html
    3.http://502245466.blog.iyunv.com/7559397/1280152
  
  
页: [1]
查看完整版本: apache整合tomcat部署集群