zoukankan      html  css  js  c++  java
  • jk_proxy实现apache+tomcat负载均衡

    Apache + tomcat实现server集群

    主要參照:http://blog.csdn.net/welun521/article/details/4169879



    採用JK_PROXY方式实现。兴许会研究ajp方式。也会出文档。待续……!

    一、apache安装

    主要參照:http://llying.iteye.com/blog/335342

    注:以上输入必须按给的格式。邮箱最好输入一个可用的。我在第一次安装的时候就是没按格式输入,结果不能启动,仅仅好卸了重装,应该是能够改动的,但没研究^-^!

    二、tomcat安装

    三、apache配置

    注:改动httpd.conf时,最好用记事本打开。不要用别的edit工具!

    这是配置后的conf文件夹,在apache配置时,特别注意,首先给httpd.conf做个备份,由于在配置的过程中发现一些非常怪异的现象。无缘无故就不能用了!最发做好备份,万一配置错误起码能恢复到最初状态,这个应该是一个各格程序猿的基本涵养吧^_^!

    以下開始具体配置:

    1、     将mod_jk-1.2.26-httpd-2.2.4.so在Apache2/modules文件夹下

    2、     创建mod_jk.conf文件,内容例如以下:

    #载入mod_jk Module  
    LoadModule jk_module modules/mod_jk-1.2.26-httpd-2.2.4.so    
    #指定 workers.properties文件路径  
    JkWorkersFile conf/workers.properties    
    #指定那些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器  
    JkMount /*.jsp controller  
    #假设还要指定*.do也进行分流就再加一行
    #JkMount /*.do controller
    #假设你想对全部的请求进行分流仅仅须要写成
    JkMount /* controller


    注:有用过程中最好把凝视性的汉字去掉,防止出错!(不须要的用户“#”凝视掉)

    事实上不加这个文件也能实现。只是须要在httpd.conf中配置,为不影响原文件,就再加个吧!

    有了这个文件后。我们仅仅须要在httpd.conf中加上:

    Include conf/mod_jk.conf

    就能够了。有些说加到文件最后,但我还是习惯放在有Include标签的后面,这个随便哈!

    3、     在conf下加入work.properties文件。内容例如以下:

    worker.list =controller,tomcat1,tomcat2  #server 列表  
    #========tomcat1========  
    worker.tomcat1.port=8009                    #ajp13端口号。在tomcat下server.xml配置,默认8009  
    worker.tomcat1.host=localhost            #tomcat的主机地址。如不为本机,请填写ip地址  
    worker.tomcat1.type=ajp13  
    worker.tomcat1.lbfactor = 1                #server的加权比重,值越高。分得的请求越多  
     
    #========tomcat2========  
    worker.tomcat2.port=8109             #ajp13端口号,在tomcat下server.xml配置,默认8009  
    worker.tomcat2.host=localhost            #tomcat的主机地址。如不为本机,请填写ip地址  
    worker.tomcat2.type=ajp13  
    worker.tomcat2.lbfactor = 2                #server的加权比重。值越高,分得的请求越多  
     
    #========controller,负载均衡控制器========  
    worker.controller.type=lb  
    worker.controller.balanced_workers=tomcat1,tomcat2                  #指定分担请求的tomcat  
    worker.controller.sticky_session=1 


    以上配置都非常明白。假设还想加入tomcat。按上面配置加入就可以。

    四、Tomcta配置

    Tomcata配置并无特别之处,基本的是要是在同一台机器上配置不同tomcat时须要注意的是要将第二个tomcat的port号改动下,不要与第一个冲突,不然无法启动!

    在session共享时,须要加入例如以下配置,在tomcat的server.xml中并没有这么多,这是在网上查的,只是,已经測试过,能够正常使用!

    配置例如以下:

    <Cluster   className="org.apache.catalina.ha.tcp.SimpleTcpCluster"channelSendOptions="6">
                                  <Manager   className="org.apache.catalina.ha.session.BackupManager"expireSessionsOnShutdown="false"notifyListenersOnReplication="true"mapSendOptions="6"/> 
                                  <Channel   className="org.apache.catalina.tribes.group.GroupChannel">
                                              <Membership   className="org.apache.catalina.tribes.membership.McastService"address="228.0.0.4" port="45564" frequency="500"dropTime="3000"/>  
                                              <Receiver   className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="auto" <span style="color:#ff0000;">port="4001"</span>selectorTimeout="100"maxThreads="6"/> 
                                              <Sender   className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
                                                <Transport   className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
                                              </Sender> 
                                              <Interceptor   className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/> 
                                              <Interceptor   className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/> 
                                              <Interceptor   className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
                                  </Channel> 
                                  <Valve  className="org.apache.catalina.ha.tcp.ReplicationValve"filter=".*.gif|.*.js|.*.jpeg|.*.jpg|.*.png|.*.htm|.*.html|.*.css|.*.txt"/> 
                                  <Deployer    className="org.apache.catalina.ha.deploy.FarmWarDeployer"tempDir="/tmp/war-temp/" deployDir="/tmp/war-deploy/"watchDir="/tmp/war-listen/" watchEnabled="false"/> 
                                  <ClusterListener    className="org.apache.catalina.ha.session.ClusterSessionListener"/>
                                </Cluster>




    红色部分须要注意下,两个tomcat不要反复,其他不用改动。

    如此。就能实现session共享。

    五、測试项目

    tomcat1中index.jsp内容例如以下:

    <%@ page language="java"contentType="text/html; charset=utf-8"
                  pageEncoding="utf-8"%>
    <%@ pagesession="false"%>
    <!DOCTYPE htmlPUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <metahttp-equiv="Content-Type" content="text/html;charset=ISO-8859-1">
    <title>Inserttitle here</title>
    </head>
    <body>
                  This is my JSP page.tomcat-A
                  <br>
                  <%
                                HttpSessionmysession = request.getSession(false);
     
                                if (mysession ==null) {
                                              mysession= request.getSession(true);
                                              mysession.setAttribute("appname","value-A");
                                              out.println("newsession:" + mysession.getId());
                                } else {
                                              out.println("oldsession:" + mysession.getId());
                                }
                                out.println("appname="+ mysession.getAttribute("appname"));
                                System.out.println("1111111111111111111111111111111111111111111111111111");
                  %>
     
    </body>
    </html>


    tomcat2下的index.jsp内容例如以下:

    <%@ pagelanguage="java" contentType="text/html; charset=utf-8"
                  pageEncoding="utf-8"%>
    <%@ pagesession="false"%>
    <!DOCTYPE htmlPUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <metahttp-equiv="Content-Type" content="text/html;charset=ISO-8859-1">
    <title>Inserttitle here</title>
    </head>
    <body>
                  This is my JSP page.tomcat-B
                  <br>
                  <%
                                HttpSessionmysession = request.getSession(false);
     
                                if (mysession ==null) {
                                              mysession= request.getSession(true);
                                              mysession.setAttribute("appname","value-B");
                                              out.println("newsession:" + mysession.getId());
                                } else {
                                              out.println("oldsession:" + mysession.getId());
                                }
                                out.println("appname="+ mysession.getAttribute("appname"));
                                System.out.println("22222222222222222222222222222222222222222222222222");
                  %>
     
    </body>
    </html>


    最后測试结果:


    页面效果:


    注意这几个点!

  • 相关阅读:
    OpenJDK源码研究笔记(十二):JDBC中的元数据,数据库元数据(DatabaseMetaData),参数元数据(ParameterMetaData),结果集元数据(ResultSetMetaDa
    Java实现 LeetCode 257 二叉树的所有路径
    Java实现 LeetCode 257 二叉树的所有路径
    Java实现 LeetCode 257 二叉树的所有路径
    Java实现 LeetCode 242 有效的字母异位词
    Java实现 LeetCode 242 有效的字母异位词
    Java实现 LeetCode 242 有效的字母异位词
    Java实现 LeetCode 241 为运算表达式设计优先级
    Java实现 LeetCode 241 为运算表达式设计优先级
    Java实现 LeetCode 241 为运算表达式设计优先级
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/6872682.html
Copyright © 2011-2022 走看看