您的位置:首页 > 运维架构 > Tomcat

Apache2.2+tomcat6集群负载匀衡

2015-01-02 10:23 316 查看
1、预备知识

 

本文讲Apache2.2+tomcat集群负载匀衡

 


1.1
本文环境

 

Ø 平台: Wind7

 

Ø 软件: Apache2.2+tomcat6

 

Ø 软件: SOAWARE 3.5

 

Ø 软件: jdk1.6

 


2、工具安装

 


2.1 apche2.2介绍

 

Apache是http服务器,我们利用其对Tomcat进行负载均衡。目前最新版本为2.2.17,下载地址为http://httpd.apache.org/download.cgi#apache22



 

 

目前已经出现Apache2.3.11,但是为beta版本,所以没有使用。

 

下载后直接安装msi即可,如果没有其他的http服务器(如iis)则应该可以成功安装,端口即为80,能够访问http://localhost/说明安装成功。



 

 


2.2 Tomcat

 

Tocmat7目前已经出现稳定版本的7.0.12,Tomcat6则为6.0.32。经我测试,这2个版本的Apache负载均衡配置过程都是一样的,因此下面的配置在Tomcat6或7集群是通用的。但是按照下面的配置,集群中Tomcat不能既有Tomcat6又有Tomcat7,否则虽能够负载均衡,但不能进行session复制,不知其他方式配置的集群是否可以。

 

Tomcat就不用怎么介绍了。既然在本地需要多个节点,那么需要下载ZIP版本的Tomcat。

 

2.3 JK

 

JK是Tomcat提供给http服务器的插件(个人理解的),下载地址为http://mirror.bjtu.edu.cn/apache/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,页面下方有英文的说明,大家可以看下。

 

其实我也在网上看到Apache2.2已经集成Tomcat插件模块了,可以不用JK插件就可以实现Tomcat负载均衡,但也需要一些配置,而JK这个配置相比也不复杂,就先记录下来。

 


3、配置过程

 

下面就直接写过程了,我也是网络上学习的,只是总结下过程并且利用最新的Apache和Tomcat测试了下,还是与网络上有些不同的。

 

3.1修改Apache配置



 

 


3.3.1、修改conf/httpd.conf

 

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

 

include "D:\Program Files\Apache Software Foundation\Apache2.2\conf\mod_jk.conf"

 


3.1.2 、 新建conf/mod_jk.conf文件

 

内容如下:

 

LoadModule jk_module modules/mod_jk-1.2.31-httpd-2.2.3.so

 

JkWorkersFile conf/workers.properties

 

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

 

JkMount /*.jsp controller

 


3.1.3 、 将下载的JK插件

 

mod_jk-1.2.31-httpd-2.2.3.so复制到Apache安装目录的modules目录下。

 


3.1.4 、新建并编辑conf/workers.properties文件,

 

内容如下:

 

#server

 

worker.list = controller

 

#========tomcat1========

 

worker.tomcat1.port=11009

 

worker.tomcat1.host=localhost

 

worker.tomcat1.type=ajp13

 

worker.tomcat1.lbfactor = 1

 

#========tomcat2========

 

worker.tomcat2.port=12009

 

worker.tomcat2.host=localhost

 

worker.tomcat2.type=ajp13

 

worker.tomcat2.lbfactor = 1

 

#========tomcat3========

 

worker.tomcat3.port=13009

 

worker.tomcat3.host=192.168.0.80 //在我的虚拟机中的,可以算远程的吧

 

worker.tomcat3.type=ajp13

 

worker.tomcat3.lbfactor = 1

 

 

 

#========controller,负载均衡控制器========

 

worker.controller.type=lb

 

worker.controller.balanced_workers=tomcat1,tomcat2,tomcat3

 

worker.controller.sticky_session=false

 

worker.controller.sticky_session_force=1

 

#worker.controller.sticky_session=1

 

这里可以配置任意多个Tomcat,此处配置了3个Tomat服务器,2个本地,1个远程,所以为了它们都能够顺利启动起来,本地的服务器端口都是不同的,如果Tomcat不再同一机器上,没必要改端口的。

 

 

 

 

 


3.2 配 置tomcat

 

配置3个Tomcat服务器,将Tomcat解压后复制3份,我将每个文件夹分别命名为Tomcat1,Tomcat2和Tomcat3,修改每一份的server.xml配置, 如果在同一台电脑上配置tomcat集群,需要把配置好的tomcat环境变量去掉,不然计算机始终会去环境变量下面的tomcat

 


3.2.1 配置tomcat1

 

如果你的tomcat节点不在同一台机器上,则不需要配置。修改tomcat1的server.xml文件。



 

 

 

 


3.2.2 配置tomcat2

 

因为我是同一台电脑上配置的多个tomcat,因些Server的port改为和第一个tomcat不一样的tomcat,修改tomcat2的server.xml文件





 

 

 

 

 

 

 

 

 

 

 


3.2.3 配置Tomcat3(若无虚拟机可省略此步)

 

修改虚拟机中Tomcat3中以上部分的server.xml为:

 



 

因为Tomat3在远程服务器,所以没必要改端口的,而我先进行的本地集群测试后将Tomcat3复制到远程服务器,所以这3个Tomcat端口都不同。

 

AJP13的connector的poat和jvmRoute名称和workers.properties中配置对应。

 

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

 


3.3 测试项目

 

3.3.1、测试项目目录

 

 

 

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



 

 

 

 

 

 

建立test.jsp内容如下

 

<%

 

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

 

%>

 

 

 

建立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>

 

 

 

 

 

Web-INF/Web.xml内容如下

 

<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">

 

<display-name>TomcatDemo</display-name>

 

<distributable/>

 

</web-app>

 

上面的test项目不用多说,很简单就三个文件。

 


3.3.2 、 session测试

 

将test项目部署到3个tomcat服务器,然后分别启动Apache和3个Tocmat服务器,这些Tomcat启动顺序随意,然后打开http://localhost/test/test2.jsp,结果如下图:

 



 

F5刷新后 ID 为tomcat1与tomcat2切换

 



 

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

 

 

 


3.4 tomcat 集群发部Soaware注意事项

 


3.4.1 、 tomcat集群下面的SA,同一udp端口负载匀衡

 

通过apache+tomcat集群下面发布SA,只要udp端口一样,则集群下面的所有Sa项目负载匀衡。

 


3.4.2 、tomcat集群下的SA发布项目共享

 

通过apache+tomcat集群下面发布SA,只要udp端口一样,则集群下面的所有Sa项目共享。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: