Apache Http Server与Tomcat实现负载均衡和集群_第1页
Apache Http Server与Tomcat实现负载均衡和集群_第2页
Apache Http Server与Tomcat实现负载均衡和集群_第3页
Apache Http Server与Tomcat实现负载均衡和集群_第4页
Apache Http Server与Tomcat实现负载均衡和集群_第5页
已阅读5页,还剩11页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Apache Http Server与Tomcat实现负载均衡和集群Apache Http Server与Tomcat实现负载均衡和集群一、分布式实现原理如上图所示,主要通过Apache-Server作为中转服务器,实现多个tomcat服务器之间的分布式处理,用户直接请求Apache-Server,然后Apache-Server会将请求分发到具体的tomcat-server,之后tomcat-server响应客户请求并返回结果到Apache-Server,最后Apache-Server返回结果给用户二、负载均衡文件说明:mod_jk.conf主要定义mod_jk模块的位置以及mod_jk模块的

2、连接日志设置,还有定义perties文件的位置。 perties 定义worker的参数,主要是连接tomcat主机的地址和端口信息。如果Tomcat与apache不在同一台机器上,或者需要做多台机器上tomcat的负载均衡只需要更改perties文件中的相应定义即可。APACHE_HOME为你的安装目录环境说明:主要使用了一个Apache Server和两个Tomcat5.5,在同一台电脑上进行测试。1. 准备软件Jdk1.6下载地址:tomcat -6.0.29下载地址:apach

3、e_2.2.4-win32-x86-no_ssl.msi下载地址:/download.cgimod_jk-1.2.31-httpd-2.0.52.so (主要作用是建立Apache Server与Tomcat之间的连接)下载地址:/dist/tomcat/tomcat-connectors/jk/binaries/说明:apache-server安装完成后,可以在浏览器中输入http:/localhost/来测试,如果出现” It works!”则表示安装成功。2. 安装mod_jk连接模块安装好Jdk、tom

4、cat、apache后,加入mod_jk连接模块,就是把mod_jk-1.2.31-httpd-2.2.3.so文件拷贝到APACHE_HOMEmodules下,把jk模块的配置放到单独的文件中来,在APACHE_HOMEconf目录新建mod_jk.conf、perties文件。在httpd.conf最后加上:# JK module settingsInclude conf/mod_jk.conf说明:以上表示将mod_jk.conf配置文件包含进来3. 修改mod_jk.conf文件为了保持httpd.conf文件的简洁,把jk

5、模块的配置放到单独的文件中来。在mod_jk.conf文件中添加以下内容:# Load mod_jk2 moduleLoadModule jk_module modules/mod_jk-1.2.31-httpd-2.2.3.so# Where to find perties(引用workers配置文件)JkWorkersFile conf/perties# Where to put jk logs(log文件路径)JkLogFile logs/mod_jk2.log# Set the jk log level debug/error/info(lo

6、g级别)JkLogLevel info# Select the log format(log格式)JkLogStampFormat "%a %b %d %H:%M:%S %Y "# JkOptions indicate to send SSL KEY SIZE,JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories# JkRequestLogFormat set the request formatJkRequestLogFormat "%w %V %T"# Send JSPs fo

