文档章节

apache整合tomcat部署集群

风格若干
 风格若干
发布于 2016/08/02 00:32
字数 1691
阅读 17
收藏 2

近日,由于公司项目需要,所以学习了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文件

<?xml version='1.0' encoding='utf-8'?>

<!--如果多个tomcat部署在同一台服务器中,此处的关闭tomcat的端口需要更改,不能冲突-->

<Server port="8005" shutdown="SHUTDOWN">

  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />

  <Listener className="org.apache.catalina.core.JasperListener" />

  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />

  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />

  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />


  <GlobalNamingResources>

    <Resource name="UserDatabase" auth="Container"

              type="org.apache.catalina.UserDatabase"

              description="User database that can be updated and saved"

              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"

              pathname="conf/tomcat-users.xml" />

  </GlobalNamingResources>


  <Service name="Catalina">

     

    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"

        maxThreads="300" minSpareThreads="4"/>

    <!--如果使用apache整合,那么此配置可以注释,因为apache是通过ajp协议来通信的,tomcat并不会直接暴露出来-->

    <Connector port="8080" protocol="HTTP/1.1"

               connectionTimeout="20000"

               redirectPort="8443" maxThreads="300"/>

    

     <!-- Define an AJP 1.3 Connector on port 8009 --><br>    <!--如果多个tomcat部署在同一个服务器中,此处的ajp协议端口必须不一样,并且需要增加jvmRoute属性,该属性的值即为workers.properties中的tomcat的名称-->

    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" jvmRoute="tomcat1"/>


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

      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

     

      <Realm className="org.apache.catalina.realm.LockOutRealm">

       

        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"

               resourceName="UserDatabase"/>

      </Realm>


      <Host name="localhost"  appBase="webapps"

            unpackWARs="true" autoDeploy="true">

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

               prefix="localhost_access_log." suffix=".txt"

               pattern="%h %l %u %t "%r" %s %b" />


      </Host>

    </Engine>

  </Service>

</Server>

  另外就是在web项目的web.xml中添加属性<distributable/>,用于告诉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配置文件中的<Cluster>节点的注释去掉

  3).就是用于用于检测当前的响应是否涉及Session数据的更新,如果是则启动Session拷贝操作,这个属性后面会有一个filter属性,filter即过滤不需要Session拷贝操作的内容

  4).如果tomcat在同一个机器上的,那么确保tcpListenerPort端口的唯一性

  5).web.xml中必须添加<distributable/>属性

  6).如果使用mod_jk,那么需要在server.xml中的<Engine/>节点中添加jvmRoute=“tomcat1”属性,事实证明在ajp端口那边添加也是可行的

  7).确保所有的tomcat时钟同步,使用ntp服务器来达成

  8).确保负载均衡器的sticky_session=false已经设置,即设置为非粘性

© 著作权归作者所有

风格若干
粉丝 7
博文 87
码字总数 53598
作品 0
西安
程序员
私信 提问
tomcat6 高并发配置 与优化

tomcat的server.xml配置文件说明: server.xml配置 1. port="8080"protocol="HTTP/1.1" 2. maxThreads="30000" 3. minSpareThreads="512" 4. maxSpareThreads="2048" 5. enableLookups="fal......

凡尘网络
2016/01/07
338
0
zookeeper+dubbo分布式环境搭建部署记录

最近在公司用到阿里的dubbo做RPC分布式服务化,记录一下项目服务环境搭建的一些过程,方便后来的同行可以少走些弯路,欢迎大家一起交流分享。 一、环境准备 6台机器如下: 用到的软件如下: ...

xiejunbo
2016/09/23
1K
2
Tomcat性能调优方案

Tomcat性能调优方案 一、操作系统调优 对于操作系统优化来说,是尽可能的增大可使用的内存容量、提高CPU的频率,保证文件系统的读写速率等。经过压力测试验证,在并发连接很多的情况下,CPU...

Sephiroth
2010/02/06
2.6K
0
Tomcat -- apache+tomcat集群

主要参考了这篇文章 http://blog.csdn.net/flyliuweisky547/article/details/21293071?utmsource=tuicool&utmmedium=referral 这位博主在tomcat方面讲得十分清楚,感谢该博主分享。 环境信息...

求是科技
2016/09/21
75
0
Tomcat 性能调优方案

一、操作系统调优 对于操作系统优化来说,是尽可能的增大可使用的内存容量、提高CPU的频率,保证文件系统的读写速率等。经过压力测试验证,在并发连接很多的情况下,CPU的处理能力越强,系统...

华宰
2011/11/13
2.7K
2

没有更多内容

加载失败,请刷新页面

加载更多

栈-链式(c/c++实现)

上次说“栈是在线性表演变而来的,线性表很自由,想往哪里插数据就往哪里插数据,想删哪数据就删哪数据...。但给线性表一些限制呢,就没那么自由了,把线性表的三边封起来就变成了栈,栈只能...

白客C
14分钟前
12
0
Mybatis Plus service

/** * @author beth * @data 2019-10-20 23:34 */@RunWith(SpringRunner.class)@SpringBootTestpublic class ServiceTest { @Autowired private IUserInfoService iUserInfoS......

一个yuanbeth
21分钟前
2
0
php7-internal 7 zval的操作

## 7.7 zval的操作 扩展中经常会用到各种类型的zval,PHP提供了很多宏用于不同类型zval的操作,尽管我们也可以自己操作zval,但这并不是一个好习惯,因为zval有很多其它用途的标识,如果自己...

冻结not
昨天
5
0
溢出\越界\泄漏

溢出:栈溢出是指函数中的局部变量造成的溢出,递归次数太多也会栈溢出 一是分配的大小超过栈的最大值,char a[99999999999999999]; 二是分配的大小没有超过最大值,但是接收的buff比新buff小...

SibylY
昨天
5
0
导览Linux系统文件系统类型

虽然对于普通用户来说可能并不明显,但在过去十年左右的时间里,Linux 文件系统已经发生了显著的变化,这使它们能够更好对抗损坏和性能问题。 如今大多数 Linux 系统使用名为 ext4 的文件系统...

老孟的Linux私房菜
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部