apache整合tomcat
来源:互联网 发布:大数据预测模型 编辑:程序博客网 时间:2024/06/03 18:37
负载均衡就将是负载(工作任务)进行平衡、分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。这里是选择apache整合tomcat,将负载平分到多个tomcat上,来实现负载均衡。
首先要说一下为什么要整合apache和tomcat:
Apache是最流行的Web服务器,开放源代码,支持跨平台的应用(可以运行在几乎所有的Linux、Unix、Windows系统平台上),尤其对Linux的支持相当完美。
apache的优点有:
功能强大,apache自带了很多功能模块,可根据需求编译自己需要的模块。
配置简单,apache的配置文件非常简单,通过简单的配置可实现强大功能。
速度飞快,apache处理静态页面文件效率非常高,可以应对大并发和高负荷访问请求。
性能稳定,apache在高负荷请求下性能表现卓越,执行效率非常高。
但是apache也有自身的缺点:
只支持静态网页,对于jsp、php等动态网页不支持
Apache是以进程为基础的结构,进程要比线程消耗更多的系统开支,因此,不太适合于多处理器环境。
Tomcat是Sun和Apache合作做出来的JSPServer,有如下优点:
支持Servlet和JSP,可以很好的处理动态网页。
跨平台性好:Tomcat是Java程序,所以只要有JDK就可以使用,不需要考虑操作系统平台。
但是,tomcat也有自身缺点:
处理静态页面效率不高:Tomcat本身可以做为Web Server,但是tomcat在处理静态页面时没有Apache迅速。
可配置性不强:tomcat不像Apache一样配置简单,稳定、强壮。
综上所述,通过相互的整合刚好弥补了各自的缺点,通过整合可以实现:
客户端请求静态页面时,由Apache服务器响应请求。
客户端请求动态页面时,则是Tomcat服务器响应请求。
通过apache信息过滤,实现网站动、静页面分离,保证了应用的可扩展性和安全性。
既然要让Apache和Tomcat协调工作,就必需有一个连接器把它们联系起来,这就是下面要提到的Connector,下个小节具体讲述Connector的选择和使用。
二、 Apache和Tomcat连接器
Apache是模块化的web服务器,这意味着核心中只包含实现最基本功能的模块。扩展功能可以作为模块动态加载来实现。为了让apache和 tomcat协调工作,开源爱好者们开发出了很多可以利用的模块,在Apache2.2版本之前,一般有两个模块可供选择:mod_jk2和 mod_jk,mod_jk2模块是比较早的一种连接器,在动、静页面过滤上可以使用正则表达式,因此使用配置灵活,但是mod_jk2模块现在已经没有 开发人员支持了,版本更新也就此停止。继承jk2模块的是mod_jk模块,mod_jk模块支持Apache 1.x和2.X系列版本,现在一般都使用mod_jk做Apache和Tomcat的连接器。
在Apache2.2版本以后,又出现了两种连接器可供选择,那就是http-proxy和proxy-ajp模块,apache的proxy(代理)模 块可以实现双向代理,功能非常强大,从连接器的实现原理看,用http-proxy模块实现也是很自然的事情,只需打开tomcat的http功能,然后 用apache的proxy代理功能将动态请求交给tomcat处理,而静态数据交给apache自身就可以了。proxy-ajp模块是专门为 tomcat整合所开发的,通过ajp协议专门代理对tomcat的请求。根据官方的测试,proxy-ajp的执行效率要比http-proxy高,因 此在Apache2.2以后的版本,用proxy-ajp模块作为apache和tomcat的连接器是个不错的选择。
需要说明的是,这些连接功能的实现,都是通过在apache中加载相应的功能模块实现,比如上面提到的mod_jk、mod_jk2、proxy-ajp 模块,都要事先通过源码编译出对应的模块,然后通过apache配置文件动态加载,实现连接器功能。这点也是apache的优势所在。
三种连接器:
JK
这是最常见的方式,你可以在网上找到很多关于配置JK的网页,当然最全的还是其官方所提供的文档。JK 本身有两个版本分别是 1 和 2,目前 1 最新的版本是 1.2.19,而版本 2 早已经废弃了,以后不再有新版本的推出了,所以建议你采用版本 1。
JK 是通过 AJP 协议与 Tomcat 服务器进行通讯的,Tomcat 默认的 AJP Connector 的端口是 8009。JK 本身提供了一个监控以及管理的页面 jkstatus,通过 jkstatus 可以监控 JK 目前的工作状态以及对到 tomcat 的连接进行设置,如下图所示:
图 1:监控以及管理的页面 jkstatus
在这个图中我们可以看到当前JK配了两个连接分别到 8109 和 8209 端口上,目前 s2 这个连接是停止状态,而 s1 这个连接自上次重启后已经处理了 47 万多个请求,流量达到 6.2 个 G,最大的并发数有 13 等等。我们也可以利用 jkstatus 的管理功能来切换 JK 到不同的 Tomcat 上,例如将 s2 启用,并停用 s1,这个在更新应用程序的时候非常有用,而且整个切换过程对用户来说是透明的,也就达到了无缝升级的目的。关于 JK 的配置文章网上已经非常多了,这里我们不再详细的介绍整个配置过程,但我要讲一下配置的思路,只要明白了配置的思路,JK 就是一个非常灵活的组件。
JK 的配置最关键的有三个文件,分别是
httpd.conf
Apache 服务器的配置文件,用来加载 JK 模块以及指定 JK 配置文件信息
workers.properties
到 Tomcat 服务器的连接定义文件
uriworkermap.properties
URI 映射文件,用来指定哪些 URL 由 Tomcat 处理,你也可以直接在 httpd.conf 中配置这些 URI,但是独立这些配置的好处是 JK 模块会定期更新该文件的内容,使得我们修改配置的时候无需重新启动 Apache 服务器。
其中第二、三个配置文件名都可以自定义。下面是一个典型的 httpd.conf 对 JK 的配置
# (httpd.conf)# 加载 mod_jk 模块LoadModule jk_module modules/mod_jk.so# # Configure mod_jk#JkWorkersFile conf/workers.properties JkMountFile conf/uriworkermap.propertiesJkLogFile logs/mod_jk.logJkLogLevel warn
接下来我们在 Apache 的 conf 目录下新建两个文件分别是 workers.properties、uriworkermap.properties。这两个文件的内容大概如下
## workers.properties## list the workers by name worker.list=DLOG4J, status# localhost server 1# ------------------------ worker.s1.port=8109worker.s1.host=localhostworker.s1.type=ajp13 # localhost server 2# ------------------------worker.s2.port=8209 worker.s2.host=localhostworker.s2.type=ajp13worker.s2.stopped=1 worker.DLOG4J.type=lbworker.retries=3worker.DLOG4J.balanced_workers=s1, s2 worker.DLOG4J.sticky_session=1worker.status.type=status
以上的 workers.properties 配置就是我们前面那个屏幕抓图的页面所用的配置。首先我们配置了两个类型为 ajp13 的 worker 分别是 s1 和 s2,它们指向同一台服务器上运行在两个不同端口 8109 和 8209 的 Tomcat 上。接下来我们配置了一个类型为 lb(也就是负载均衡的意思)的 worker,它的名字是 DLOG4J,这是一个逻辑的 worker,它用来管理前面配置的两个物理连接 s1 和 s2。最后还配置了一个类型为 status 的 worker,这是用来监控 JK 本身的模块。有了这三个 worker 还不够,我们还需要告诉 JK,哪些 worker 是可用的,所以就有 worker.list = DLOG4J, status 这行配置。
接下来便是 URI 的映射配置了,我们需要指定哪些链接是由 Tomcat 处理的,哪些是由 Apache 直接处理的,看看下面这个文件你就能明白其中配置的意义
/*=DLOG4J/jkstatus=status!/*.gif=DLOG4J!/*.jpg=DLOG4J!/*.png=DLOG4J !/*.css=DLOG4J!/*.js=DLOG4J!/*.htm=DLOG4J!/*.html=DLOG4J
相信你已经明白了一大半了:所有的请求都由 DLOG4J 这个 worker 进行处理,但是有几个例外,/jkstatus 请求由 status 这个 worker 处理。另外这个配置中每一行数据前面的感叹号是什么意思呢?感叹号表示接下来的 URI 不要由 JK 进行处理,也就是 Apache 直接处理所有的图片、css 文件、js 文件以及静态 html 文本文件。
通过对 workers.properties 和 uriworkermap.properties 的配置,可以有各种各样的组合来满足我们前面提出对一个 web 网站的要求。您不妨动手试试!
http_proxy
这是利用 Apache 自带的 mod_proxy 模块使用代理技术来连接 Tomcat。在配置之前请确保是否使用的是 2.2.x 版本的 Apache 服务器。因为 2.2.x 版本对这个模块进行了重写,大大的增强了其功能和稳定性。
http_proxy 模式是基于 HTTP 协议的代理,因此它要求 Tomcat 必须提供 HTTP 服务,也就是说必须启用 Tomcat 的 HTTP Connector。一个最简单的配置如下
ProxyPass /images !ProxyPass /css !ProxyPass /js ! ProxyPass / http://localhost:8080/
在这个配置中,我们把所有 http://localhost 的请求代理到 http://localhost:8080/ ,这也就是 Tomcat 的访问地址,除了 images、css、js 几个目录除外。我们同样可以利用 mod_proxy 来做负载均衡,再看看下面这个配置
ProxyPass /images !ProxyPass /css ! ProxyPass /js ! ProxyPass / balancer://example/<Proxy balancer://example/> BalancerMember http://server1:8080/BalancerMember http://server2:8080/ BalancerMember http://server3:8080/</Proxy>
配置比 JK 简单多了,而且它也可以通过一个页面来监控集群运行的状态,并做一些简单的维护设置。
图 2:监控集群运行状态
ajp_proxy
ajp_proxy 连接方式其实跟 http_proxy 方式一样,都是由 mod_proxy 所提供的功能。配置也是一样,只需要把 http:// 换成 ajp:// ,同时连接的是 Tomcat 的 AJP Connector 所在的端口。上面例子的配置可以改为:
ProxyPass /images !ProxyPass /css ! ProxyPass /js ! ProxyPass / balancer://example/<Proxy balancer://example/> BalancerMember ajp://server1:8080/BalancerMember ajp://server2:8080/ BalancerMember ajp://server3:8080/</Proxy>
采用 proxy 的连接方式,需要在 Apache 上加载所需的模块,mod_proxy 相关的模块有 mod_proxy.so、mod_proxy_connect.so、mod_proxy_http.so、mod_proxy_ftp.so、mod_proxy_ajp.so, 其中 mod_proxy_ajp.so 只在 Apache 2.2.x 中才有。如果是采用 http_proxy 方式则需要加载 mod_proxy.so 和 mod_proxy_http.so;如果是 ajp_proxy 则需要加载 mod_proxy.so 和 mod_proxy_ajp.so这两个模块。
三者比较
相对于 JK 的连接方式,后两种在配置上是比较简单的,灵活性方面也一点都不逊色。但就稳定性而言就不像 JK 这样久经考验,毕竟 Apache 2.2.3 推出的时间并不长,采用这种连接方式的网站还不多,因此,如果是应用于关键的互联网网站,还是建议采用 JK 的连接方式。
负载均衡过程:
1.安装apche,tomcat
http://httpd.apache.org/ 下载Apache 2.0.55
http://tomcat.apache.org/download-55.cgi 下载tomcat5.5 zip版本(解压即可,绿色版)
http://apache.justdn.org/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.15/ 下载mod_jk,注意和 apache版本匹配
按照jdk,我的路径为:E:"ide"apache"Apache2
解压两份Tomcat, 路径分别为 E:"ide"tomcat1,E:"ide"tomcat2
下载tomcat里的mod_jk,
2.修改Apache配置文件http.conf
在apache安装目录下conf目录中找到http.conf
在文件最后加上下面一句话就可以了
include "E:"ide"apache"Apache2"conf"mod_jk.conf"
LoadModule jk_module modules/mod_jk-apache-2.0.55.so
JkWorkersFile conf/workers.properties
worker.tomcat1.host=localhost #tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor = 1 #server的加权比重,值越高,分得的请求越多
worker.tomcat2.host=localhost #tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor = 1 #server的加权比重,值越高,分得的请求越多
#========controller,负载均衡控制器========
worker.controller.type=lb
worker.controller.balanced_workers=tomcat1,tomcat2 #指定分担请求的tomcat
worker.controller.sticky_session=1
将端口号设置为何tomcat1都不同。
System.out.println("===========================");
%>
就先到这吧!!!!
- Tomcat和Apache整合
- tomcat,apache 整合(摘抄)
- TOMCAT+APACHE整合
- Tomcat+apache整合(原创)
- 整合tomcat和apache
- 整合Apache+Tomcat服务器
- 整合Apache+Tomcat+MySQL
- 整合tomcat和apache
- apache+tomcat+mod_jk整合
- 整合apache tomcat服务器
- Apache与Tomcat整合
- apache、tomcat整合笔记
- APACHE整合TOMCAT教程
- tomcat和apache整合
- 整合apache tomcat服务器
- apache与tomcat整合
- Apache + Tomcat 整合
- 整合Apache和Tomcat
- C#WinForm程序常用函数设计
- 工资新规定,未来的八种人将会被淘汰
- GT-S7230E的手机阻止了某人的短信,如何恢复的问题
- 你幸福吗?
- Java面试题大全
- apache整合tomcat
- sql面试题目汇总(1)
- 无线网络覆盖
- sql面试题目汇总(2)
- 常见端口对照说明
- 秒杀多线程第二篇 多线程第一次亲密接触 CreateThread与_beginthreadex本质区别
- C#中常用处理字符串的方法
- 长大了,再也不会像从前那样单纯的笑了
- Android 内存优化测试