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

来源:互联网 发布:叫车软件 编辑:程序博客网 时间:2024/06/05 20:38

      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














          




0 0
原创粉丝点击