apache与tomcat负载集群的3种方法
花了两天时间学习apache与tomcat的集成方法,现在把学习成果记录下来。
apache与tomcat负载集群集成方法有3种jk、jk_proxy、http_proxy
本次集成使用的软件版本:
tomcat:apache-tomcat-6.0.20.zip
jdk:jdk-6u14-windows-i586.exe
本次测试是1个apache集成两个tomcat。
安装apache http server省略,访问地址为http://127.0.0.1:8081
安装tomcat,解压apache-tomcat-6.0.20.zip,测试时我是把两个tomcat分开放在不同的虚拟机,其中一个是和apache同一台虚拟机。
两个tomcat分别命名为worker2和worker3
先说tomcat.worker2的配置:
server.xml
(1)配置http监听端口,这里端口设为8079,该步骤非必要,只要不冲突就行了。
<Connector port="8079" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
(2)配置AJP监听端口,这里端口设为8077,该步骤非必要,只要不冲突就行了。
<Connector port="8077" protocol="AJP/1.3" redirectPort="8443" />
(3)配置服务器标识,这里标识名配置为:worker2,添加jvmRoute="worker2",该步骤必须。
<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker2">
在Engine节点启用集群配置,只需去掉Cluster节点前的注释就行了,该步骤必须,配置了集群才能实现Session复制,如果只有一个集群,只 按我下边的配置就行了,如果多个集群,则不能按此配置,tomcat服务器内的帮助文档/docs/cluster-howto.html,/docs /config/cluster.html有介绍,需要的可以参考下。
<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker2">
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
要实现session复制,还需要在context.xml添加属性distributable="true",如下:
<Context distributable="true">
如果不想在context.xml中添加distributable="true",还有另一方法是在应用程序的web.xml中添加<distributeable/>,不过这方法我没有测试。
配置完成,访问地址为:http://127.0.0.1:8079
另一个tomcat.worker3的配置
server.xml
<Connector port="8078" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<Connector port="9009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker3">
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
context.xml配置tomcat.worker2一样。
配置完成,访问地址为:http://127.0.0.1:8078
注意:如果两个tomcat是放在同一台机内,server.xml可能还需要修改其它端口,请确认两个tomcat能正常启动。
在tomcat.worker2和tomcat.worker3的webapps文件夹添加同样的测试文件test"test.jsp
<html>
<head>
<title>helloapp</title>
</head>
<body>
<%
System.out.println("call test.jsp");
%>
SessionID: <%=session.getId() %>
</body>
</html>
访问http://127.0.0.1:8078/test/test.jsp和http://127.0.0.1:8079/test/test.jsp,确保能成功访问。
现在开始apache和tomcat的不同方式集成
1、jk方式集成
下载mod_jk-1.2.31-httpd-2.2.3.so,请下载合适的mod_jk版本,改名为mod_jk.so放进modules文件夹内
修改conf/httpd.conf配置
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel debug
JkMount /*.do loadbalancer
JkMount /*.jsp loadbalancer
增加conf/workers.properties文件,添加内容
worker.list=loadbalancer
worker.worker2.port= #ajp的监听端口
worker.worker2.host=108.88.3.105
worker.worker2.type=ajp13
worker.worker2.lbfactor=
worker.worker3.port=
worker.worker3.host=127.0.0.1
worker.worker3.type=ajp13
worker.worker3.lbfactor=
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=worker2,worker3 #这里在的worker2、worker3为需要与上边tomcat设置的别名一致
worker.loadbalancer.sticky_session=
配置完成任务,访问http://127.0.0.1:8081/test/test.jsp,检查是否能正常访问。
2、ajp_proxy
去掉httpd.conf文件中下面内容的注释(删掉#号),开启下边的配置
Include conf/extra/httpd-vhosts.conf
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
注意:
除了mod_proxy.so,mod_proxy_balancer.so,mod_proxy_connect.so
如果是采用ajp_proxy,需要加载mod_proxy_ajp.so这个模块;
如果是采用http_proxy,需要加载mod_proxy_http.so这个模块;
httpd.conf,删除刚才jk方式的配置内容,增加下边的配置
<proxy balancer://loadbalancer>
BalancerMember ajp://127.0.0.1:9009 loadfactor=1 route=worker3
BalancerMember ajp://108.88.3.105:8077 loadfactor=1 route=worker2
</proxy>
conf/extra/httpd-vhosts.conf增加配置
<VirtualHost *:8081>
ServerAdmin xxxx@xxx.com
ServerName localhost
ServerAlias localhost
ProxyPass / balancer://loadbalancer/ stickysession=jsessionid nofailover=On
ProxyPassReverse / balancer://loadbalancer/
ErrorLog "logs/loadbalancer-error.log"
CustomLog "logs/loadbalancer-access.log" common
</VirtualHost>
配置完成任务,访问http://127.0.0.1:8081/test/test.jsp,检查是否能正常访问。
3、http_proxy
http_proxy的配置与ajp_proxy类似,修改方法2的httpd.conf配置如下,其它不变
<proxy balancer://loadbalancer>
BalancerMember http://127.0.0.1:8078 loadfactor=1 route=worker3
BalancerMember http://108.88.3.105:8079 loadfactor=1 route=worker2
</proxy>
配置完成任务,访问http://127.0.0.1:8081/test/test.jsp,检查是否能正常访问。
文件下载:
http://download.csdn.net/download/li1669852599/8153513
apache与tomcat负载集群的3种方法的更多相关文章
- apache整合tomcat部署集群
近日,由于公司项目需要,所以学习了apache整合tomcat以及集群的一些知识. 所以做下笔记日后回顾可以用到. apache只有处理静态事物的能力, 而tomcat的强项就是处理动态的请求,所以a ...
- apache与tomcat负载集群集成方法配置
apache与tomcat负载集群集成方法有3种jk.jk_proxy.http_proxy apache:httpd-2.2.17-win32-x86-no_ssl.msi tomcat:apach ...
- 结合Apache和Tomcat实现集群和负载均衡 JK 方式 2 (转)
本文Apache+Tomcat集群配置 基于最新的Apache和Tomcat,具体是2011年4月20日最新的Tomcat和Apache集群和负载均衡配置. 准备环境 Apache Apa ...
- 结合Apache和Tomcat实现集群和负载均衡 JK 方式
本文基本参考自 轻松实现Apache,Tomcat集群和负载均衡,经由实操经历记录而成,碰到些出入,以及个别地方依据个人的习惯,所以在一定程度上未能保持原文的完整性,还望原著者海涵. 因原文中有较多的 ...
- 结合Apache和Tomcat实现集群和负载均衡
http://fableking.iteye.com/blog/360870 TomcatApacheJSP应用服务器Web 本文基本参考自 轻松实现Apache,Tomcat集群和负载均衡,经由实 ...
- 用apache和tomcat搭建集群,实现负载均衡
型的企业应用每天都需要承受巨大的访问量,在着巨大访问量的背后有数台服务器支撑着,如果一台服务器崩溃了,那么其他服务器可以使企业应用继续运行,用户对服务器的运作是透明化的,如何实现这种透明化呢?由如下问 ...
- 2. apache整合tomcat部署集群
apache只有处理静态事物的能力, 而tomcat的强项就是处理动态的请求,所以apache和tomcat整合相互取长补短,由apache作为入口,如果是请求静态页面或者是静态文件,由apache直 ...
- apache和tomcat搭建集群
最近在学习简单的apache服务器和两个tomcat一起搭建集群,这里简单记录一下 1.准备工作 ①搭建一个可以运行的web项目 用maven搭建springmvc项目 ,只要将这里面的web.xml ...
- Nginx+Tomcat+Memcached 集群
写过一篇 Apache Httpd+Tomcat 的集群, 现在来看看Nginx+Tomcat+Memcached是怎么集群的. 先看看用的版本和工具: Nginx: nginx-1.8.1 Tomc ...
随机推荐
- CSS3实现轮播图效果2
先前用CSS3做了一个一张图片实现的轮播,但是这样的图片很难找,于是又改进了一下. HTML: <div class="box"> <ul> <li& ...
- WWDC————苹果全球开发者大会
WWDC:Apple Worldwide Developers Conference(苹果全球开发者)的简称,每年定期由苹果公司(Apple Inc.)在美国举办.大会主要的目的是让苹果公司向研发者们 ...
- MVC5 Identity 用用户名登录而不用电子邮件
1.修改AccountViewModels ·修改RegisterViewModel public class RegisterViewModel { [Required] [Display(Name ...
- URL的语法及HTTP报文
大多数URL方案的URL语法都建立在这个由9部分构成的通用格式上: scheme://user:password@host:port/path;params?query#frag 方案:http或者h ...
- echo -n -e参数详解
echo -n 不换行输出 最终输出 123456 而不是 123 456 echo -e 处理特殊字符 若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出: \a 发出 ...
- js 触发select onchange事件
select 或text的onchange事件需要手动(通过键盘输入)改变select或text的值才能触发,本文为大家介绍下使用js触发select onchange事件select 或text的o ...
- DXperience重编译汉化的方法
1. 必须有DXperience相应版本的全部源代码SourceCode.把全部源代码复制到\Program Files\Developer Express .NET vX.X\Sources目录.目 ...
- python & pandas链接mysql数据库
Python&pandas与mysql连接 1.python 与mysql 连接及操作,直接上代码,简单直接高效: import MySQLdb try: conn = MySQLdb.con ...
- ok6410的LCD裸机范例
/****************************************** 实验步骤 1.配置引脚功能,将其GPI.GPJ引脚设置为VD数据输出模式,及GPJ后几位设置成LCD时钟输出: ...
- 一个朋友js图表开发遇到的问题 解决思路c和js
引言 不求知道一切, 只求发现一件 -- 乔治·西蒙·欧姆 附注:那些存在于梦幻中的事迹,那些儿时梦中的人物,每每看起,都觉得 .哎 .... 岁月 ... 一直在努力 ... ...