Apache和Tomcat集群配置

最近在弄服务器,刚开始只是装载了tomcat,通过域名配置,端口设置,通过主域名访问,完全没有问题,但是之后想将2级域名配置的灵活一些,想到用Apache来做。其实配置Apache和Tomcat非常简单,先要明白他俩之间的关系是关键:

  apache:侧重于http server  tomcat:侧重于servlet引擎,如果以standalone方式运行,功能上与apache等效 , 支持JSP,但对静态网页不太理想;  apache是web服务器,tomcat是应用(java)服务器,它只是一个servlet(jsp也翻译成servlet)容器,可以认为是apache的扩展,但是可以独立于apache运行。  换句话说,apache是一辆卡车,上面可以装一些东西如html等。但是不能装水,要装水必须要有容器(桶),而这个桶也可以不放在卡车上。

   这个比喻已经非常深刻和形象了,我想你该明白了。

--------------------------------------begin---------------------------------

下面我就将配置的步骤下下来:

准备工作

1、 httpd-2.2.22-win32-x86-openssl-0.9.8t.msi
下载地址:
http://apache.etoak.com//httpd/binaries/win32/httpd-2.2.22-win32-x86-openssl-0.9.8t.msi

2、 apache-tomcat-6.0.20.zip(免安装版-绿色版)
下载地址:
http://archive.apache.org/dist/tomcat/tomcat-6/v6.0.20/bin/apache-tomcat-6.0.20.zip

3、 jdk1.6.0_18
下载地址:
如果只是应用的话,也可以选择安装JRE,因为JRE比较小:)

4   JK:mod_jk-apache-2.2.2.so
下载地址:
http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.18/mod_jk-apache-2.2.2.so
注意JK的版本一定要与Apache版本相同。如果你的版本与我的不同,可以去官网下载,有多种版本,适用于各种操作系统,下载适用的既可

 

