window下,使用Apache + Tomcat +mod_jk 搭建集群

使用Apache+tomcat搭建集群,可以使用Apache的 mod_proxy_ajp 也可以使用tomcat的mod_jk作为modules。本次使用的是 tomcat的mod_jk

Apache+tomcat集群中,对session有两种处理方法,一个是session复制,意思为,多个节点之间共享session。这样的好处是,一个节点挂掉后,不影响当前登录的用户。另外一种则是,同一个用户的请求都发送给同一个节点,这样不同节点之间不再有session信息的复制。但当某个节点挂掉后,当前用户的登录信息也会丢失。

首先应进行准备工作。jdk就不必说了,本地是jdk1.6.12

tomcat 是apache-tomcat-6.0.35

然后应再准备Apache的环境。首先到Apache的官网去下载对应的软件。官网下载的首页不在提供windows版本的二进制文件下载,移到了另外一个页面。http://apache.fayea.com/apache-mirror//httpd/binaries/win32/ 

选择:httpd-2.2.25-win32-x86-no_ssl.msi 保险起见,下载一个2.2版本的。

下载到本地后,执行安装, 注意记住安装的路径,因为之后还要操作这个路径。 若手动指定路径,最好不要有特殊字符。

安装完成后,在桌面右下角会有一个标志。可以在此处进行服务的启动或停止。安装完成后,服务默认启动。

默认端口为80.访问localhost 看到欢迎页面,即证明Apache安装成功。

这步很简单。

然后准备tomcat。为方便起见,将准备两个tomcat,将两个tomcat放到同一个文件夹下。

然后准备mod_jk 。下载地址:http://apache.fayea.com/apache-mirror/tomcat/tomcat-connectors/jk/binaries/windows/

下载 : tomcat-connectors-1.2.40-windows-i386-httpd-2.2.x.zip  

注意要和Apache的版本对应起来。

下载完成后,解压该文件,然后将其中的 mod_jk.so 拷贝到 Apache安装目录下的  modules 文件夹下  如 G:\apache2.2\modules

然后到Apache根目录下,找到conf文件夹的 httpd.conf,打开这个文件,然后在最下面增加如下代码:

include "G:\apache2.2\conf\mod_jk.conf"

这是告诉Apache,扫描这个文件。然后需要再新建这个文件。 在conf目录下

代码如下:

#加载mod_jk Module
LoadModule jk_module modules/mod_jk.so
# 配置 mod_jk
#加载集群中的workers
JkWorkersFile conf/workers.properties

#指定jk的日志输出文件
JkLogFile logs/mod_jk.log
#指定日志级别
JkLogLevel warn
#指定哪些请求交给tomcat处理,"controller"为在 workers.propertise里指定的负载分配控制器名  所有的请求都交给 control
JkMount /*.* controller


从内容可看到,还需要新建个properties文件,用来配置集群环境中的具体服务器

新建 workers.properties

内容如下:

#server 列表
worker.list=controller,tomcat1,tomcat2
#========tomcat1========
#节点一对应的端口号,对应ajp协议的端口号,tomcat同时会监听该端口
worker.tomcat1.port=18009  
#主机地址,本地则是localhost,服务器则填写实际地址
worker.tomcat1.host=localhost 
#ajp协议,tomcat将监听上面的端口,并获取通过该端口的ajp协议的请求
worker.tomcat1.type=ajp13
#加权比重,数值越大,则分得的请求越多
worker.tomcat1.lbfactor=1   
#========tomcat2========
worker.tomcat2.port=28009 
worker.tomcat2.host=localhost 
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1 
#========controller,负载均衡控制器========
#server名为controller,用于负载均衡
worker.controller.type=lb
#重试次数 
worker.retries=3 
worker.controller.balance_workers=tomcat1,tomcat2
#粘性Session(默认是打开的) 当该属性值=True(或1)时,代表Session是粘性的, 即session粘着。若设置true,则同一个浏览器的请求(cookie相同)将会被分发到同一个#tomcat(节点)
#即同一Session在集群中的同一个节点上处理,Session不跨越节点。在集群环境中,一般将该值设置为False
worker.controller.sticky_session=false



修改两个tomcat,分别进入tomcat的conf文件夹下server.xml文件,修改其对应端口。

此例部署在同一机器,因此需要修改tomcat 中 http协议对应的端口。

之后是,tomcat 监听shutdown命令的端口。

然后是 tomcat  监听ajp协议的端口

 <Connector port="18080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" />

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

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


注意,ajp协议的端口,应该和节点配置文件中,配置的两个tomcat节点中对应的端口一致。Apache会根据配置文件中的端口号去寻找对应的服务。

继续修改server.xml  将其对应的

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
打开。将其注释去掉。有的文章还说,将 
<Engine name="Catalina" defaultHost="localhost">
这一句中增加上 jvmRoute 属性, 测试后,不加也没问题。Apache是根据端口号进行请求的转发处理。

最后,在tomcat的conf目录下,web.xml 最后增加 一句

<distributable/>

这句的意思是,允许该tomcat实行session的复制黏贴


至此,环境搭建完成。

测试一下

新建一个项目ROOT,里面只放index.jsp即可。

index.jsp内容如下:

 <%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title></title>
  </head>
  
  <body>
     
    <% 
       System.out.println(session.getId()); 
	   out.println(session.getId());
    %>
  </body>
</html>


分别启动两个tomcat。

然后 访问 http://localhost 这个地址。摁住F5疯狂刷新。

观察效果。


浏览器输出了sessionid。而且两个控制台也分别输出了sessionid。并且三者统一。证明session成功实现了复制!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值