文档章节

window下Apache与tomcat实现负责均衡

 小猪突然地
发布于 2015/05/25 22:43
字数 2298
阅读 48
收藏 0

1. Apache与Tomcat相关介绍

    1.1 相同点

    1.1.1 两者都是apache组织开发的 

    1.1.2 两者都有HTTP服务的功能 

    1.1.3 两者都是免费的 

    1.2 不同点

    1.2.1 apache

        a) 它是一个web服务器环境程序,启用他可以作为web服务器使用,但是只支持静态网页,如asp,php,cgi,jsp等动态网页就不能正确解析。

        b) 如果apache环境下运行jsp的话就需要一个解释器来执行jsp网页,而这个jsp解释器就是tomcat, 如果jsp需要连接数据库的话,那就需要jdk来提供连接数据库的驱程,所以要在apache环境先运行jsp的web服务器平台就需要apache+tomcat+jdk,即整合apache和tomcat。

    1.2.2 tomcat

        a) tomcat是应用(java)服务器,它只是一个servlet(jsp也翻译成servlet)容器,可以认为是apache的扩展,但是可以独立于apache运行,也能解析静态页面,只是效率不如apache。

    1.2.3 综上所述

        Apache是一个web服务器,Tomcat是一个应用服务器(servlet容器)。

2. Apache与tomcat的整合Apache与Tomcat整合的好处

    2.1 Apache主要用来解析静态文本,如html。Tomcat虽然也有此功能,但Apache效率大大高于Tomcat,尤其是对于并发数较大的企业级应用,能更好的显示Apache的高效率。

    2.2 Tomcat用来解析jsp,servlet等,所有的客户请求首先会发送到Apache,如果请求是静态文本则由Apache解析,并把结果返回给客户端,如果是动态的请求,如jsp,Apache会把解析工作交给Tomcat,由Tomcat进行解析(前提:两者现实整合),Tomcat解析完成后,结果仍是通过Tpache返回给客户端,这样就可以达到分工合作,实现负载均衡,提高系统的性能!而且因为JSP是服务器端解释代码的,这样整合可以减少Tomcat的服务开销。

3. 整合前的准备

    3.1 版本选择

    为了使得整合的性能更加稳定,本次整合中apache和tomcat采用的并不是最新版本,而是相对来说比较稳定的版本。

              Apache:httpd-2.2.22-win32-x86-openssl-0.9.8t.msi

              Tomcat:apache-tomcat-7.0.6_1

              Tomcat-connector:mod_jk-1.2.37-httpd-2.2.22.so(根据需要去网上下载对应的版本)。

         注意:1.2.37:指的是连接器的版本号。

                   2.2.22:指的是apache的版本号。

    3.2 安装目录

        本次整合用了两个tomcat

        Apache: 

              E:\apache\apache\install(在这次整合中给它取个名字叫apache,安装目录是dirApache,目的是便于下面讲解)

        Tomcat: 

              E:\apache\tomcat\apache-tomcat-7.0.6_1(tomcat1,dirTomcat1)

              E:\apache\tomcat\apache-tomcat-7.0.6_2(tomcat2,dirTomcat2)

4. 具体整合的配置

    4.1 Tomcat

    4.1.1 配置 server 的关闭口

        要在一台机器上开启两个tomcat,则需要将tomcat配置成不同的端口号。

        将dirTomat1中conf/server.xml中的配置语句

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

        将其改为:

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

        dirTomcat2中的配置类推,只要port未被占用即可。

    4.1.2 配置Service名称

        本次我们运行了两个tomcat,所以要为每个tomcat取一个名字,以此来区分不同的tomcat服务器。

        在dirTomcat1中conf/server.xml中找到

<service name="Catalina">

    将其改为:

<service name="tomcat1">

    dirTomcat2中的配置以此类推改为tomcat2.

    注意:

            这个名字要和dirApache下conf/ workers.properties中的worker.tomcat1对应tomcat1,tomcat2以此类推,(具体是否必须一致有待进一步确定)

    4.1.3 配置 http访问的Connector端口

在dirTomcat1中conf/server.xml中找到

<Connector 
    port="8080" 
    protocol="HTTP/1.1" 
    connectionTimeout="20000" 
    redirectPort="8443" />

     将其改为:

<Connector port="8080"
    protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443"
    maxThreads="150" />

    由于有两个tomcat所以其中以个采用的是默认的访问端口,即没有改变端口。

    对于tomcat2,本次整合将其端口改为8090(只要访问端口没有被占用即可)

    4.1.4 配置 AJP 1.3 Connector端口

同样打开dirTomcat1中的conf/server.xml,找到

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

   将其改为:

<Connector
    port="8019"
    protocol="AJP/1.3"
    redirectPort="8443"
    maxThreads="3000"
    emptySessionPath="true"
    enableLookups="false"/>

   注意:

          后面三个绿色的配置为并发支持配置。

          对于dirTomcat2以此类推。

    4.1.5 配置 Engine

    是要是添加jvmRoute 属性,找到dirTomcat1/conf.server.xml中的

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

   将其改为:

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

   注意:

         jvmRoute与workers.properties配置的worker.tomcat1对应。

         对于dirTomcat2以此类推。

    4.1.6 配置Host

 将dirTomcat1/conf.server.xml中的Host部分