7、r context / to worker named loadBalancer(URL转发配置,匹配的URL才转发到tomcat进行处理)JkMount /*.jsp controller# JkMount /*.* loadBalancer4. 修改perties文件在perties文件中添加以下内容:#server 列表worker.list = controller,tomcat1,tomcat2# tomcat1(ajp13 端口号,在tomcat下server.xml配置,默认8009)worker.tomcat1.port=8009#t

8、omcat的主机地址,如不为本机,请填写ip地址worker.tomcat1.host=localhostworker.tomcat1.type=ajp13#server的加权比重,值越高,分得的请求越多worker.tomcat1.lbfactor = 1# tomcat2worker.tomcat2.port=9009worker.tomcat2.host=localhostworker.tomcat2.type=ajp13worker.tomcat2.lbfactor = 1# controller(负载均衡控制器)worker.controller.type=lb# 指定分担请求的to

9、mcatworker.controller.balanced_workers=tomcat1,tomcat2#worker.controller.sticky_session=true说明:此文件配置了2个tomcat服务器进行负载均衡处理,sticky_session表 述是否将对SESSION ID的请求路由回到相同的Tomcat worker。如果属性值不为0,它将被设置为JK_TRUE,session将是粘性的,即SESSION ID的请求路由回到相同的Tomcat worker;当Tomcat正使用能够跨越多个Tomcat实例持久化session数据的Session Manager时

10、,它将被设置为JK_FALSE5. 修改tomcat配置文件server.xml更改其中一个的设置打开tomcat2/conf/server.xml文件,修改里面所有的端口设置,将8改为9,如下:6. 编写一个测试页面teat1.jsp建立一个test的web应用,里面新建一个test1.jsp,内容为<% page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="

11、UTF-8"%><!DOCTYPE html PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN" "/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8&qu

12、ot;><title>test1</title></head><body><%    System.out.println("=");%></body></html>7. 启动服务器并进行测试依次启动apache-server、tomcat1、tomcat2,通过 http:/localhost/test/test1.jsp 访问,查看tomcat1的窗口,可以看到打印了一行"=",再刷新一次,tomcat2也打印了

13、一条,再刷新,可以看到请求会被tomcat1,tomcat2轮流处理,实现了负载均衡三、集群(session复制)只配置负载均衡还不行,还要session复制,也就是说其中任何一个tomcat的添加的session,是要同步复制到其它tomcat, 集群内的tomcat都有相同的session1. tomcat配置1.1 修改tomcat1, tomcat2的server.xml文件添加集群内容,tomcat5.5无需添加,只需要去掉注释符,tomcat6.0需要添加,内容如下:Tomcat5.5配置<Cluster className="org.apache.cat

14、alina.cluster.tcp.SimpleTcpCluster"                 managerClassName="org.apache.catalina.cluster.session.DeltaManager"             

15、60;   expireSessionsOnShutdown="false"                 useDirtyFlag="true"                 noti

16、fyListenersOnReplication="true">             <Membership                 className="org.apache.catalina.cluster.mcast.McastServic

17、e"                mcastAddr=""                mcastPort="45564"       &

18、#160;        mcastFrequency="500"                mcastDropTime="3000"/>             <Rece

19、iver                 className="org.apache.catalina.cluster.tcp.ReplicationListener"                tcpListenAddress="au

20、to"                tcpListenPort="4001"                tcpSelectorTimeout="100"      

21、          tcpThreadCount="6"/>             <Sender                className="org.apa

22、che.catalina.cluster.tcp.ReplicationTransmitter"                replicationMode="pooled"                ackTimeout="1500

23、0"                waitForAck="true"/>             <Valve className="org.apache.catalina.cluster.tcp.ReplicationValve"&#

24、160;                  filter=".*.gif;.*.js;.*.jpg;.*.png;.*.htm;.*.html;.*.css;.*.txt;"/>                  

25、             <Deployer className="org.apache.catalina.cluster.deploy.FarmWarDeployer"                      

26、tempDir="/tmp/war-temp/"                      deployDir="/tmp/war-deploy/"                

27、      watchDir="/tmp/war-listen/"                      watchEnabled="false"/>          

28、                              <ClusterListener className="org.apache.catalina.cluster.session.ClusterSessionListener"/> 

29、0;      </Cluster>Tomcat6.0配置<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"          channelSendOptions="6">   <!-     

30、60; <Manager className="org.apache.catalina.ha.session.BackupManager"       expireSessionsOnShutdown="false"                notifyListenersOnReplication

31、="true"                mapSendOptions="6"/>          ->    <Manager className="org.apache.catalina.ha.session.D

32、eltaManager"       expireSessionsOnShutdown="false"       notifyListenersOnReplication="true"/>       <Channel className="org.apache.catalina.tribes.group

33、.GroupChannel">        <Membership className="org.apache.catalina.tribes.membership.McastService"              address=""    

34、         port="45564"              frequency="500"              dropTime="3000"/>&

35、#160;       <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"          address="auto"          port="5000&q

36、uot;          selectorTimeout="100"          maxThreads="6"/>          <Sender className="org.apache.catalina.trib

37、es.transport.ReplicationTransmitter">           <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>        </Sender>   &

38、#160;    <Interceptor className="erceptors.TcpFailureDetector"/>        <Interceptor className="erceptors.MessageDispatch15Interceptor

39、"/>        <Interceptor className="erceptors.ThroughputInterceptor"/>    </Channel>    <Valve className="org.apache.catalina.ha.tcp.Repl

40、icationValve"       filter=".*.gif;.*.js;.*.jpg;.*.png;.*.htm;.*.html;.*.css;.*.txt;"/>    <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"        

41、60;  tempDir="/tmp/war-temp/"           deployDir="/tmp/war-deploy/"           watchDir="/tmp/war-listen/"       &#

42、160;   watchEnabled="false"/>        <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/> </Cluster>分别添加以上内容后,在tomcat2中,修改tcpListenPort="4001" 为40021.2. Engin

43、e增加jvmRoute属性设置,jvmRoute的值来自于perties文件所设置的服务器名称。<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">#server 列表worker.list = controller,tomcat1,tomcat22. 添加test.jsp页面2.1. test.jsp添加以下内容:<% page contentType="text/html;

44、0;charset=UTF-8"%><% page import="java.util.*"%><html><head><title>Cluster App Test</title></head><body>Server Info:<%  out.println(request.getLocalAddr() + " : " +

45、60;request.getLocalPort() + "<br>");%><%  out.println("<br> ID " + session.getId() + "<br>");  / 如果有新的 Session 属性设置  String dataName = request.get

46、Parameter("dataName");  if (dataName != null && dataName.length() > 0)      String dataValue = request.getParameter("dataValue");     session.setAttribute

47、(dataName, dataValue);    out.print("<b>Session 列表</b>");  Enumeration e = session.getAttributeNames();  while (e.hasMoreElements()      String name = (String)

48、0;e.nextElement();     String value = session.getAttribute(name).toString();     out.println(name + " = " + value + "<br>");     System.out.prin

49、tln(name + " = " + value);  %><form action="test.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>2.2. 修改web.xml文件,加入<distributable/>节点,如下所示:<?xml version="1.0" encoding="UTF-8"?><web-app x

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论