准备环境
Apache
Apache是http服务器,我们利用其对Tomcat进行负载均衡。目前最新版本为2.2.17,下载地址为http://httpd.apache.org/download.cgi#apache22。如下图:
目前已经出现Apache2.3.11,但是为beta版本,所以没有使用。
下载后直接安装msi即可,如果没有其他的http服务器(如iis)则应该可以成功安装,端口即为80,能够访问http://localhost/说明安装成功。
Tomcat
Tocmat7目前已经出现稳定版本的7.0.12,Tomcat6则为6.0.32。经我测试,这2个版本的Apache负载均衡配置过程都是一样的,因此下面的配置在Tomcat6或7集群是通用的。但是按照下面的配置,集群中Tomcat不能既有Tomcat6又有Tomcat7,否则虽能够负载均衡,但不能进行session复制,不知其他方式配置的集群是否可以。
Tomcat就不用怎么介绍了。既然在本地需要多个节点,那么需要下载ZIP版本的Tomcat。
JK
JK是Tomcat提供给http服务器的插件(个人理解的),下载地址为http://mirror.bjtu.edu.cn/apache/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.31/。如下图:
这里选择的是mod_jk-1.2.31-httpd-2.2.3.so,如果http服务器是Apache2.0.X版本,则必须选择mod_jk-1.2.31-httpd-2.0.52.so,页面下方有英文的说明,大家可以看下。
其实我也在网上看到Apache2.2已经集成Tomcat插件模块了,可以不用JK插件就可以实现Tomcat负载均衡,但也需要一些配置,而JK这个配置相比也不复杂,就先记录下来。
配置过程
下面就直接写过程了,我也是网络上学习的,只是总结下过程并且利用最新的Apache和Tomcat测试了下,还是与网络上有些不同的。
修改Apache配置
1、修改httpd.conf
我的Apache安装在D:\Program Files\Apache Software Foundation\Apache2.2,找到conf目录下的httpd.conf,在文件的最后一行添加
include "D:\Program Files\Apache Software Foundation\Apache2.2\conf\mod_jk.conf"
2、新建mod_jk.conf文件,内容如下:
LoadModule jk_module modules/mod_jk-1.2.31-httpd-2.2.3.so
JkWorkersFile conf/workers.properties
#指定那些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器名
JkMount /*.jsp controller
3、将下载的JK插件mod_jk-1.2.31-httpd-2.2.3.so复制到Apache安装目录的modules目录下。
4、新建并编辑workers.properties文件,内容如下:
#server
worker.list = controller
#========tomcat1========
worker.tomcat1.port=11009
worker.tomcat1.host=localhost
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor = 1
#========tomcat2========
worker.tomcat2.port=12009
worker.tomcat2.host=localhost
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor = 1
#========tomcat3========
worker.tomcat3.port=13009
worker.tomcat3.host=192.168.0.80 //在我的虚拟机中的,可以算远程的吧
worker.tomcat3.type=ajp13
worker.tomcat3.lbfactor = 1
#========controller,负载均衡控制器========
worker.controller.type=lb
worker.controller.balanced_workers=tomcat1,tomcat2,tomcat3
worker.controller.sticky_session=false
worker.controller.sticky_session_force=1
#worker.controller.sticky_session=1
这里可以配置任意多个Tomcat,此处配置了3个Tomat服务器,2个本地,1个远程,所以为了它们都能够顺利启动起来,本地的服务器端口都是不同的,如果Tomcat不再同一机器上,没必要改端口的。
配置Tomcat
配置3个Tomcat服务器,将Tomcat解压后复制3份,我将每个文件夹分别命名为Tomcat1,Tomcat2和Tomcat3,修改每一份的server.xml配置,将Tomcat1中修改部分如下图:
Tomcat2中以上部分的server.xml为:
Tomcat3中以上部分的server.xml为:
因为Tomat3在远程服务器,所以没必要改端口的,而我先进行的本地集群测试后将Tomcat3复制到远程服务器,所以这3个Tomcat端口都不同。
AJP13的connector的poat和jvmRoute名称和workers.properties中配置对应。
由于截图面积有限,还需要保证本地2个本地Tomcat配置server的port,connector为http1.1的port都不相同。
介绍
Apache2.2 本身拥有如mod_proxy这样一系列优秀的模块,它们拥有一部分和mod_jk一样的功能(AJP Protocol),也能整合实现负载均衡。
AJP (Apache Jserv Protocol) 当前版本是1.3,是一个持久性的二进制协议。持久性指web server 和application server 直接的连接一旦建立,在系统生命周期内一直保持open的状态。
从客户端看,web server 和application server本质上是一个单一的系统。
既然系统中的某个节点可能因为各种原因死掉,同application server 一样,mod_proxy和mod_jk需要能够发现各种连接和通道的错误并作出反应。
mod_jk在过去几年就已经拥有了这样的技术优势,现在有各种技术实现连接错误侦察和修复。从现在来看,mod_jk在这方面比mod_proxy有更多的优势。
协议
mod_jk是基于AJP协议的,这个协议也通常被认为是二进制http协议。基于二进制协议,主要考虑有两点,首先,客户请求信息已经在web server被解码,就不用再把完整的请求数据发送给application server了;其次,在web server 和 application server 之间,请求和返回 header信息不再是string形式,而是两字节序列的原子形式,这样也就降低了网络带宽要求。
但是,AJP协议有一个主要的限制,就是packet的大小不能超过8K。最新的mod_jk和Tomcat使得这个限制可以加大到64K,但是还是有限制。mod_proxy也有限制,最大的packet大小是8K.如果遇到较大的客户端请求就会出问题了,特别像有些客户SSO模块存储了大量的session信息在cookies和header中。如果在要支持大型客户端请求,唯一的解决方案是使用AJP http协议。
加密以及SSL支持
AJP协议没有加密,不能够用在开放外部网络环境中。在这样的环境中,web server和application server 直接的的通信可能会被监听,需要使用一定的SSL隧道技术保障数据安全。另外一个选择是使用https协议结合mod_proxy.但是https会稍微复杂一点,需要在application server中添加filter处理客户端传递过来的证书。AJP协议则会自动处理,它将加密数据通过序列的方式再web server 和application server直接传递。可以说,AJP协议的行为像是一个缓存SSL的加速器(the AJP protocol behaves like caching SSL accelerator)。
这样的性能更高效,因为数据只需进行一次解密。但是使用不同的网卡进行通信、建设防火墙和路由才是保障web server和application server之间通信安全最好的解决方案。
另外有些观点认为,将web server 和application server 放置在同一台物理机器上,他们直接通过内存进行通信,这样可以加强整个系统的安全性。
负载均衡
最新的mod_jk比mod_proxy_balancer有更多的优势特性。mod_jk额外拥有一些“商业特性”方法,可以根据实际application server 反应时间设置负载均衡。 mod_jk的“负责均衡维护”(load balancer maintenance)功能,能够有效的处理突发爆炸性的请求;当一个节点在维护的时候,能够减少降低此间的的请求。这种情况需要大量的application server和session replication(会话复制)。 mod_jk的Domain Model Clustering功能,支持最新Jboss Cache的buddy replication。它通过将集群中的节点进行分组来降低session replication 数据传输,而且replication动作只需在集群中的(相邻的)节点之间进行。
Apache httpd 各个版本
新版mod_proxy只支持Apache httpd 2.2和更高版本,也就是说,如果web server升级需要同时升级新版的mod_proxy.
Apache httpd可以结合worker-mpm使用。使用worker mpm的时候,mod_proxy和mod_jk都有设置web和application server之间连接池大小的选项。这个选项在部署的时候很有必要,可以使用Apache httpd 在application server之前传送一些其他内容,例如传送递静态内容等。在这种情况下,时间发送到application server的请求比实际上web server接收到的客户端请求要少很多,它允许worker mpm的链接池大小设置比MaxThreadsPerChild更小。
Windows和Netware版本的Apache httpd是完全线程的,所有他们的mpm和连接池大小可以设置处理更大的范围。
mod_proxy vs. mod_jk
那么什么时候使用哪一个呢?这依赖于你的架构。如果你已经有了或者需要apache 2.2的功能,那么你可以再mod_proxy和mod_jk直接选择。mod_jk在apache2.2上允许得很好。关键看你需要什么样的功能:
mod_proxy
- 优势:
- 不需要编译和维护一个对立的模块。mod_proxy,mod_proxy_http,mod_proxy_ajp,mod_proxy_balancer已经是apache 2.2+的标准集成部分;
- 可以使用http、https和AJP协议,即便是在同一个balancer中。
- 劣势:
- mod_proxy_ajp不支持大于8k的数据包;
- 只有最基本的负载均衡器;
- 不支持域模型集群(domain model clustering)
mod_jk
- 优势:
- 先进的负载均衡器;
- 先进的节点失败侦察功能;
- 支持大型AJP 数据包
- 劣势:
- 需要单独维护一个独立的模块
转载:http://zengzhaoshuai.iteye.com/blog/1172900
2. 网上关于mod_JK的集成方式也有很多.
apache2.2 下载:
http://mirror.bit.edu.cn/apache/httpd/binaries/win32/
好像现在的2.4版本,在window 没有版本,还是用这个2.2吧, 还不错。
mod_jk: 31 May 2012 - JK-1.2.37 released 最新版本
http://tomcat.apache.org/download-connectors.cgi
http://apache.dataguru.cn//tomcat/tomcat-connectors/jk/binaries/windows/
参考:重点参考:
http://www.iteye.com/topic/757125
http://www.iteye.com/topic/945022
http://zengzhaoshuai.iteye.com/blog/1172900
http://www.iteye.com/topic/1017961
http://blog.163.com/comfort_122/blog/static/48904409201131145149530/
相关推荐
apache2.2+tomcat7
Apache2.2与Tomcat5.5的整合配置是一个常见的任务,特别是在那些希望利用Apache作为前端服务器处理静态内容,而将动态请求转发给Tomcat处理的环境中。这种配置可以提高服务器性能并优化资源分配。 首先,我们需要...
在IT行业中,集成Apache2.2与Tomcat6是一个常见的任务,这主要涉及到Web服务器与应用服务器的联合部署,以实现动态和静态内容的高效分发。Apache2.2是一个强大的HTTP服务器,常用于处理静态内容,而Tomcat6则是一个...
Apache2.2+Tomcat集群 只是一个简单的集群例子,所用到的Apache,Tomcat压缩文件里都有
直接下载, 即可用 apache2.4+tomcat 7 集群配置
本配置"Apache2.2+tomcat7+jk+jdk1.6"旨在实现一个稳定且可靠的环境,特别关注于session的共享与管理,以解决多服务器间的session一致性问题。 Apache2.2是Apache HTTP Server的第2.2版本,提供了强大的静态内容...
Apache2.2与Tomcat6集群配置是一种常见的Web服务架构,用于提高网站的可用性和可扩展性。在Windows环境下,这种配置可以实现负载均衡,确保即使单个服务器出现故障,整个系统仍然能继续运行,同时分散请求以降低单一...
### Apache 2.2 + Tomcat 6.0 + MySQL 5.0 + mod_jk 整合 本文旨在深入探讨如何将Apache 2.2、Tomcat 6.0、MySQL 5.0以及mod_jk进行有效的整合,以构建一个高性能、可扩展的应用服务器环境。这种整合方式不仅能够...
JBoss自身提供的负载均衡器效果不理想,通常选择Apache+mod_jk作为负载均衡解决方案。mod_jk是Apache的一个模块,用于Apache与Tomcat(JBOSS内部使用Tomcat的HTTP服务)之间的通信,它是实现JBOSS集群的关键组件。 ...
本备忘录主要关注如何在Windows上配置Apache2.2与Tomcat5.5,同时利用Apr(Apache Portable Runtime)库提升性能。 Apache2.2是世界上最流行的开源HTTP服务器,它处理静态文件非常高效。而Tomcat5.5则是一个开源的...
以下是关于如何配置Apache2.2与Tomcat6的详细步骤和知识点: 1. **Apache2.2简介**: Apache2.2是Apache HTTP Server的一个版本,主要负责处理HTTP请求,提供静态网页内容。它具有良好的稳定性和丰富的模块支持。 ...
Apache2.2与Tomcat6.0的组合可以构建一个高效、可靠的负载均衡服务器系统,以分散客户端请求到多个后端应用服务器,提高整体服务的可用性和响应速度。以下是搭建和配置的关键步骤及知识点: 1. **Apache2.2安装配置...
"两台服务器上做Apache2.2+Tomcat6.0+mod_jk的负载均衡"是一个典型的分布式系统架构,旨在通过在多台服务器之间分配工作负载来提高系统的稳定性和性能。下面将详细介绍这个配置涉及的知识点: 1. **Apache ...
Apache2.2与Tomcat6.0的组合可以创建一个高效能、高可用性的Web服务器环境,通过负载均衡技术,可以有效地分散用户请求到多个Tomcat实例,从而提高系统的响应速度和整体性能。以下是关于这个配置的详细知识讲解: 1...
Apache2.4+Tomcat8.0集群安装--测试项目。集群配置地址为: