httpd负载均衡服务器配置

来源:互联网 发布:单身生活 知乎 编辑:程序博客网 时间:2024/05/20 19:48

负载均衡服务器

在一些大公司采用F5负载均衡交换机作为负载均衡服务器,然后将请求转发给tomcat,但是F5设备动辄几十万,所以一些小公司采用采用开源的apacheNginx来实现负载均衡,本文采用Apache + mod_jk + tomcat来实现tomcat集群的负载均衡的

 

软件

Apache是apache的http服务器,用于消息转发

mod_jk也叫 JK,这是一款 Apache/IIS 用来连接后台Tomcat的连接器,支持集群和负载均衡

环境

本教程为了方便教学,仅在一台windows系统下安装这个集群.详情是:安装一个apache的http程序,两个tomcat程序


安装步骤

1、下载

http://archive.apache.org/dist/httpd/binaries/win32/httpd-2.2.25-win32-x86-no_ssl.msi

安装httpd-2.2.25-win32-x86-no_ssl.msi

安装完成在浏览器输入


到此httpd安装成功。

解压tomcat zip文件


下载mod_jk

mod_jk版本: jk-1.2.31

下载地址http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.31/mod_jk-1.2.31-httpd-2.2.3.so


配置mod_jkapache


将下载后的mod_jk-1.2.31-httpd-2.2.3.so放到

httpd\modules下面

然后在httpd\conf下面新建一个mod_jk.conf

内容:

#加载mod_jk Module
LoadModule jk_module modules/mod_jk-1.2.31-httpd-2.2.3.so

#指定workers.properties文件路径
JkWorkersFile conf/workers.properties

#指定那些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器名
JkMount /* controller


然后在httpd\conf创建一个workers.propertise

内容:

#server
worker.list = controller
#========tomcat1========
#ajp13端口号,在tomcat下server.xml配置,默认8009
worker.tomcat1.port=8009
#tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat1.host=localhost
#协议类型
worker.tomcat1.type=ajp13
#server的加权比重,值越高,分得的请求越多。lbfactor是负载平衡因数(Load Balance Factor)
worker.tomcat1.lbfactor=1

#========tomcat2========
worker.tomcat2.port=9009
worker.tomcat2.host=localhost
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1

#========controller,负载均衡控制器========
#负载均衡控制器类型,lbfactor是负载平衡因数(Load Balance Factor)
worker.controller.type=lb

#指定分担请求的tomcat列表
worker.controller.balanced_workers=tomcat1,tomcat2

#粘性session(默认是打开的) 当该属性值=true(或1)时,代表session是粘性的,即同一session在集群中的同一个节点上处理,session不跨越节点。在集群环境中,一般将该值设置为false
worker.controller.sticky_session=false

#设置用于负载均衡的server的session可否共享
worker.controller.sticky_session_force=1



然后在httpd\conf\httpd.conf文件底部加


Include conf/mod_jk.conf


到此配置完成


2、配置tomcat

配置tomcat1:

然后在<Engine>下面添加如下内容:

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

          <Manager className="org.apache.catalina.ha.session.DeltaManager"
                   expireSessionsOnShutdown="false"
                   notifyListenersOnReplication="true"/>

          <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"
                      port="4000"
                      autoBind="100"
                      selectorTimeout="5000"
                      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"/>
          </Channel>

          <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
                 filter=""/>
          <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

          <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.JvmRouteSessionIDBinderListener"/>
          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
        </Cluster>  
同上配置tomcat2



新建一个index.jsp页面

<body>

    server info : ${pageContext.request.localAddr}:${pageContext.request.localPort} <br>

    <br>

    session ID : ${pageContext.session.id} <br>

    <br>

    session属性列表

    <table border="1" width="450px">

<tr>

<th>key</th><th>value</th>

</tr>

    <c:forEach items="${pageContext.session.attributeNames}"  var="attr">

     <tr>

     <td align="center">${attr}</td><td  align="center">${sessionScope[attr]}</td>

     </tr>

    </c:forEach>

    </table>

    <br>

             添加:

<form action="${pageContext.request.contextPath}/servlet/TestServlet?method=add" method="post">

     key:<input type="text" name="key">value:<input type="text" name="value"><input type="submit" value="添加">

    </form>

             移除:

    <form action="${pageContext.request.contextPath}/servlet/TestServlet?method=del" method="post">

     key:<input type="text" name="key"><input type="submit" value="移除">

    </form>

  </body>

还新建一个servlet用户添加和移除session中的内容

package cn.itcast.cluster.test;

 

import java.io.IOException;

 

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

public class TestServlet extends HttpServlet {

 

private static final long serialVersionUID = -4508299817031218675L;

 

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doPost(request, response);

}

 

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String method = request.getParameter("method");

String key = request.getParameter("key");

if(!"".equals(key)){

if("add".equals(method)){

String value = request.getParameter("value");

request.getSession().setAttribute(key, value);

} else {

request.getSession().removeAttribute(key);

}

}

response.sendRedirect(request.getContextPath());

}

 

}

修改web.xml


将项目打完war包后分别放入到各个tomcatwebapps但中

之后在浏览器中访问:http://localhost/test/ 





0 0
原创粉丝点击