Apache与Tomcat负载均衡
Apache HTTP Server 与 Tomcat 的三种连接方式JK,http_proxy,ajp_proxy。下面逐个介绍一下(本篇介绍的示例都是基于前面介绍的已经搭建好的Tomcat集群,都是本机,端口分别为18080和28080):
JK:
JK是最常见的方式,JK 本身有两个版本分别是 1 和 2,目前 1 最新的版本是 1.2.37,而版本 2 早已经废弃了,以后不再有新版本的推出了,所以建议你采用版本 1。
JK 是通过 AJP 协议与 Tomcat 服务器进行通讯的,Tomcat 默认的 AJP Connector 的端口是 8009(本机修改配置为18009和28009)。JK 本身提供了一个监控以及管理的页面 jkstatus,通过 jkstatus 可以监控 JK 目前的工作状态以及对到 tomcat 的连接进行设置。
AJP 协议
AJP是为Tomcat与HTTP服务器之间通信而定制的协议,能提供较高的通信速度和效率。
ajp13是一个二进制的TCP传输协议,相比HTTP这种纯文本的协议来说,效率和性能更高,也做了很多优化。显然,浏览器并不能直接支持AJP13协议,只支持HTTP协议。所以实际情况是,通过Apache的proxy_ajp模块进行反向代理,暴露成http协议给客户端访问。
实际上支持AJP代理的服务器非常少,比如目前很火爆的Nginx就没这个模块。因此tomcat的配置大部分都是关闭AJP协议端口的,因为除了Apache之外别的http server几乎都不能反代AJP13协议,自然就没太大用处了。
配置JK
1.下载mod_jk,Tomcat官网下载即可, http://tomcat.apache.org/download-connectors.cgi,下载对应版本
2.修改httpd.conf
1 # (httpd.conf)
2 # 加载 mod_jk 模块
3 LoadModule jk_module modules/mod_jk.so
4
5 #
6 # Configure mod_jk
7 #
8 JkWorkersFile conf/workers.properties
9 JkMountFile conf/uriworkermap.properties
10 JkLogFile logs/mod_jk.log
11 JkLogLevel warn
3.在conf目录下添加配置文件workers.properties,与上面JkWorkersFile的配置保持一致
#
# workers.properties
# # list the workers by name
# DLOG4J的名字是随便起的 worker.list=DLOG4J, status # localhost server 1
# ------------------------
worker.s1.port=18009
worker.s1.host=localhost
worker.s1.type=ajp13 # localhost server 2
# ------------------------
worker.s2.port=28009
worker.s2.host=localhost
worker.s2.type=ajp13 worker.DLOG4J.type=lb
worker.retries=3
worker.DLOG4J.balance_workers=s1, s2
worker.DLOG4J.sticky_session=1 worker.status.type=status
4.在conf目录下添加配置文件uriworkermap.properties,与上面JkMountFile的配置保持一致
/*=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 文本文件。
5.启动apache,两个tomcat
6.测试
先访问http://192.168.1.101:8080/jkstatus,可以看看jkstatus的状态
再访问http://192.168.1.101:8080/ClusterValidate/index.jsp
http_proxy
这是利用 Apache 自带的 mod_proxy 模块使用代理技术来连接 Tomcat。在配置之前请确保是否使用的是 2.2.x 版本的 Apache 服务器。因为 2.2.x 版本对这个模块进行了重写,大大的增强了其功能和稳定性。
http_proxy 模式是基于 HTTP 协议的代理,因此它要求 Tomcat 必须提供 HTTP 服务,也就是说必须启用 Tomcat 的 HTTP Connector。
配置http_proxy
1.恢复加载http_proxy相关模块
在httpd.conf文件中,去掉如下几行的注释
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_http_module modules/mod_status.so
2.在httpd.conf中加上proxy代理的ProxyPass
添加如下配置:
ProxyPass /images !
ProxyPass /css !
ProxyPass /js !
ProxyPass /balancer-manager ! ProxyPass / balancer://mycluster/
<Proxy balancer://mycluster/>
BalancerMember http://localhost:18080/
BalancerMember http://localhost:28080/
</Proxy> <Location /balancer-manager>
SetHandler balancer-manager
Order Deny,Allow
#Deny from all
Allow from localhost ip6-localhost
</Location>
3.启动apache,tomcat
4.测试
http://192.168.1.101:8080/balancer-manager查看均衡状态
http://192.168.1.101:8080/ClusterValidate/index.jsp测试负载均衡
ajp_proxy
与http_proxy基本一致,只是在ProxyPass的地址中,把http的地址转化为ajp的地址,及Tomcat坚挺的ajp端口号。如下:
ProxyPass /images !
ProxyPass /css !
ProxyPass /js !
ProxyPass /balancer-manager ! ProxyPass / balancer://mycluster/
<Proxy balancer://mycluster/>
BalancerMember ajp://localhost:18009/
BalancerMember ajp://localhost:28009/
</Proxy> <Location /balancer-manager>
SetHandler balancer-manager
Order Deny,Allow
#Deny from all
Allow from localhost ip6-localhost
</Location>
以上三种负载方案都行,但是官方建议还是jk模式好,效率高,稳定。
Apache与Tomcat负载均衡的更多相关文章
- 基于apache的tomcat负载均衡和集群配置
最近不是很忙,用零碎时间做点小小的实验. 以前公司采用F5负载均衡交换机,F5将请求转发给多台服务器,每台服务器有多个webserver实例,每个webserver分布在多台服务器,交叉式的分布集群. ...
- Apache/Nigix + Tomcat + 负载均衡
Part I: Apache + Tomcat + 负载均衡 http://www.open-open.com/lib/view/open1350612892352.html http://micha ...
- 基于Apache的Tomcat负载均衡和集群(2)
反向代理负载均衡 (Apache+JK+Tomcat) 使用代理服务器可以将请求转发给内部的Web服务器,让代理服务器将请求均匀地转发给多台内部Web服务器之一上,从而达到负载均衡的目的.这种代理方式 ...
- apache的tomcat负载均衡和集群配置 "
略看了一下,感觉太复杂,要配置的东西太多,因此在这里写出一种更简洁的方法. 要集群tomcat主要是解决SESSION共享的问题,因此我利用memcached来保存session,多台TOMCAT服务 ...
- Apache、Tomcat负载均衡与集群
一. 环境准备 1.软件下载 a) apache_2.0.55-win32-x86-no_ssl.msi: b) apache-tomcat-5.5.17.rar c) mod_jk-apache-2 ...
- 基于apache的tomcat负载均衡和集群配置session共享
接上面的话题接着继续完善.为什么没接到上篇呢?原因很简单太长的文章不爱看!就像有人写了上千行的方法一样,不是逼得没办法谁爱看谁看,反正我不看. 期间我没有一次配置成功,从失败的开始说起, 1.准备ja ...
- Linux平台上搭建apache+tomcat负载均衡集群
传统的Java Web项目是通过tomcat来运行和发布的.但在实际的企业应用环境中,采用单一的tomcat来维持项目的运行是不现实的.tomcat 处理能力低,效率低,承受并发小(1000左右).当 ...
- Apache+Tomcat负载均衡问题集锦
之前在windows 环境下搭建了下apache+tomcat负载均衡(不会的能够參考之前的文档,文档对于linux和windows都适用),一帆风顺.没有出现不论什么问题.今天尝试着在linux下搭 ...
- 1.Apache+Tomcat负载均衡+集群配置
1.本文Apache+Tomcat集群配置 基于最新的Apache和Tomcat,具体是2011年4月20日最新的Tomcat和Apache集群和负载均衡配置. 准备环境 Apache Apache是 ...
随机推荐
- FPGA烧完程序之后,检测不到网口的
原因:未给phy芯片添加复位 解决方法:在程序顶部添加一个输出信号output e_reset,使其值一直为高. output e_reset, 'b1;
- springBoot整合ecache缓存
EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider. ehcache提供了多种缓存策略,主要分为内存和磁盘两级,所以无需担心 ...
- WebService第二天——WebService框架CXF
一.CXF 1.什么是CXF Apache CXF = Celtix + XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF.CXF 继承 ...
- 北京Uber优步司机奖励政策(3月3日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- python字符串格式化符号及转移字符含义
博文出自鱼C论坛文章 http://bbs.fishc.com/thread-39140-1-1.html
- python之Queue
一.多进程的消息队列 “消息队列”是在消息的传输过程中保存消息的容器 消息队列最经典的用法就是消费者和生成者之间通过消息管道来传递消息,消费者和生成者是不通的进程.生产者往管道中写消息,消费者从管道中 ...
- 笔记:ndk-stack和addr2line
笔记:关于ndk开发调试时,获取崩溃堆栈方法 1. 使用ndk-stack 直接获取c/c++崩溃代码的文件名和行号 adb shell logcat | ndk-stack -sym $PROJEC ...
- PostFix支持SMTP认证
安装cyrus-sasl yum -y install cyrus-sasl* 启动服务,开机启动 service saslauthd start chkconfig saslauthd on 配置p ...
- python操作字符串内容并重新输出
今天在做一个函数的作业,题目如下: 编写一个函数实现大写转小写,小写变大写,并且转换为镜像字符串,并且将字符串变为镜像字符串. 例如:’A’变为’Z’,’b’变为’y 示范字符串: ”sdSdsfdA ...
- laravel 的DB::raw() 语法使用
z之前在项目中遇到一个问题,复杂的sql查询,用laravel的查询构造器,非常的不方便,各种查询条件拼接一长串拼得脑瓜疼:然后想使用原生的sql语句来查询,然后又使用不了laravel的pagina ...