【Middleware】☆★之Apache2.2.x+Tomcat6.x+jk2.x做集群配置
在实际项目开发中,当访问量过大,而客户又不愿意多花钱的情况下,为保证项目的稳定性,使用开源免费的中间件做集群是一个不错的选择。这就是我写本博的初衷!
第一步:下载Apache 》http://httpd.apache.org/download.cgi#apache22如图所示:
现在官方给的最新版本就是2.4.9,但是因为保证稳定性,我采用的是低一个的版本!
第二步:下载mod_jk(这个动态库是Apache的一个可选模块,用来搭建JVAV 平台的WEB 服务器时使用)
下载地址: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,如果http服务器是Apache2.0.X版本,则必须选择mod_jk-1.2.31-httpd-2.0.52.so,每个apache的版本,都会有一个特定的jk与之对应!OK?
第三步:安装下载好的二进制文件:
安装Apache也没有什么难度,就是在安装过程中要配置域名、网址和管理员邮箱之类的信息,这个信息完全可以按照提示,然后修改下填入即可,之后想修改的话直接到配置文件中改就行了。除了这个地方,还要保证机器上的80端口没有被其他程序(如iis)占用。至于安装路径,完全取决于个人爱好。其他的默认就行了。安装成功后,系统右下角的托盘区会有个图标,我们可以通过这个启动apache,如果那个小红点变成绿色,说明服务已经正常启动了(如果服务没有启动起来,说明安装过程中的配置有错误,建议卸载后重装)。如果按照默认,端口是80的话,那打开浏览器,输入:http://localhost/ ,应该可以看到 " It works “的字样。这样就可以进入下一步了。如图所示:
浏览器效果如图所示:
第四步:现在是核心配置了
在安装好的Apache中找到httpd.conf文件,如图:
在其最下面添加如下一行信息:
在conf文件夹中新建mod_jk.conf文件
配置如下:
找到modules文件夹,将下载好的mod_jk-1.2.31-httpd-2.2.3.so文件直接拷贝进去;这里面有好多的xxx.so;如图所示:
在conf文件夹中新建workers.properties文件夹,配置如下:
注:我这里就用了两个Tomcat做示范,当然你用多个Tomcat也没问题,相应的在本机上的port端口不一致,就行,远程不用管,但是要把host配置成远程IP地址,就行了!
下面我们就开始配置Tomcat里面的server.xml文件了,里面有三个端口,分别是Server,Connector,Connector AJP,这三个端口号都要不一致,在这里就不叙述了下面可以下载server.xml文件例子。
里面两个核心的配置如下:
注:一个是配置负载均衡,一个是配置session复制,保证整个服务器session值是一致的
配置到这里:基本完成,下面,我们就编写web项目进行测试:
在新建的web项目中,需要在web.xml文件中添加这条信息,distributable元素来告诉servlet/JSP容器,编写的应用将在分布式Web容器中部署!
ok,编写一个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>
现在将web应用部署到Tomcat1,Tomcat2中去,记住是加载之后的class文件,然后分别启动tomcat1,Tomcat2,启动顺序无所谓,最后启动Apache
在浏览器上输入:http://127.0.0.1/test/test2.jsp如下图:刷新,后台访问,Tomcat1,Tomcat2
我们发现sessionID是没有变化的,后台Tomcat在进行访问切换,
我们继续输入数据看Tomcat打印的效果:
由此可见,我们的集群最核心的session复制做成功了,保证多个tomcat的session是一致的,基本完成集群配置,可以使用了,这也是我摸索而来,希望没有误导大家。
另外:为什么打印出来Server Info : null 也就是IP地址?这一点也是我郁闷的地方,有朋友看出问题,也可以留言,咱们一起交流!
附,为保证页面的图片大小统一,图片经过处理,所以分辨率有些不正常!呵呵....
源码,配置文件,Apache,jk,下载地址:
http://download.csdn.net/detail/u010506940/7525345
相关推荐
### 配置Tomcat集群详解 #### 0. 综述 ##### 0.1 目标 本文档旨在提供一份详细的指南,帮助读者成功配置一个由三个Tomcat实例组成的集群,该集群具备高可用性、可扩展性,并能够实现负载均衡及错误恢复功能。 ####...
在Tomcat6和Apache2.2的环境中,可以通过mod_proxy_ajp模块实现负载均衡和集群功能。该模块利用了Tomcat的AJP协议栈。 3. Tomcat集群支持的两种方式: a. proxy_ajp:适用于Apache2.1之后的版本,通过内置的proxy_...
### Tomcat + Linux 负载均衡集群配置详解 #### 一、背景介绍与环境配置 在企业级应用中,为了提升系统的可用性与性能,通常会采用负载均衡技术进行多台服务器之间的流量分发。本文将详细介绍如何利用 Apache 和 ...
#### 四、Tomcat集群配置 - **配置文件**: - 修改 `server.xml` 文件中的 `<Engine>` 标签,添加集群节点。 - 示例配置: ```xml <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> <!-- ...
描述了apache jboss3.2.6做负载均衡(load balance)的部署细节以及一些常见错误说明;描述了部署jboss3.2.3/3.2.6时一些心得、常用配置项。 目 录 1 .Apache2.0及连接器jk1.2的编译部署 4 1.1下载相关软件包 ...
Tomcat作为一款广泛使用的开源Java应用服务器,其负载均衡与集群配置是提高系统性能、确保高可用性的关键所在。 #### 二、基础知识 ##### 2.1 术语定义 - **服务软件**:指的是B/S或C/S架构中的S部分,即服务性...
##### 2.2 JBoss 应用程序的配置调整 - **配置负载均衡,调整参数**: - 在 `workers2.properties` 文件中定义多个 worker,并在 `mod_jk2.conf` 文件中设置 JkMount 来实现负载均衡。 - **配置集群 (Clustering)...
- **配置集群(Clustering)**:集群配置主要涉及到JGroups配置文件,可以通过调整`jboss-service.xml`文件来实现。 - **配置数据源**:数据源配置通常在`jboss-web.deployer/web.xml`文件中完成,需要定义数据源的...