QuickStart: Tomcat 集群配置

来源:百度文库 编辑:神马文学网 时间:2024/04/27 16:03:42
QuickStart: Tomcat 集群配置
网络上有好多关于 Tomcat 集群配置的文章,但有些是以 Tomcat 4 为基础的,有的并不是讲的很清楚,自己摸索了半天,试验成功了,现把简要过程写出来,让你在几分钟内体验一下 Tomcat Cluster 。
一、配置环境
下载和安装 JRE 1.5 最新版 (1.5.06) 下载和安装 Tomcat 最新版 (5.5.12),假定安装目录为 C:\Program Files\Apache Software Foundation\Tomcat 5.5
二、使 Tomcat 集群配置生效
修改 Tomcat 安装目录\conf\server.xml ,把 Server/Service/Engine/Host 下的 Cluster 结点前后的注释符()删除,并保存
三、配置第二个 Tomcat 实例
在 C:\Program Files\Apache Software Foundation\ 下新建目录 Tomcat 5.5 Instance1 将 C:\Program Files\Apache Software Foundation\Tomcat 5.5 目录下的全部内容复制到 C:\Program Files\Apache Software Foundation\Tomcat 5.5 Instance1 修改新实例的服务器配置文件 (C:\Program Files\Apache Software Foundation\Tomcat 5.5 Instance1\conf\server.xml),把其中的 Server/Service/Connector 的端口更改,以避免和第一个冲突(8080 -> 9080,8009 -> 9009,8443 -> 9443) 修改 Cluster/Receiver 结点的 tcpListenPort 端口(此端口用于 Session 复制),以避免和第一个冲突(4001 -> 4002)
注:Tomcat Cluster 默认使用多播来建立成员关系,即两个实例的多播的地址和端口一样,就可以互相认为是同一个 Cluster 的成员。
四、启动验证两个 Tomcat 实例能否正常工作
直接用程序菜单里的 Monitor Tomcat 来启动第一个实例(或在服务器里启动) 第二个实例启动稍微麻烦一些,在 C:\Program Files\Apache Software Foundation\Tomcat 5.5 Instance1\Bin 下建一个 startup.bat ,用如下 java 命令来启动:
"C:\Program Files\Java\j实re1.5.0_06\bin\java.exe" -jar .\bootstrap.jar -Dcatalina.home="C:\Program Files\Apache Software Foundation\Tomcat 5.5 Instance1" -Dcatalina.base="C:\Program Files\Apache Software Foundation\Tomcat 5.5 Instance1" -Djava.endorsed.dirs="C:\Program Files\Apache Software Foundation\Tomcat 5.5\common\endorsed" -Djava.io.tmpdir="C:\Program Files\Apache Software Foundation\Tomcat 5.5 Instance1\temp" -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file="C:\Program Files\Apache Software Foundation\Tomcat 5.5 Instance1\conf\logging.properties" start
看起来挺长,其实主要是第二个实例的安装目录太长的缘故,直接执行此批处理就可以启动第二个实例,如果配置正确,应该可以看到集群管理器启动,并和第一个实例   建立成员关系的信息。
五、写一个简单Web应用,能显示和设置 Session 属性值,以供测试
如果有开发工具,新建一个 Web App ,假设为 TomcatDemo  新增 index.jsp ,加入如下代码:
<%...@ page contentType="text/html; charset=UTF-8" import="java.util.*"%>Cluster App TestServer Info: <%... out.print(request.getLocalAddr() + " : " + request.getLocalPort());%><%...out.println("
ID " + session.getId());// 如果有新的 Session 属性设置String dataName = request.getParameter("dataName");if (dataName != null && dataName.length() > 0) {String dataValue = request.getParameter("dataValue");session.setAttribute(dataName, dataValue);}out.print("Session 列表");Enumeration e = session.getAttributeNames();while (e.hasMoreElements()) {String name = (String)e.nextElement();String value = session.getAttribute(name).toString();out.println( name + " = " + value);}%>
名称:
值:

以上代码主要是显示服务器信息和 Session 值,并包含一个 Form ,可以随时新建一个 Session 属性值
修改此用应用的 Web.xml ,加入 distributable 属性,表示 Tomcat 要为此 Web 应用复制 Session
TomcatDemo
将应用打包成 WAR 文件,分别上现两个实例的 Tomcat Manager 来部署
(如果没有 Java 开发工具,可以直接建立一个 TomcatDemo 的目录,用 Notepad 将如上的内容复制并保存成 index.jsp,然后在此目录下新建子目录 WEB-INF,再用 Notepad 新建一 Web.xml 文件,将上面的代码复制保存,然后将此目录压缩成 Zip 文件,再把后缀改成 .war ,或利用 jar 命令来创建 .war 文件)
六、测试 Tomcat 集群和 Session 复制的是否工作
在 IE 中打开第一个实例中的 TomcatDemo (http://localhost:8080/TomcatDemo),在 Form 里随便设置一个 Session 属性,如 MyName = foo  将 IE 地址栏中的地址修改为第二个实例中的 TomcatDemo(http://localhost:9080/TomcatDemo),刷新,就可以看到注意到 SessionID 不变, MyName 的属性值已有了  同样,如果在第二实例中设置的值,在第一个实例的页面中也能看到
注意:必须在同一个 IE 窗口中进行如上测试,以保证是同一个 Session ,如果是两个窗口,则 Session 可能不同,也互相看不到 Session 复制的结果。
七、其它工作
上述只实现了 Session 复制,而没有实现 Load Balance(负载均衡),这可以利用 Apache 等来实现,网上有很多相关文章,可能参考)