开始安装:

  1. 安装JDK:安装JDK和配置环境变量,我就不在这多啰嗦了,一开始拿到机器你就应该安装好了吧。
  2. 安装Apache:安装之前,你先要查看一下本机器中的端口情况,如果有占用80端口的进程,需要关了,因为Apache要安装在80端口上,默认访问,除非你设置到别的端口。安装好之后,apache会自动启动,然后你访问:http://localhost,就可以访问到apache,页面:It works!
  3. 安装Tomcat:其实你可以用绿色版的,不需要特别安装,关机是配置,最好目录放在Apache下:比如我的Apache的目录是:E:\Apache\Apache2.2;而tomcat的位置是:E:\Apache\tomcat\1-apache-tomcat-6.0.35;E:\Apache\tomcat\2-apache-tomcat-6.0.35;这两个tomcat。
  4. 配置过程:
    1. 修改httpd.conf

      我的Apache安装在E:\Apache\Apache2.2,找到conf目录下的httpd.conf,在文件的最后一行添加

      include "E:\Apache\Apache2.2\conf\mod_jk.conf"

    2. 新建mod_jk.conf文件,内容如下:

      1.  

        LoadModule jk_module modules/mod_jk-apache-2.2.2.so
        
        JkWorkersFile conf/workers.properties
        
        #指定那些请求交给tomcat处理,"controller"为在workers.properties里指定的负载分配控制器名
        
        JkMount /*.jsp controller
        

    3. 将下载的JK插件mod_jk-apache-2.2.2.so复制到Apache安装目录的modules目录下。
    4. 新建并编辑workers.properties文件,内容如下:
      1. #server 
        
        worker.list = controller 
        
        #========tomcat1======== 
        
        worker.tomcat1.port=8009 
        
        worker.tomcat1.host=localhost 
        
        worker.tomcat1.type=ajp13 
        
        worker.tomcat1.lbfactor = 1 
        
        #========tomcat2======== 
        
        worker.tomcat2.port=8010 
        
        worker.tomcat2.host=localhost 
        
        worker.tomcat2.type=ajp13 
        
        worker.tomcat2.lbfactor = 1 
        
        #========controller,负载均衡控制器======== 
        
        worker.controller.type=lb 
        
        worker.controller.balanced_workers=tomcat1,tomcat2
        
        worker.controller.sticky_session=false
        
        worker.controller.sticky_session_force=1
        
        #worker.controller.sticky_session=1 
      2. 这里可以配置任意多个Tomcat2个本地,还可以配置远程的:
      3. #========tomcat3======== 
        
        worker.tomcat3.port=13009 
        
        worker.tomcat3.host=192.168.0.80
        
        worker.tomcat3.type=ajp13 
        
        worker.tomcat3.lbfactor = 1 
        

        远程的这个我没有试,应该是可以的。

配置Tomcat

  1. 要注意的是:tomcat只是8080端口要改,因为是两个tomcat,他们的8009端口,还有8005端口需要有区别,第一个是8009,第二个就是8010,下面就3、4就是具体说明:
  2. AJP13的connector的poat和jvmRoute名称和workers.properties中配置对应。

  3.  

    由于截图面积有限,还需要保证本地2个本地Tomcat配置server的port,connector为http1.1的port都不相同。

测试

建立测试项目

建立test项目,需要在项目的web.xml中添加<distributable/>

建立test2.jsp,内容如下(网上都用这个测试,我就省的麻烦了):

<%@ page contentType="text/html; charset=GBK" %>

<%@ 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("dataName");

  if (dataName != null && dataName.length() > 0) {

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

     session.setAttribute(dataName, dataValue);

  }

  out.println("<b>Session 列表</b><br>");

  System.out.println("============================");

  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="test2.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>

 

这时候,别启动Apache3Tocmat服务器,这些Tomcat启动顺序随意,如果有问题,比如:Apache启动不起来,那你就用cmd来启动Apache。如:

E:\Apache_Test\Apache2.2\bin>httpd.exe

Syntax error on line 487 of E:/Apache_Test/Apache2.2/conf/httpd.conf:
Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not i
ncluded in the server configuration

 

这个是说:我487行的地址重写有问题:

RewriteEngine on 这个出错了

解决方案:在httpd.conf 中,也就是在该文件中查询:“rewrite_module”这个,发现这个:“#LoadModule rewrite_module modules/mod_rewrite.so”已经被注释了,将该注释去掉,打开地址重写的配置。

重新启动Apache:

E:\Apache_Test\Apache2.2\bin>httpd.exe
Syntax error on line 490 of E:/Apache_Test/Apache2.2/conf/httpd.conf:
RewriteCond: bad flag delimiters

490行出现问题,那我把地址重写的代码放出来:

487 RewriteEngine on 
488 RewriteCond %{HTTP_HOST} ^aaa.***.com [NC]
489 RewriteRule ^/$ http://aaa.***.com/action/garden [L]\
490 RewriteCond %{HTTP_HOST} ^www.***.com [NC]
491 RewriteRule ^/$ http://www.***.com/action/testyemian [L] 

看发现“\这个符号不应该存在。

将这个去掉,重新启动。apache启动成功“http://localhost/”,访问到

It works!

然后启动两个Tomcat;可以先测试单独的Tomcat的启动情况,带上端口就可以访问了。如果访问成功,继续。下面图片说明一切,你懂得。

然后查看tomcat,两个tomcat中的值的变化:

两个不同的tomcat得到了Session复制。

 

以上的测试说明,集群中的session已经共享,每个集群对于同一访问均有相同的session,而且session中存储的变量也复制了。

目前,就可以了,还有更多的内容如:节点插拔测试,等等稍后继续。

 

我的这篇博客,是经过了自己亲手实现的,因此,如果你有什么问题,可以给我留言。

欢迎你的转载,请标明出处:http://blog.csdn.net/vipzyj/article/details/8783750

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值