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中的各个参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#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文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?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已经设置,即设置为非粘性

 

参考:

  1.https://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html

  2.http://www.cnblogs.com/dennisit/p/3370220.html

  3.http://502245466.blog.51cto.com/7559397/1280152

 

 

转载博客,原博客地址:http://www.cnblogs.com/God-froest/p/apache_tomcat.html

转载于:https://www.cnblogs.com/rainy-shurun/p/5211020.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/375059.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Cpk

CPK&#xff1a;Complex Process Capability index 的缩写&#xff0c;是现代企业用于表示制程能力的指标。制程能力是过程性能的允许最大变化范围与过程的正常偏差的比值。制程能力研究在於确认这些特性符合规格的程度&#xff0c;以保证制程成品不符规格的不良率在要求的水准…

靶场练习第九天~vulnhub靶场之dc-1

一、环境搭建 靶场下载链接: 百度网盘 请输入提取码 提取码: ih67 1.查看kali的ip&#xff1a;ifconfig 二、信息收集 1.使用namp命令 主机探测: nmap -sP 192.168.101.0/24 查看靶机开放端口号和服务:nmap -A 192.168.101.111 发现开放80端口,访问一下192.168.101.111 Dru…

4~20mA模拟输出(电流环)应用笔记(转)

4~20mA模拟输出&#xff08;电流环&#xff09;应用笔记 bpesun163.com 前言 4-20mA.DC(1-5V.DC)信号制是国际电工委员会(IEC):过程控制系统用模拟信号标准。 在工业现场&#xff0c;如果采集的信号经调理后是电压信号并且进行长线传输&#xff0c;会产生以下问题&#xff1a; …

ADO多线程数据库查询

ADO多线程数据库查询通常会出现3个问题&#xff1a;1、CoInitialize 没有调用 &#xff08;CoInitialize was not called&#xff09;&#xff1b;所以&#xff0c;在使用任何dbGo对象前&#xff0c;必须手 调用CoInitialize和CoUninitialize。调用CoInitialize失败会产生"…

PHPExcel

excel文档处理对象主要用来管理我们的excel文档&#xff0c;怎么来管理&#xff08;通过属性和方法来管理&#xff09;&#xff1f;大家知道&#xff0c;类主要是由属性和方法来组成&#xff0c;通过php程序的手段来管理excel文档&#xff0c;其实就是通过本对象的属性和方法来…

靶场练习第十天~vulnhub靶场之dc-2

一、准备工作 靶机下载地址链接: 百度网盘 请输入提取码 提取码: ib86 二、信息收集 1.nmap的信息收集 &#xff08;1&#xff09;使用nmap 192.168.101.0/24&#xff0c;发现靶机地址为192.168.101.115 &#xff08;2&#xff09;对靶机做进一步探测&#xff0c;发现靶机开…

Ubuntu 14.10 创建虚拟网卡实现桥接网络

目标需求&#xff1a;在Ubuntu主机创建一张虚拟网卡&#xff0c;使得搭建在VirtualBox中的其他主机能借助虚拟网卡构建的局域网进行相互间的通讯 步骤一&#xff1a;准备工具包 安装 uml-utilities 以及 bridge-utils sudo apt-get install uml-utilities bridge-utils 步骤二&…

iOS定时器-- NSTimer 和CADisplaylink

iOS定时器-- NSTimer 和CADisplaylink 一、iOS中有两种不同的定时器&#xff1a; 1. NSTimer&#xff08;时间间隔可以任意设定&#xff0c;最小0.1ms&#xff09;// If seconds is less than or equal to 0.0, this method chooses the nonnegative value of 0.1 millisecond…

靶场练习第十一天~vulnhub靶场之dc-3

一、准备工作 1.靶场链接: 百度网盘 请输入提取码 提取码: 48d3 2.启动靶场后会遇到如下情况&#xff1a; 2-1具体解决办法如下&#xff1a; 启动成功 3.查看kali的ip&#xff1a;ifconfig 二、信息收集 1.nmap的信息收集 &#xff08;1&#xff09;寻找靶机的ip&#xf…

UNIX环境高级编程一书中apue.h找不到

