Apache2.4+Tomcat7服务器集群配置

来源:互联网 发布:手机经纬度查询软件 编辑:程序博客网 时间:2024/05/18 01:18

本文是笔者结合自己的实际操作与经验,将配置详解分享给大家!笔者在刚刚配置环境到时候遇到许多问题,折腾了有将近七八个小时,最后终于是成功将Apache结合Tomcat服务器集群环境搭建了起来,在此之前,笔者先将遇到的问题分享一下,如果有哪位读者遇到与笔者一样的问题,本文也许会对你有帮助!

1、笔者的电脑安装的Apache2.4版本,刚开始配置的时候是参考了别人的文章,是用mod_JK来实现Apahce与Tomcat的连接的,由于笔者刚开始也不懂,于是就按照里面的方法进行配置,并且使用了那片文章提供的mod_JK资源。之后环境搭建好之后,笔者原本可以启动的Apache服务,突然就启动不了了,后来通过查阅资料,发现是版本问题,即Apache的版本要和mod_JK的版本一致,至少是大版本一致。然后笔者想到Apache官网下载符合Apache2.4的mod_jk版本,发现没有。后来了解到,Apache集群Tomcat从2.2版本开始就已经自动引入连接Tomcat的模块,不用再额外下载mod_JK,通过proxy的方式进行配置即可,所以,如果笔者安装的Apache也是2.2以上的,就参考本文吧。

2、然后笔者就继续在网上查了些关于Apache2.4版本配置Tomcat服务器集群的,结果一切配置好后,Apache能启动了,但是与Tomcat连接不起来,为这个问题,笔者折腾了好久,原因是,笔者的Apache是用xampp安装的,而且当时安装xampp的时候并没有连带Tomcat的一起安装,Tomcat是笔者电脑里原来就有的,可能是有关xampp配置的问题,导致xampp里的Apache与外部的Tomcat无法进行连接(这里笔者没有进行仔细查阅),后来笔者把xampp卸载了,自己手动安装一个Apache2.4的,然后,就成功了。


服务器集群的概念本文参考了其他文章并结合了自己的理解,总结了一下!

那么,什么是服务器集群呢?

简单的理解就是,将项目系统同时部署在多个应用服务器上(如Tomcat),通过一个web服务器(Apache)进行请求分发和负载均衡,将同时访问的多个请求按照权重(可以自行配置)分发到每个应用服务器上,已达到降低每个单独的应用服务器的压力,同时也实现了高并发,这样做还有一个好处就是,如果是同时多个服务器运行,当其中一个服务器崩溃的时候,不至于导致应用系统无法进行服务,因为只要还有一台服务器是正常运行的,应用系统就还能够继续运行。

而要实现这件事情,就要解决两个问题

(1)将应用系统部署到多个服务器上,如何实现共享一个session。(一台服务器崩溃,还有其他服务器在进行支撑)

(2)如何将客户的请求分发到多个服务器上以实现单个服务器的压力分解。


下面就结合笔者的实践,利用mod_proxy方式实现Apache2.4余Tomcat7的服务器集群环境配置

1、环境搭建准备(笔者是64位系统的 )

Apache2.4.25

Tomcat7.0.68

windows10系统(7、8也一样)

这里提供了下载地址

链接:http://pan.baidu.com/s/1kVSd0vd 密码:w48x

2、环境配置

(1)安装Apache,笔者建议在C盘以外的盘符根目录下解压Apache(笔者是D盘),然后直接在命令行安装即可,操作如下

a、管理员方式打开命令行,将Apache里的bin文件夹的目录路径复制,如笔者的 D:\Apache24\bin

b、cd /d D:\Apache24\bin

c、httpd -k install

安装成功后,会自动测试一下配置文件,如果有端口冲突问题,会提示你端口冲突,这时修改一下Apache的端口就行了(具体操作可看笔者另一片文章),成功启动Apache之后,测试下页面,然后下一步

(2)在与Apache安装的同一个根目录下(目录不是必须相同),解压Tomcat7,将里面的conf/server.xml文件修改如下

a、修改一下内容,配置Engine节点的路由信息,session复制和负载均衡需要用

<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">       <!--  <Engine name="Catalina" defaultHost="localhost"> --><!--这是原来的,现注释掉,用上面一行-->
b、修改并添加一下内容

<!--      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> 这是原来的,现注释掉-->        <!--开始-->    <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="4008"  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>      <!--结束-->

(3)在Tomcat的webapp目录下新建一个test项目,里面新建一个test.jsp文件和一个testCluster.jsp文件,内容都如下

