Apache与Tomcat集群(已验证Linux下原理相同)
2012-11-17 16:33
211 查看
转载请注明出处:http://blog.csdn.net/z787326
如有错漏欢迎交流
本文实现的是Apache+Tomcat的集群配置,在windows下完成,可以实现简单的负载均衡。
获得安装包是一个msi文件,开始安装,安装过程我就不截图了,安装过程中默认的端口是80,如果你已经有IIS等占用的话,需要修改。安装完成后你可以通过命令提示行的方式或者通过系统托盘中的管理工具来启动Apache服务,Apache的默认访问路径是其目录下的htdocs文件夹(类似Tomcat下的webapps中的ROOT),htdocs中已经有了一个静态的HTML文件index.html,启动我完成后通过浏览器访问localhost:你的端口号(若是80可不写),如果能成功打开页面看见It works!,说明Apache安装成功了。
1.22行左右
这个端口是用来监听关闭Tomcat请求的,只要Telnet到8005端口,输入SHUTDOWN,就可以关闭Tomcat的服务了,所以SHUTDOWN也要进行修改,原因你知道的。
2.69行左右
、
这个端口是Tomcat创建用来监听来自客户端请求的我将一个设置成8081,另一个Tomcat保持默认的8080不变。
修改完这两个端口号后,在浏览器里分别访问localhost:8080和localhost:8081,如果都能看到那只猫,说明你tomcat的准备OK了。
上面配置中的最后一行,是指定通过url来判断将哪些请求交给tomcat去处理,controller需要与workers.properties中配置的负载均衡控制器的名称相对应。
再新建一个workers.properties在其中配置我们tomcat的信息和控制器的信息,代码如下
我们经常会遇到一种情况,有两个服务器,并不是同时都提供服务的,只有当A服务器出现问题时,B服务器才马上接替A的工作,提供服务,只要加上一个参数就可以实现,例如
work.tomcat1.redirect=tomcat2,只有tomcat1出现问题的时候,才使用tomcat2。
worker.controller.sticky_session和worker.controller.sticky_session_force是控制session是否复制和有粘性的,取值有布尔和数值两种。
1=true,0=falase
这样就完成了Apache的配置
在90行左右,如下图
第一处,这是tomcat定义的一个JD Connector,使用ajp1.3协议,用来接收从其他服务器转发而来的请求,我们的两个tomcat,需要设置不同的端口号,分别设置成9090与9091。
第二处,这里的名字需要跟你在之前在workers.properties中设置的保持一致。
第三处,这句本来是注释掉的,去掉注释就可以了,这里是tomcat对集群时,处理数据同步的一种解决方案,前期我们不深究其中的原理,你可能在网上看见这里还需要配置很多的参数,但是一般默认的够用了,我们暂时什么都不加。
到此,所有的配置都结束了,准备测试。
然后将工程分别部署到你的Apache和两个tomcat上,将三者都启动起来,在浏览器里直接访问apache下的jsp页面,效果如下
Apache只是接收了用户请求,而后进行转发,而红框部分显示的tomcat,才是具体处理用户请求并相应的服务器。
好了,到这里简单的Apache和Tomcat集群就实现了。
如有错漏欢迎交流
本文实现的是Apache+Tomcat的集群配置,在windows下完成,可以实现简单的负载均衡。
环境搭建
Apache
第一步我们来搭建一个Apache,你可以去官网下载一个http://apache.etoak.com//httpd/,我下载的是httpd-2.2.22-win32-src.zip,因为2.2.22以上的版本,我就没找到windows下的包了。获得安装包是一个msi文件,开始安装,安装过程我就不截图了,安装过程中默认的端口是80,如果你已经有IIS等占用的话,需要修改。安装完成后你可以通过命令提示行的方式或者通过系统托盘中的管理工具来启动Apache服务,Apache的默认访问路径是其目录下的htdocs文件夹(类似Tomcat下的webapps中的ROOT),htdocs中已经有了一个静态的HTML文件index.html,启动我完成后通过浏览器访问localhost:你的端口号(若是80可不写),如果能成功打开页面看见It works!,说明Apache安装成功了。
Tomcat
Tomcat的版本没有限制,6或7都可以,我们用两个Tomcat来做测试,两个Tomcat需要相同的版本,下载去http://tomcat.apache.org/download-60.cgi。完成后解压两个。修改conf下的server.xml配置文件。我们先不进行集群的相关配置,先配置使得一个自己上能够同时运行2个Tomcat。需要修改两个地方。1.22行左右
这个端口是用来监听关闭Tomcat请求的,只要Telnet到8005端口,输入SHUTDOWN,就可以关闭Tomcat的服务了,所以SHUTDOWN也要进行修改,原因你知道的。
2.69行左右
、
这个端口是Tomcat创建用来监听来自客户端请求的我将一个设置成8081,另一个Tomcat保持默认的8080不变。
修改完这两个端口号后,在浏览器里分别访问localhost:8080和localhost:8081,如果都能看到那只猫,说明你tomcat的准备OK了。
集群配置
获取mod_jk
Tomcat Connector JK 是连接器。用于和其他WEB服务器整合。我们下载一个与Apache整合的JK,这里需要注意的是JK的版本号需要和你Apache的版本号相匹配。http://tomcat.apache.org/connectors-doc/news/20120301.html#31%20May%20-%20JK-1.2.37%20released下载地址,我下的是1.2.32支持Apache2.2的。JK大的版本有1和2,不知道什么原因,2一段时间后就不更新了,我们使用1.x的版本就ok了。将压缩包中的mod_jk解压到Apache目录下的modules文件夹中。Apache的集群配置
找Apache的conf文件夹中,有一个httpd.conf文件,你要可以将我们需要的配置直接加入文件的尾部,或者写一个新的conf文件,在httpd.conf中引入新文件。我使用后者。新建一个mod_jk.conf文件,代码如下。#加载插件 LoadModule jk_module modules/mod_jk.so #指定JK需要的配置文件 JkWorkersFile conf/workers.properties JkMount /*.jsp controller需要注意的一点是,所有配置中的路径,都需要将文件系统路径中的 \ 改为 / 否则找不到文件。
上面配置中的最后一行,是指定通过url来判断将哪些请求交给tomcat去处理,controller需要与workers.properties中配置的负载均衡控制器的名称相对应。
再新建一个workers.properties在其中配置我们tomcat的信息和控制器的信息,代码如下
#控制器列表 worker.list = controller #========tomcat1======== #指定基于ajp通讯的端口,需要与tomcat server.xml中的配置对应 worker.tomcat1.port=9090 worker.tomcat1.host=localhost worker.tomcat1.type=ajp13 #权重,权重越高被调用的可能性越大 worker.tomcat1.lbfactor = 1 #========tomcat2======== worker.tomcat2.port=9091 worker.tomcat2.host=localhost worker.tomcat2.type=ajp13 worker.tomcat2.lbfactor = 1 #========名为controller负载均衡控制器======== worker.controller.type=lb #tomcat1,tomcat2需要与Tomcat server.xml配置中的jvmRoute对应 worker.controller.balanced_workers=tomcat1,tomcat2 #下面两个参数是控制session是否同步和是否有粘性 worker.controller.sticky_session=false worker.controller.sticky_session_force=1一些简单的参数就不一一解释了,这里的ajp是一种定向包协议,基于Tcp连接,利用二进制传输可读性数据。
我们经常会遇到一种情况,有两个服务器,并不是同时都提供服务的,只有当A服务器出现问题时,B服务器才马上接替A的工作,提供服务,只要加上一个参数就可以实现,例如
work.tomcat1.redirect=tomcat2,只有tomcat1出现问题的时候,才使用tomcat2。
worker.controller.sticky_session和worker.controller.sticky_session_force是控制session是否复制和有粘性的,取值有布尔和数值两种。
1=true,0=falase
worker.controller.sticky_session:false | worker.controller.sticky_session:true | |
worker.controller.sticky_session_force:false | 每次都会请求都会跳转到另外tomcat,并复制原有的session | 每次请求都在一个tomcat,在使用的tomcat不能提供服务了才会跳转到另一个tomcat,但session不会复制 |
worker.controller.sticky_session_force:true | 每次都会请求都会跳转到另个tomcat,但不复制session | 每次请求都在一个tomcat,在使用tomcat不能提供服务了,返回:服务端会返回503 Service Temporarily Unavailable |
Tomcat配置
修改conf下server.xml在90行左右,如下图
第一处,这是tomcat定义的一个JD Connector,使用ajp1.3协议,用来接收从其他服务器转发而来的请求,我们的两个tomcat,需要设置不同的端口号,分别设置成9090与9091。
第二处,这里的名字需要跟你在之前在workers.properties中设置的保持一致。
第三处,这句本来是注释掉的,去掉注释就可以了,这里是tomcat对集群时,处理数据同步的一种解决方案,前期我们不深究其中的原理,你可能在网上看见这里还需要配置很多的参数,但是一般默认的够用了,我们暂时什么都不加。
到此,所有的配置都结束了,准备测试。
测试
我们主要测试是否实现了负载均衡和session的同步,新建一个web工程,编写一个jsp文件,附上代码<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" import="java.util.*"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <body> Server Info: <% out.println(request.getLocalAddr()+":"+request.getLocalPort()+"<br />"); out.println("<br />ID"+session.getId()+"<br />"); String dataName = request.getParameter("dataName"); System.out.println(dataName); if(dataName!=null&&dataName.length()>0){ String dataValue = request.getParameter("dataValue"); session.setAttribute(dataName, dataValue); } out.println("<b>Session数据列表</b><br />"); Enumeration e = session.getAttributeNames(); while(e.hasMoreElements()){ String name = (String)e.nextElement(); String value = session.getAttribute(name).toString(); out.println(name+"="+value+"<br />"); } %> <form action="routeTest.jsp" method="post"> 名称:<input type="text" size="20" name="dataName" /><br /> 值:<input type="text" size="20" name="dataValue" /><br /> <input type="submit" /> </form> </body> </html>网络上流程很广的代码,不解释了。
然后将工程分别部署到你的Apache和两个tomcat上,将三者都启动起来,在浏览器里直接访问apache下的jsp页面,效果如下
Apache只是接收了用户请求,而后进行转发,而红框部分显示的tomcat,才是具体处理用户请求并相应的服务器。
好了,到这里简单的Apache和Tomcat集群就实现了。
相关文章推荐
- Linux平台上搭建apache+tomcat负载均衡集群
- Linux系统下塔建Apache和Tomcat负载均衡集群
- 关于小猫的那点事:Linux+Apache2.4+tomcat集群
- LAHT(linux+apache+heartbeat+tomcat+mon)高可用网站集群
- linux环境下Apache+Tomcat集群配置
- linux下apache+tomcat集群详细配置
- linux平台的apache与tomcat的集群
- Apache HttpServer与Tomcat7集群Linux版
- Linux下Apache + Tomcat*2集群 负载平衡配置
- Linux下Apache与Tomcat的完全分布式集群配置(负载均衡)
- linux下安装apache并进行tomcat集群负载
- Linux 下配置apache+tomcat集群
- linux下apache+tomcat集群详细配置
- linux下一个apache+tomcat负载均衡和集群
- Apache + Tomcat +mod_jk- win7与linux下实现负载均衡与集群-
- Apache + Tomcat +mod_jk- win7与linux下实现负载均衡与集群-