Tomcat 的安装后,就可以开始搭建 Tomcat 集群了,具体步骤如下:
( 1 )将系统根目录( / )下的“ apache-tomcat-6.0.14 ”的文件夹改名为“ TC6_A ”,如图 3-2-1 所示。
图 3-2-1
( 2 )在系统根目录( / )下新建一个文件夹,将其命名为“ TC6_B ”,如图 3-2-2 所示。
图 3-2-2
( 3 )将“ TC6_A ”文件夹下的所有文件目录拷贝到“ TC6_B ”文件夹下,如图 3-2-3 所示。
图 3-2-3
提示:进行上述步骤操作的原因是,本案例中集群的各个 Tomcat 服务器实例运行在同一个物理服务器上,因此集群中有几个 Tomcat 实例一般就需要几个 Tomcat 的安装。另外,由于集群中的各个 Tomcat 实例位于同一个物理服务器上的一个操作系统下,因此各个实例占用的各种网络端口不能相同,否则集群中的多个 Tomcat 实例不能同时正常启动,下面的步骤将介绍如何修改 Tomcat 实例需要使用的各个网络端口。
( 4 )打开“ TC6_A ”文件夹下“ conf ”文件夹下的“ server.xml ”文件以及“ TC6_B ”文件夹下“ conf ”文件夹下的“ server.xml ”文件,如图 3-2-4 所示。
图 3-2-4
提示:由于对各种网络端口及集群的配置内容都在 server.xml 文件中,因此想正确配置集群就需要修改各个 Tomcat 的 server.xml 配置文件。
( 5 )找到 server.xml 配置文件中的“ Server ”配置项目,并进行修改。
说明:第一行为两个 Tomcat 修改前的情况,第二行为 TC6_A Tomcat 修改后的情况,第三行为 TC6_B Tomcat修改后的情况。
( 6 )找到 server.xml 配置文件中的相应“ Connector ”配置项目,并进行修改。
q TC6_A 中修改后内容如下:
提示:此步骤目的是修改 AJP Connector 端口。
( 7 )找到 server.xml 配置文件中的另一个相应“ Connector ”配置项目,并进行修改。
connectionTimeout = "20000"
redirectPort = "8443" />
connectionTimeout = "20000"
redirectPort = " 10043 " />
connectionTimeout = "20000"
redirectPort = " 20043 " />
提示:此步骤目的是修改 HTTP Connector 端口,其中的“ 10001 ”与“ 20001 ”是未来通过浏览器访问集群中各个 Tomcat 实例的 HTTP 端口。
( 8 )通过修改 Engine 配置选项,配置集群中每个 Tomcat 实例的名称。
提示:请读者注意在修改过程中要注释掉原来 name 为 Catalina 的 Engine 配置项目,将 name 为 Standalone 的 Engine 配置项目的注释去掉并修改 jvmRoute 属性。
( 9 )修改配置文件中的 Cluster 配置项目,对集群的各项参数进行设置。
className = "org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions = "8" > expireSessionsOnShutdown = "false" notifyListenersOnReplication = "true" /> address = "228.0.0.4" port = "45564" frequency = "500" dropTime = "3000"/> address = "auto" port = "4000" autoBind = "100" selectorTimeout = "5000" maxThreads = "6" /> className = "org.apache.catalina.tribes.group.interceptors.TcpFailureDetector" /> tempDir = "/tmp/war-temp/" deployDir = "/tmp/war-deploy/" watchDir = "/tmp/war-listen/" watchEnabled = "false"/>
className = "org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions = "8" > expireSessionsOnShutdown = "false" notifyListenersOnReplication = "true" /> address = "228.0.0.4" port = "45564" frequency = "500" dropTime = "3000" /> address = "auto" port = "4000" autoBind = "100" selectorTimeout = "5000" maxThreads = "6" /> filter = ""/> tempDir = "/tmp/war-temp/" deployDir = "/tmp/war-deploy/" watchDir = "/tmp/war-listen/" watchEnabled = "false" />
提示:上述配置内容主要是对集群中各个 Tomcat 实例间进行通信的方式、端口以及 Session 共享算法的设置。本教程由于篇幅所限,不能一一详细介绍,有兴趣的读者可以参看 Tomcat 的官方文档,其中有非常详细的说明。
( 10 )这样我们就完成了对 Tomcat 集群的设置,下面就可以同时启动这两个 Tomcat 实例了。
( 11 )在终端键入如下两条命令,启动 TC6_A Tomcat 实例,如图 3-2-5 所示。
cd /TC6_A/bin
图 3-2-5
( 12 )再新开一个终端窗口,在其中键入如下两条命令,启动 TC6_B Tomcat 实例,如图 3-2-6 所示。
cd /TC6_B/bin
图 3-2-6
提示:请读者特别注意,在启动多个 Tomcat 时,必须等一个 Tomcat 实例完全启动之后才可以启动另一个 Tomcat 实例。例如:必须先等 TC6_A 实例先启动以后才可以启动 TC6_B 实例,否则,将发生错误,导致两个 Tomcat 实例都无法正常启动。
( 13 )在浏览器地址栏输入“ http://localhost:10001 ” ,便进入如图 3-2-7 所示的 Tomcat 欢迎页面。
图 3-2-7
提示:上述页面是集群中 TC6_A Tomcat 实例的欢迎页面。
( 14 )再新开一个浏览器,在浏览器地址栏输入“ http://localhost:20001 ” ,便进入如图 3-2-8 所示的 Tomcat 欢迎页面。
图 3-2-8
提示:上述页面是集群中 TC6_B Tomcat 实例的欢迎页面。如果能顺利看到上述两个步骤的 Tomcat 欢迎页面,则说明 Tomcat 集群配置基本成功。下面将通过一个十分简单的 JSP 来进一步测试对“ TC6_A ”和“ TC6_B ”的设置是否成功。
( 15 )在“ TC6_A ”文件夹下“ webapps ”文件夹下“ ROOT ”文件夹中新建名称为“ Hello.jsp ”的 Jsp 源文件,并向其中添加如下代码:
<%@ page contentType="text/html;charset=GBK"%>
<% out.print( “Tomcat 集群测试 A !!! ” ); %>
( 16 )在“ TC6_B ”文件夹下“ webapps ”文件夹下“ ROOT ”文件夹中新建名称为“ Hello.jsp ”的 Jsp 源文件,并向其中添加如下代码:
<%@ page contentType="text/html;charset=GBK"%>
<% out.print( “Tomcat 集群测试 B !!! ” ); %>
提示:上述两个步骤实际上是在集群中的不同 Tomcat 实例中部署了相同的 Web 应用。这样,在未来为集群设置了负载均衡器后,集群中任何一个实例都可以对外提供完全相同的服务,这在后面的部分会详细介绍。当然细心的读者会发现这两个 Hello.jsp 并不完全相同,这是为了在测试的时候提供方便,可以非常容易地知道访问了集群中那个实例的服务,实际开发中不必如此。
( 17 )在浏览器地址栏输入“ http://localhost:10001/Hello.jsp ”,便进入如图 3-2-9 所示的页面。
图 3-2-9
( 18 )再新开一个浏览器,在浏览器地址栏输入“ http://localhost:20001/Hello.jsp ”,便进入如图 3-2-10 所示的页面。
图 3-2-10
如果能顺利地在浏览器中见到上述两个页面,则说明集群中的两个 Tomcat 实例工作完全正常。下面就可以为集群安装、设置 Apache 负载均衡器了。