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

Apache + mod_jk+Tomcat 一个简单的集群实践

2015-08-01 00:28 627 查看
      Tomcat集群使一组局域网上的Tomcat实例(称为集群),在用户看起来是单一的服务器,使不同的服务器之间能分布的工作。这就叫负载平衡。集群的实现,可以处理更多的请求,带来更好的性能体验。当然,他还有很多好处,这儿不在详说,本文主要介绍如何简单的搭建一个集群。

      下面来看看怎样简单地搭建一个集群。

       操作系统:win7  32位

       Apache : httpd-2.2.25-win32-x86

       mod_jk :mod_jk.so (注意一定要与Apache版本相对应,否则组件加载不成功)

       Tomcat:Tomcat7.0.63

      总体架构:

      Apache web服务器负责处理用户的静态请求(html/jpeg 资源);当用户请求动态资源时,apache通过mod_jk组件,将请求传递给Tomcat实例处理。



    具体安装步骤:

    (1)Tomcat的安装:

         1)新建Tomcat实例3个,其目录结构见图,该文件夹我新建在F盘



            2)为3个tomcat实例分别建立自己的启动/停止批处理文件  ,放置于bin目录中。

                ①Tomcat1实例的start1.bat,具体内容如下:

                       set CATALINA_BASE = F:\cluster\tomcat1

                       call startup

                   Tomcat1实例的stop1.bat ,具体内容如下:

                       CATALINA_BASE = F:\cluster\tomcat1

                       call shutdown

                 ②另外两个实例将tomcat1换为2和3 ,即可。

           3)更改server.xml文件 ,我的具体配置如下:

                        server      ajp            jvmRoute                          cluster receiver port

==================================================================================================

 tomcat1         8005        8109          jvmRoute="tomcat1"                          4200

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 tomcat2         8105        8209           jvmRoute="tomcat2"                         4300

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 tomcat3         8205        8309            jvmRoute="tomcat3"                        4400

        注意:在同一台机器中部署多个tomcat实例时,不能在环境变量中配置CATALINA_BASE属性  ,这样启动时会首先读取该值,导致只能启动一个tomcat实例。

            4)启动看能否成功,3个实例同时启动,如下:(注意图中CATALINA_BASE和CATALINA_HOME的目录,正是3个实例的目录)



        5  为了能实现负载均衡,还要在 F:\cluster\tomcat1\webapps\examples\WEB-INF (换成自己的目录)目录下的web.xml中添加属性<distributable/>

           位置如下:

               <display-name>Servlet and JSP Examples</display-name>

 

 

              <distributable/>

                <!-- Define example filters -->

              <filter>

                  <filter-name>Timing filter</filter-name>

                   <filter-class>filters.ExampleFilter</filter-class>

                <init-param>

                     <param-name>attribute</param-name>

                     <param-value>filters.ExampleFilter</param-value>

                  </init-param>

             </filter>

             (2)Apache的安装:

                 1)通过镜像文件安装apache,安装后的目录结构如下(无法上传图片,不知咋回事),然后将mod_jk.so组件复制到Modules文件夹中

                 2)将http_jk.conf 和 workers.propertise 放置在conf文件夹下,并在httpd.conf文件末添加上如下语句:

                       Include conf/httpd-jk.conf

                 3)配置http_jk.conf文件

                     LoadModule jk_module modules/mod_jk.so

                    JkWorkersFile conf/workers.properties

                    JkMount /examples/jsp/* balancer

                 4)配置workers.propertise文件

worker.list=balancer

worker.balancer.type=lb

==============

worker.balancer.balance_workers=tomcat1

worker.tomcat1.reference=worker.template

worker.tomcat1.host=localhost

worker.tomcat1.type=ajp13

worker.tomcat1.port=8109

worker.tomcat1.activation=A

==============

worker.balancer.balance_workers=tomcat2

worker.tomcat2.reference=worker.template

worker.tomcat2.host=localhost

worker.tomcat2.type=ajp13

worker.tomcat2.port=8209

worker.tomcat2.activation=A

========================

worker.balancer.balance_workers=tomcat3

worker.tomcat3.reference=worker.template

worker.tomcat3.host=localhost

worker.tomcat3.type=ajp13

worker.tomcat3.port=8309

worker.tomcat3.activation=A

           (3)测试

             1)编写test.jsp 文件,如下:

Tomcat1的:

<html>

<body>

<h1> <font color="red">Session serviced by tomcat1 </font></h1>

<table align="center" border="1">

<tr>

<td>Session ID</td>

<td><%= session.getId() %></td>

<% session.setAttribute("abc","abc");%>

</tr>

<tr>

<td>Created on </td>

<td><%= session.getCreationTime() %></td>

</tr>

</table>

</body>

</html>

tomcat2 的:

<html>

<body>

<h1> <font color="green">Session serviced by tomcat2 </font></h1>

<table align="center" border="1">

<tr>

<td>Session ID</td>

<td><%= session.getId() %></td>

<% session.setAttribute("abc","abc");%>

</tr>

<tr>

<td>Created on </td>

<td><%= session.getCreationTime() %></td>

</tr>

</table>

</body>

</html>

tomcat3的:

<html>

<body>

<h1> <font color="blue">Session serviced by tomcat3 </font></h1>

<table align="center" border="1">

<tr>

<td>Session ID</td>

<td><%= session.getId() %></td>

<% session.setAttribute("abc","abc");%>

</tr>

<tr>

<td>Created on </td>

<td><%= session.getCreationTime() %></td>

</tr>

</table>

</body>

</html>

【注意它们的文件名都相同】

            2)文件放置说明

            测试文件放置在每个tomcat实例的webapps/examples/jsp 文件夹下

            [同时也可利用该文件夹下的index.html文件来测试是否成功]

           该目录与httpd-jk.conf 中JkMount /examples/jsp/* balancer  配置的是一样的。否则会出错

            测试时,先依次启动各个Tomcat实例,在启动Apache服务器

            浏览器中输入:http://localhost/examples/jsp/test.jsp

                                     http://localhost/examples/jsp/test1.jsp
                                     http://localhost/examples/jsp/index.html
                测试成功界面:(图片还是不能上传,晕..........)

                 1)同一个IE浏览器访问,维持同一个会话id ,都在Tomcat2

                 2)在打开一个google浏览器,会话id为 ,tomcat1

                 3)不断关掉google浏览器,再次访问,有几次变为了tomcat3

          


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息