• linux下一个apache+tomcat负载均衡和集群


    先说一下我的环境

    一个ubuntu虚拟机,

    一个apache2.2示例

    两tomcat1.7示例


    1.安装apacheserver

    sudo apt-get install apache2
    假设要重新启动的话,执行命令:

    sudo /etc/init.d/apache2 restart

    ubuntu下的apache会默认创建路径/var/www,apache默认载入的时候,就是载入的这个路径以下的

    2.安装两个tomcat实例

    去官网下载一个

    然后在本地在cp一下,

    此时文件夹结构为:

    /home/hehe/my/soft/tomcat1,

    /home/hehe/my/soft/tomcat2

    3.安装mod_jk

    mod_jk实质上是Apache与Tomcat的连接器,并藉此附带提供集群和负载均衡的功能。

    地址为http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/linux/jk-1.2.31/x86_64/,注意要于你安装的apache的版本号相应。

    4.配置apache

        ubuntu默认会将apache的安装文件放在/etc/apache2以下

    进入这个文件夹之后,新建一个httpd.conf文件

    放心apache启动时,会载入这个文件的

    然后编译这个文件。加上这么句话

    ServerName localhost:80
        include mod_jk.conf
             

    然后我们在当前路径下新建一个mod_jk.conf文件

    这里先要将mod_jk-1.2.31-httpd-2.2.x.so放在当前路径下

    #load module mod_jk-1.2.31-httpd-2.2.3.so is for Apache 2.2.x.  
    LoadModule jk_module /usr/lib/apache2/modules/mod_jk-1.2.31-httpd-2.2.x.so
    
    #这个是用来配置负载的
    JkWorkersFile workers.properties
    #这个是打印日志
    JkLogLevel debug
    #这个是日志的名称
    JkLogFile mod_jk.log
    #打印的级别
    JkLogLevel warn

    所以在当前路径下咱们还得新建一个 mod_jk.log,文件。这里面会记录日志

    接下来配置workers.properties文件

    在当前路径下新建一个workers.properties文件

    #负载均衡器
    worker.list=LB_worker,worker_1,worker_2,jkstatus  
    
    #第一个tomcat的配置
    worker.worker_1.host=localhost #tomcat在哪个机器上面,若是别的机器。须要写上别的机器的ip地址  
    worker.worker_1.port=8009      #端口,等会在tomcat里面配置的时候要一一相应
    worker.worker_1.type=ajp13     
    worker.worker_1.lbfactor=1     #载入因子
    
    #第二个tomcat的配置
    worker.worker_2.host=localhost  
    worker.worker_2.port=9009  
    worker.worker_2.type=ajp13  
    worker.worker_2.lbfactor=1  
    
    #类型是一个负载均衡器
    worker.LB_worker.type=lb
    #重试三次
    worker.LB_worker.retries=3
    #负载给tomcat1和tomcat2
    worker.LB_worker.balance_workers=worker_1,worker_2
    #这是说session的粘性,就是说同一个session是否提交给同一个tomcat。由于等会儿,集群的时候要用到一个session提交给两台机器,所以设置为false
    worker.LB_worker.sticky_session=false  
    worker.LB_worker.sticky_session_force=false
    #jk的状态  
    worker.jkstatus.type=status
    5.配置请求交给负载均衡器

    在/etc/apache2/sites-available下有个default文件,

    在这个文件的最后一句话</VirtualHost>之前加上这么一段

    JkMount /*.jsp LB_worker
    JkMount /jkstatus jkstatus
    然后就交给了LB_worker

    6.接下来配置tomcat1

    改一下conf以下的server.xml文件,改port,和上面的相应

       <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

    然后找到这句话,改成这样,注意worker_1和workers.properties相应

    <Engine name="Catalina" defaultHost="localhost" jvmRoute="worker_1">

    若是集群的话,还要改一句话。把这句话的前后的凝视符号给去掉,放开

    <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

    接下来配置tomcat2

    先把以下这句话给改了,port号改为8006

    <Server port="8006" shutdown="SHUTDOWN">

    然后改以下这句

        <Connector port="9082" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="9443" />

    改一下conf以下的server.xml文件,改port。和上面的相应

       <Connector port="9009" protocol="AJP/1.3" redirectPort="9443" />

    然后找到这句话,改成这样。注意worker_2和workers.properties相应

    <Engine name="Catalina" defaultHost="localhost" jvmRoute="worker_2">

    若是集群的话,还要改一句话,把这句话的前后的凝视符号给去掉,放开

    <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

    7.新建一个项目mytest,里面有一个叫wel.jsp的文件,

    这个jsp的内容是:

    <%@ page language="java" contentType="text/html; charset=GB18030"
        pageEncoding="GB18030"%>
    <!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=GB18030">
    <title>Insert title here</title>
    </head>
    <body>
    <%
       System.out.println("this is tomcat server nod 2");
    %>
    <%
    int i=0;
        while(i<3000){i++;
        }
        out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>this is tomcat server nod 2");
    %>
    </body>
    </html>
    然后将这个项目放在tomcat2的webapp以下

    同一时候也放在tomcat1的文件夹下

    注意。以下这句改成这样,2改为1

       System.out.println("this is tomcat server nod 1");
    


        out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>this is tomcat server nod 1");
    

    8.重新启动一个apache,tomcat1,tomcat2

    然后在浏览器里面訪问

    http://127.0.0.1/mytest/wel.jsp

    不断的刷新页面。你会发现其在node1,和node2之间不断换。说明请求有时候交给了1,有时候交给了tomcat2,实现了负载均衡的功能


    以下在来实现tomcat1。和tomcat2的集群功能

    所谓集群就是。一个client的相应的session在两个tomcat中有一模一样的相应的session

    在mytest里面在新建一个wel2.jsp文件

    里面的内容为:

    <%@ page contentType="text/html; charset=utf-8" %>
    <%@ page import="java.util.*" %>
    <html><head><title>Cluster App Test</title></head>
    <body>
    Server Info:
    <%
    out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>
    <%
      out.println("<br> ID " + session.getId()+"<br>");
      // 在session里面设置属性
      String dataName = request.getParameter("attributeName");
      if (dataName != null && dataName.length() > 0) {
         String dataValue = request.getParameter("attributeValue");
         session.setAttribute(dataName, dataValue);
      }
      out.print("<b>打印Session内容:>");
      Enumeration e = session.getAttributeNames();
      while (e.hasMoreElements()) {
         String name = (String)e.nextElement();
         String value = session.getAttribute(name).toString();
         out.println( name + " = " + value+"<br>");
             System.out.println( name + " = " + value);
       }
    %>
      <form action="wel2.jsp" method="POST">
        属性名:<input type=text size=20 name="attributeName">
         <br>
        值:<input type=text size=20 name="attributeValue">
         <br>
        <input type=submit>
       </form>
    </body>
       </form>
    </body>
    </html>
    两个tomcat里面都有一个这种文件

    然后两个tomcat的web.xml以下加上以下这句话

    <distributable/>,两个session之间能相互复制

    重新启动

    然后訪问http://10.211.55.3/mytest/wel2.jsp


    又一次输入这个地址



    你会发现确实交给了两个server,并且session里面的值一模一样!

    集群完毕。




    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    TI达芬奇平台测试
    V4L2 常用控制命令
    Linux 线程编程
    HMM
    PCA & ICA
    SVD分解(转载)
    Factor analysis
    Mixtures of Gaussians and the EM algorithm
    Arduino 单个按键控制led灯闪烁、常亮、关闭
    django计算当前日期最近一周日期范围
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4662420.html
Copyright © 2020-2023  润新知