<Host
    name="localhost" 
    appBase="webapps"(tomcat默认与conf同级的)
    unpackWARs="true"
    autoDeploy="true">

 将其改为:

<Host
    name="localhost"
    appBase="E:\apache\webapps"(配置自己的项目目录,便于使用)
    unpackWARs="true"
    autoDeploy="true">

   注意:

          这个设置要和apache中的虚拟主机设置相对应(即要和dieApache/conf/ extra/ httpd-vhosts.conf中的DocumentRoot和Directory对应)。

          对于tomcat2以此类推

4.2 Apache

    4.2.1 检查Apache访问端口

            Apache默认访问端口:  Listen 80 只要未被占用一般不用修改。

    4.2.2 配置apache项目目录及其虚拟目录

        1) 改变apache默认目录(理论上可以不用改这个) 在diApache/conf/httpd.conf文件中找到并配置

DocumentRoot "E:\apache\webapps"(不配置则是apache默认的项目目录,应当配置成和虚拟目录一致,并且和tomcat的虚拟目录一致)。

        2) 配置apache虚拟目录,在dirApache/conf/extra/httpd-vhosts.conf文件,内容为:

NameVirtualHost localhost
<VirtualHost localhost>
         ServerAdmin 229408905@qq.com
         DocumentRoot "E:/apache/webapps"
         ServerName localhost
         JkMount /*.jsp controller
         DirectoryIndex index.html index.jsp    
         <Directory E:/apache/webapps/>
                   Options -Indexes FollowSymLinks
                   AllowOverride None
                   Order allow,deny
                   Allow from all
         </Directory>
</VirtualHost>
 
<VirtualHost localhost>
         ServerAdmin 229408905@qq.com
         DocumentRoot "E:/apache/webapps"
         ServerName localhost
         JkMount /*.jsp controller
         DirectoryIndex index.html index.jsp    
         <Directory E:/apache/webapps/>
                   Options -Indexes FollowSymLinks
                   AllowOverride None
                   Order allow,deny
                   Allow from all
         </Directory>
</VirtualHost>

   注意:

        a) ServerAdmin:这是在安装apache时填写的邮件信息。

        b) DocumentRoot: 这个要和tomcat中指定的目录一致。

        c)  JkMount /*.jsp controller:当请求的是动态网页jsp时就将其转发到tomcat中进行解析,controller名字和在workers.properties文件中指定的controller名字一致(当apache和tomcat整合时的配置语句,不整即无需配置)。

    3)  加载httpd-vhosts.conf配置文件

         在dirApache/conf/httpd.conf文件中找到

# Virtual hosts
#Include conf/extra/httpd-vhosts.conf

   将其改为:

# Virtual hosts
Include conf/extra/httpd-vhosts.conf

    4.2.3 创建workers.properties配置文件

worker.list=controller
worker.controller.type=lb
worker.controller.balanced_workers=tomcat1,tomcat2
worker.controller.sticky_session=1
worker.controller.sticky_session_force=1
 
# Set properties for tomcat1 (ajp13)
worker.tomcat1.type=ajp13
worker.tomcat1.host=localhost
worker.tomcat1.port=8019
worker.tomcat1.lbfactor=1
 
# Set properties for tomcat2(ajp13)
worker.tomcat2.type=ajp13
worker.tomcat2.host=localhost
worker.tomcat2.port=8029
worker.tomcat2.lbfactor=1

   注意:

        1) controller名字可以随便取,但是要与….相对应。

        2) worker.controller.balanced_workers=tomcat1,tomcat2

        其中tomcat1,tomcat2要和tomcat中server.xml文件中的

<Service name="tomcat1">

   或者

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

   中的一个的名字相同(测试时只要一个相同就行)。但是真正实现apache和tomcat负载均衡链接的名称是通过Engine 的jvmRoute属性来实现的连接,所以建议将以上两个名字都取成一样,这样就不会出错。

        3) worker.tomcat1.host=localhost要和tomcat中server.xml文件中的

<Host
    name="localhost"
    appBase="E:\apache\webapps"
    unpackWARs="true"
    autoDeploy="true">

   配置语句种的=name属性对应,为服务器ip或者域名。

   指定的名称不对应,则会报以下错误:

Service Temporarily Unavailable
The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.

    意思是apache找不到项目目录。          

          4)  worker.tomcat1.port的端口号为tomcat中定义的AJP 1.3 Connector端口号,如下:

<Connector
port="8019"
protocol="AJP/1.3"
redirectPort="8443"
maxThreads="3000"
emptySessionPath="true"
enableLookups="false"/>

    即与上述端口号相对应。

    4.2.4 配置Tomcat连接器

        a) 将tomcat连接器mod_jk-1.2.37-httpd-2.2.22.so复制到dirApache/ modules目录下。

        b) 在dirApache/conf中创建mod_jk.conf(tomcat连接器配置文件)文件,其内容为:

#多TOMCAT负载均衡整合开始
#加载mod_jk模块(tomcat连接器)
LoadModule jk_module modules/mod_jk-1.2.37-httpd-2.2.22.so
# 指定workers.properties文件(要转发到的tomcat服务器和控制器)
JkWorkersFile conf/workers.properties
#多TOMCAT负载均衡整合结束

        c) 加载tomcat连接器配置文件(如果不创建这个文件,那么他的所有配置都将要直接放在httpd.conf文件中,这样不便于管理)

在dirApache/conf/httpd.conf文件最后添加如下语句,:

#加载mod_jk文件配置
include conf/mod_jk.conf

5. 项目测试

    准备一个javaweb项目,名称为ApacheAndTomcat

    在项目中使用一个index.jsp页面(内容为输出一句话”jsp success!!”),并在web.xml中配置成默认项目首页为index.jsp,然后将项目放在上面的虚拟目录中

    启动apache服务和tomcat服务,在页面中输入以下任意一个url:

                   http://localhost/ApacheAndTomcat/

                   http://localhost:8080/ApacheAndTomcat/

                   http://localhost:8090/ApacheAndTomcat/

    如果内容为:

         JSP success!!

    表示apache和tomcat整合成功。

6. 整合优化

    6.1 线程和请求支持设置

        在apache配置文件httpd.conf中找到

ThreadsPerChild 250
MaxRequestsPerChild  0

    并改为:

ThreadsPerChild 1900
MaxRequestsPerChild  10000

   如果没有就直接添加。

    6.2  并发支持配置

        在apache配置文件最后添加如下配置语句

<IfModule   worker.c>    
StartServers   4    
ServerLimit   64    
ThreadLimit   256    
MaxClients   2048    
MinSpareThreads   64    
MaxSpareThreads   128    
ThreadsPerChild   64    
MaxRequestsPerChild   0    
</IfModule>

    到此为止,apache和tomcat的整合实例就完成了,有兴趣的朋友可以亲自动手试试。本文仅供参考学习。

© 著作权归作者所有

粉丝 3
博文 23
码字总数 20045
作品 0
成都
程序员
私信 提问
window配置nginx tomcat集群

一、Nginx 介绍 Nginx (发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。 其特点是占有内存少,并发能力强,事...

思悟修
2015/08/19
346
7
浅谈web应用的负载均衡、集群、高可用(HA)解决方案

1、熟悉几个组件 1.1、apache —— 它是Apache软件基金会的一个开放源代码的跨平台的网页服务器,属于老牌的web服务器了,支持基于Ip或者域名的虚拟主机,支持代理服务器,支持安全Socket层(...

stone_
2016/05/04
363
0
浅谈web应用的负载均衡、高可用、群集

1、熟悉几个组件 1.1、apache —— 它是Apache软件基金会的一个开放源代码的跨平台的网页服务器,属于老牌的web服务器了,支持基于Ip或者域名的虚拟主机,支持代理服务器,支持安全Socket层(...

壹休哥
2016/11/06
0
0
Nginx+Tomcat负载均衡超简易实现(上)

以前经常使用apache+tomcat多实例做负载均衡实现,近两天研究Nginx,下面是nginx+tomcat的负责均衡实现,过程非常简单,比起apache的配置,nginx的配置非常的清晰易懂,也很简洁,配置的过程...

飘雪一郎o
2012/12/26
639
0
LNMT/LAMT实现动静分离、负载均衡和会话保持

1、本次试验主要是通过nginx代理到tomcat处理动态响应; 2、通过httpd代理到tomcat做动态请求的处理; 3、通过httpd和tomcat实现session会话的绑定; 4、通过httpd和tomcat实现session会话的...

Mr_陈
2014/05/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot + Mybatis-Plus 集成与使用(二)

前言: 本章节介绍MyBatis-Puls的CRUD使用。在开始之前,先简单讲解下上章节关于Spring Boot是如何自动配置MyBatis-Plus。 一、自动配置 当Spring Boot应用从主方法main()启动后,首先加载S...

伴学编程
昨天
7
0
用最通俗的方法讲spring [一] ──── AOP

@[TOC](用最通俗的方法讲spring [一] ──── AOP) 写这个系列的目的(可以跳过不看) 自己写这个系列的目的,是因为自己是个比较笨的人,我曾一度怀疑自己的智商不适合干编程这个行业.因为在我...

小贼贼子
昨天
7
0
Flutter系列之在 macOS 上安装和配置 Flutter 开发环境

本文为Flutter开发环境在macOS下安装全过程: 一、系统配置要求 想要安装并运行 Flutter,你的开发环境需要最低满足以下要求: 操作系统:macOS(64位) 磁盘空间:700 MB(不包含 IDE 或其余...

過愙
昨天
6
0
OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
昨天
2.7K
16
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
昨天
42
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部