apue.h是作者为了方便自己写的一个库&#xff0c;在http://www.apuebook.com选择你对应书中的source code&#xff0c;然后解压压缩包中在/include/apue.h以及/lib/error.c复制到你文件系统中/usr/include中即可。另外在apue.h中#include "error.c"即可。这样gcc编译…

大龄程序员怎样渡过中年危机?(转)

大龄程序员怎样渡过中年危机&#xff1f; 作者前言&#xff1a; 话说再有十几天就进入2016年了&#xff0c;想到这&#xff0c;我不由得五味杂陈。2016年对我来说是一个特殊的年份&#xff0c;因为我即将40岁了&#xff0c;人生正式告别青年期&#xff0c;进入中年了。 在娱乐圈…

靶场练习第十二天~vulnhub靶场之dc-4

一、准备工作 1.靶机下载链接 链接: 百度网盘 请输入提取码 提取码: 3hq4 2.用ifconfig查看kali的ip 二、信息收集 1.nmap的信息收集 &#xff08;1&#xff09;主机发现 命令&#xff1a;nmap 192.168.101.0/24 &#xff08;2&#xff09;扫描靶机详细信息 发现主机 192…

网络命令-nc(二)

继续Netcat 这个命令吧 1&#xff1a;远程拷贝文件 在本地输出 文件debian.img 到 192.168.5.40 主机12345端口监听 nc -v 192.168.5.40 12345 < debian.img 在192.168.5.40 主机12345端口监听&#xff0c;将文件指定为debian-copy.img nc -l -v 12345 > debian-copy.im…

靶场练习第十三天~vulnhub靶场之dc-5

一、准备工作 1.靶机环境搭建 下载链接: https://pan.baidu.com/s/1csvuJ_NVCBvVr75KhxyM3Q?pwdxie7 提取码: xie7 2.kali的ip 命令&#xff1a;ifconfig 3.kali和靶机的都设置为NAT模式 二、信息收集 1.nmap的信息收集 &#xff08;1&#xff09;寻找靶机的ip 命令&…

Ubuntu中输入输出重定向及管道技术简述

输出 1、标准输出 定义&#xff1a;程序在默认情况下输出结果的地方&#xff08;stdout&#xff09;。 2、输出重定向 定义&#xff1a;用于把数据的输出转移到另一个地方去。 3、Ubuntu中例子 $ls > ~/ls_out ##不显示在显示器上而是输入到文件ls_out中 uname -r > ls_…

activex打包

http://www.cnblogs.com/weiwin/p/4493835.html activeX 打包 原文 http://www.docin.com/p-409284488.html CAB打包文档说明 文档目的本文档的目的在于说明将ocx和dll以及相关的文件打包成一个CAB包&#xff0c;以便在网页下调用ocx控件时免去手工将dll和其他一下文件拷贝到客…

靶场练习第十四天~vulnhub靶场之dc-6

一、准备工作 kali和靶机都选择NAT模式&#xff08;kali与靶机同网段&#xff09; 1.靶场环境 下载链接: 百度网盘 请输入提取码 提取码: bazx 2.kali的ip 命令:ifconfig 3.靶机的ip 扫描靶机ip 命令&#xff1a;sudo arp-scan -l 二、信息收集 1.nmap的信息收集 &#…

最短路径Dijkstra算法和Floyd算法整理、

转载自&#xff1a;http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html 最短路径—Dijkstra算法和Floyd算法 Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法&#xff0c;用于计算一个节点到其他所有节点的最短路径。主要特点是以…

Java Script 中 ==(Equal) 和 === (Identity Equal) 的区别和比较算法逻辑

判断两个变量是否相等在任何编程语言中都是非常重要的功能。 JavaScript 提供了 和 两种判断两个变量是否相等的运算符&#xff0c;但我们开始学习的时候 JavaScript 的时候&#xff0c;就被一遍又一遍的告知&#xff1a; 要求变量的类型和值均相等&#xff0c;才能返回true…

靶场练习第十五天~vulnhub靶场之dc-7

一、准备工作 kali和靶机都选择NAT模式&#xff08;kali与靶机同网段&#xff09; 1.靶场环境 下载链接:https://download.vulnhub.com/dc/DC-7.zip 2.kali的ip 命令:ifconfig 3.靶机的ip 扫描靶机ip sudo arp-scan -l 二、信息收集 1.nmap的信息收集 &#xff08;1&…