<%@ page contentType="text/html; charset=GBK" %>  <%@ page import="java.util.*" %>  <html><head><title>Cluster Test</title></head>  <body>  <h3>this is tomcat3!!</h3><%    out.println("<p> SESSION ID : " + session.getId()+"</p>");   String name = request.getParameter("name");    if (name != null && name.length() > 0) {       String value = request.getParameter("value");       session.setAttribute(name, value);    }        out.print("<table border = '1'>");        out.print("<tr><th>session key </th><th>session value </th></tr>");     Enumeration<String> names = session.getAttributeNames();      while (names.hasMoreElements()) {          String key = names.nextElement();        String value = session.getAttribute(key).toString();        System.out.print(key + " --- " + value);        out.print("<tr><td>"+key+"</td><td>"+value+"</td></tr>");    }     out.print("</table>");%> <br /><form action="testCluster.jsp" method="post">  session key :<input type=text name="name">  session value:<input type=text name="value">  <input type=submit value="添加">  </form>  </body>  </html>
.

(4)在test项目里再建一个WEB-IN文件夹,里面新建一个web.xml文件,打开web.xml,并在web-app节点下添加<distributable/>节点

<web-app><distributable/></web-app>


(5)然后将配置好的Tomcat复制一份,在同等根目录下粘贴,换个命名就好,这是有两个Tomcat,则需改其中一个Tomcat的端口(如果不是在同一台电脑上则不用),修改如下、

<Server port="9005" shutdown="SHUTDOWN"><!--原来是8005-->

<Connector port="9080" protocol="HTTP/1.1"               connectionTimeout="20000"               redirectPort="8443" /><!--原来是8080-->

<Connector port="9009" protocol="AJP/1.3" redirectPort="8443" /><!--原来是8009-->

 <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm2"><!--粘贴过来时是jvm1,现改为jvm2-->

(6)到此,Tomcat的配置完毕,开始测试集群,启动tomcat1和tomcat2服务
在浏览器地址栏上输入http://localhost:8080/test/test.jsp
提交一个session key和value

再新建一个标签页(同一个浏览器),在地址栏上输入http://localhost:9080/test/test.jsp



从截图可以发现,jvm2,服务器把jvm1的session同步过来了,而且sessionID一样,并且你提交的键值对也有,这就证明session共享测试成功


(7)集群配置好之后,我们来整合apache处理负载均衡,这里利用http代理处理tomcat和apache的链接

a我们在apache conf的目录下新建一个balance.conf配置文件,内容如下

#提供基础的代理功能LoadModule proxy_module modules/mod_proxy.so#提供负载均衡的功能LoadModule proxy_balancer_module modules/mod_proxy_balancer.so#代理http协议LoadModule proxy_http_module modules/mod_proxy_http.so#负载均衡的算法模块LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.soLoadModule slotmem_shm_module modules/mod_slotmem_shm.so#兼容低版本访问LoadModule access_compat_module modules/mod_access_compat.soProxyRequests Off ProxyPass / balancer://mycluster/  #设置代理的算法#ProxySet lbmethod=bytraffic #代理关联配置loadfactor可以分发请求权重,loadfactor越大,权重越大<Proxy balancer://mycluster>   BalancerMember http://localhost:8080 loadfactor=1 route=jvm1 #如果是不同的机器,则填写另一台机器的地址,如http://192.168.1.121:8080  BalancerMember http://localhost:9080 loadfactor=1 route=jvm2 </Proxy> #负载均衡控制台,通过http://localhost/balancer-manager 访问<Location /balancer-manager>     SetHandler balancer-manager     Order Deny,Allow     Allow from all     #Allow from localhost </Location>

b.打开Apache的conf/httpd.conf江balance.conf引进去,在httpd.conf最下面通过下面语句引入

Include conf/balance.conf

c.配置好之后,启动apache(两个Tomcat也跟着启动),在浏览器的地址栏输入Apache的访问地址(不是Tomcat的哦),笔者的是localhost:8181,惊奇的发现,竟然进入了Tomcat的首页,如图


这是说明apache路径分发成功,然后通过Apache来访问部署在Tomcat下的项目

localhost:8181/test/test.jsp

发现能访问,然后不断的刷新页面,发现页面会在jvm1和jvm2间不停的切换,到此为止,恭喜你,成功搭建好Apache2.4集群配置Tomcat7的环境。


希望对笔者有帮助!转载请注明出处!


1 0