apache+tomcat负载均衡3种实现方式
1.首先安装apache,编译完成后,通过IP:端口就行访问,如果返回“it workers”证明Apache启动成功(注意apache的工程路径要正确)
2.下载JK,下载地址为http://mirror.bjtu.edu.cn/apache/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.31/,果http服务器是Apache2.0.X版本,则必须选择mod_jk-1.2.31-httpd-2.0.52.so,页面下方有英文的说明,大家可以看下,我这里宣传的mod_jk-1.2.23-apache-2.2.x-linux-x86_64.so,跟自己操作系统版本吻合,然后重命名为mod_jk.so,并且赋值777权限
3.将mod_jk.so拷贝到apache/modules
4.在httpd.conf里增加如下内容
include "/usr/local/apache/conf/mod_jk.conf"
5.在conf路径下新建mod_jk.conf文件,并添加如下内容
#加载mod_jk Module
LoadModule jk_module modules/mod_jk.so
#指定 workers.properties文件路径
JkWorkersFile conf/workers.properties
#指定哪些请求交给tomcat处理,"loadbalancer"为在workers.propertise里指定的负载分配控制器名
JkLogFile logs/mod_jk.log
#JkLogLevel debug
JkMount /*.do loadbalancer
JkMount /*.jsp loadbalancer
6.在conf下新建workers.properties文件,并添加如下内容
worker.list=loadbalancer
#此处与mod_jk.conf中保持一致
worker.worker2.port=8009
#tomcat2中 ajp13 端口号,对应tomcat配置文件server.xml中Connector port="8009",默认8009
worker.worker2.host=127.0.0.1
#worker2的地址,本机loaclhost或者127.0.0.1,远程直接写IP
worker.worker2.type=ajp13
#与worker2中的server.xml的protocol保持一致
worker.worker2.lbfactor=1
#负载的权重值,越高表示负载越大
worker.worker3.port=9009
worker.worker3.host=127.0.0.1
worker.worker3.type=ajp13
worker.worker3.lbfactor=1
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=worker2,worker3
#指定负载的worker列表,用逗号分隔
worker.loadbalancer..sticky_session=false
#配置session会话是否为粘性
#这样负载均衡器lb就会尽量保持一个session,也就是使用户在一次会话中跟同一个Tomcat进行交互
worker.loadbalancer..sticky_session_force=false
worker.loadbalancer.sticky_session=1
#是否启用session共享
7.下载tomcat并解压,复制2份tomcat,保持成为worker2,worker3
修改2个tomcat的server.xml,保证2个tomcat的端口号不一致,具体配置如下,需要修改黑体加粗标示
worker2如下:
<?xmlversion='1.0'encoding='utf-8'?>
<Serverport="8005"shutdown="SHUTDOWN">
<ListenerclassName="org.apache.catalina.core.AprLifecycleListener"SSLEngine="on"/>
<ListenerclassName="org.apache.catalina.core.JasperListener"/>
<ListenerclassName="org.apache.catalina.mbeans.ServerLifecycleListener"/>
<ListenerclassName="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
<GlobalNamingResources>
<Resourcename="UserDatabase"auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml"/>
</GlobalNamingResources>
<Servicename="Catalina">
<Connectorport="8080"protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"/>
<Connectorport="8009"protocol="AJP/1.3"redirectPort="8443"/>
<!--<Engine name="Catalina" defaultHost="localhost">-->
<Enginename="Catalina"defaultHost="localhost"jvmRoute="worker2">
<RealmclassName="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
<Hostname="localhost"appBase="webapps"
unpackWARs="true"autoDeploy="true"
xmlValidation="false"xmlNamespaceAware="false">
</Host>
</Engine>
</Service>
</Server>
worker3如下:
<?xmlversion='1.0'encoding='utf-8'?>
<Serverport="8006"shutdown="SHUTDOWN">
<ListenerclassName="org.apache.catalina.core.AprLifecycleListener"SSLEngine="on"/>
<ListenerclassName="org.apache.catalina.core.JasperListener"/>
<ListenerclassName="org.apache.catalina.mbeans.ServerLifecycleListener"/>
<ListenerclassName="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
<GlobalNamingResources>
<Resourcename="UserDatabase"auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml"/>
</GlobalNamingResources>
<Servicename="Catalina">
<Connectorport="8081"protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"/>
<Connectorport="9009"protocol="AJP/1.3"redirectPort="8443"/>
<!--<Engine name="Catalina" defaultHost="localhost">-->
<Enginename="Catalina"defaultHost="localhost"jvmRoute="worker3">
<RealmclassName="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
<Hostname="localhost"appBase="webapps"
unpackWARs="true"autoDeploy="true"
xmlValidation="false"xmlNamespaceAware="false">
</Host>
</Engine>
</Service>
</Server>
8.分别在2个tomcat下建立项目test1,并新增andashu.jsp,内容如下:
<%
System.out.println("===========");
%>
9.分别访问2个tomcat,http://IP:8081/test1/andashu.jsp 以及http://10.14.133.204:8080/test1/andashu.jsp,如果2个tomcat的日志catalina.out里 都打印出===========,证明2个tomcat访问都ok
10.分别启动apache worker2,worker3,用不同的浏览器或者不同的机器分别访问http://IP/test1/andashu.jsp,如果如果2个tomcat的日志catalina.out里 都打印出===========,证明负载均衡搭建成功(这里要用不同浏览器或者不同机器访问)
11.试节点故障,随便停掉其中的一台tomcat,继续访问http://IP/test1/andashu.jsp,能正常访问
其他2种方式也可以实现负载均衡
2、ajp_proxy
去掉httpd.conf文件中下面内容的注释(删掉#号),开启下边的配置
注意:
除了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方式的配置内容,增加下边的配置
conf/extra/httpd-vhosts.conf增加配置
配置完成任务,访问http://IP:8081/test1/andashu.jsp,检查是否能正常访问。
3、http_proxy
http_proxy的配置与ajp_proxy类似,修改方法2的httpd.conf配置如下,其它不变
配置完成任务,访问http://IP:8081/test/test.jsp,检查是否能正常访问

apache+tomcat负载均衡3种实现方式的更多相关文章
- Linux平台上搭建apache+tomcat负载均衡集群
传统的Java Web项目是通过tomcat来运行和发布的.但在实际的企业应用环境中,采用单一的tomcat来维持项目的运行是不现实的.tomcat 处理能力低,效率低,承受并发小(1000左右).当 ...
- Nginx记录-nginx 负载均衡5种配置方式(转载)
nginx 负载均衡5种配置方式 1.轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除. 2.weight 指定轮询几率,weight和访问比率成 ...
- nginx 负载均衡5种配置方式
nginx 负载均衡5种配置方式 1.轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除. 2.weight 指定轮询几率,weight和访问比率成正比, ...
- Apache+Tomcat负载均衡问题集锦
之前在windows 环境下搭建了下apache+tomcat负载均衡(不会的能够參考之前的文档,文档对于linux和windows都适用),一帆风顺.没有出现不论什么问题.今天尝试着在linux下搭 ...
- Windows下apache+tomcat负载均衡
Windows下apache+tomcat负载均衡 网上已经有很多的资料,但是很多都比较零碎,需要整合一起才能搭建出理想的负载均衡,正好前段时间搭建了windows与linux下的负载均衡,在此记录, ...
- 1.Apache+Tomcat负载均衡+集群配置
1.本文Apache+Tomcat集群配置 基于最新的Apache和Tomcat,具体是2011年4月20日最新的Tomcat和Apache集群和负载均衡配置. 准备环境 Apache Apache是 ...
- apache+tomcat 负载均衡
说明:本篇不面向无开发基础的人员,所以不会有软件下载,jdk安装等步骤.比较久远的东西了...... 1.系统环境 win7-64.jdk 2.软件列表: apache_2.2.24-x64-no-s ...
- apache + tomcat 负载均衡分布式集群配置
Tomcat集群配置学习篇-----分布式应用 现目前基于javaWeb开发的应用系统已经比比皆是,尤其是电子商务网站,要想网站发展壮大,那么必然就得能够承受住庞大的网站访问量:大家知道如果服务器访问 ...
- Apache + Tomcat 负载均衡 session复制
转自:http://blog.csdn.net/cssmhyl/article/details/8455400 http://snowolf.iteye.com/blog/743611 Apache ...
随机推荐
- 查询相应id下的数据
---恢复内容开始--- u方法这样的:带不起模板引擎 <a href="{:U('Del/wzxg','','')}/{$vo.id}">修改</a> 这 ...
- Openfire配置过程,以及与php交互注意事项。
Ben Werdmuller 是一位 Web 策划师和开发人员,他专注于开放源码平台.他是开源社交网络框架 Elgg 的共同创始人和技术带头人.Ben 的博客 http://benwerd.com/. ...
- C++ Primer学习笔记(二)
题外话:一工作起来就没有大段的时间学习了,如何充分利用碎片时间是个好问题. 接 C++ Primer学习笔记(一) 27.与 vector 类型相比,数组的显著缺陷在于:数组的长度是固定的,无法 ...
- par函数pch参数-控制点的形状
pch函数用来控制点的形状,这个参数不仅在par函数中有,在大多数的高级绘图函数中都有. 代码示例: plot(rep(1:5, times = 5), rep(5:1, each = 5), pch ...
- Prime is problem - 素数环问题
题目描述: A ring is compose of n circles as shown in diagram. Put natural number 1, 2, ..., n into each ...
- mysql 中查看指定表的字段名 (可根据字段变量生成c#后台代码)
select DISTINCT data_type from COLUMNS where table_name='表名' 用ConCat();构造生成代码.....
- linux系统中RPM包的通用命名规则
http://blog.csdn.net/kexiuyi/article/details/53292358
- 如何在 React Native 中写一个自定义模块
https://my.oschina.net/jpushtech/blog/983230
- day11<Java开发工具&常见对象>
Java开发工具(常见开发工具介绍) Java开发工具(Eclipse中HelloWorld案例以及汉化) Java开发工具(Eclipse的视窗和视图概述) Java开发工具(Eclipse工作空间 ...
- Java精选笔记_Servlet事件监听器
Servlet事件监听器 概述 在程序开发中,经常需要对某些事件进行监听,如监听鼠标点击事件.监听键盘按下事件等,此时就需要使用事件监听器. 事件监听器用于对程序中发生的事件进行监听,在监听的过程中会 ...