tomcat6集群

tomcat集群安装

软件及环境:

apache-tomcat-6.0.29

nginx-0.8.15

centos5.5

nginx:192.168.1.251

tomat1:192.168.1.251

tomat2:192.168.1.252

tomcat安装目录为:/usr/local/tomcat

nginx安装目录为:/usr/local/nginx

 

jdktomcatnginx安装过程省略!

 

Tomcat1配置如下:

修改<Engine name="Catalina" defaultHost="localhost">

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">

Engine字段中添加下cluster内容:

        <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"

                 channelSendOptions="6" defaultMode="true">

 

     <!--     <Manager className="org.apache.catalina.ha.session.BackupManager"

                   expireSessionsOnShutdown="false"

                   notifyListenersOnReplication="true"

                   mapSendOptions="6"/>  -->

         

          <Manager className="org.apache.catalina.ha.session.DeltaManager"

                   expireSessionsOnShutdown="false"

                   notifyListenersOnReplication="true"/>

                 

          <Channel className="org.apache.catalina.tribes.group.GroupChannel">

            <Membership className="org.apache.catalina.tribes.membership.McastService"

                        address="228.0.0.2"   <!—组播地址-->

                        bind="192.168.1.251"  <!—绑定本机的IP-->

                        port="45564"   <!—通信端口-->

                        frequency="500"

                        dropTime="3000"/>

            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"

                      address="192.168.1.251"

                        autoBind="100"

                      port="5001"

                      selectorTimeout="100"

                      maxThreads="6"/>

 

            <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">

              <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>

            </Sender>

            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>

            <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>

            <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>

          </Channel>

 

          <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"

                 filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>

 

     <!--     <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"

                    tempDir="/tmp/war-temp/"

                    deployDir="/tmp/war-deploy/"

                    watchDir="/tmp/war-listen/"

                    watchEnabled="false"/>  -->

 

          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>

        </Cluster>

 

Tomcat2配置如下:

修改<Engine name="Catalina" defaultHost="localhost">:

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">

Engine字段中添加下cluster内容:

        <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"

                 channelSendOptions="6" defaultMode="true">

 

 

     <!--     <Manager className="org.apache.catalina.ha.session.BackupManager"

                   expireSessionsOnShutdown="false"

                   notifyListenersOnReplication="true"

                   mapSendOptions="6"/>  -->

        

          <Manager className="org.apache.catalina.ha.session.DeltaManager"

                   expireSessionsOnShutdown="false"

                   notifyListenersOnReplication="true"/>

        

         <Channel className="org.apache.catalina.tribes.group.GroupChannel">

            <Membership className="org.apache.catalina.tribes.membership.McastService"

                        address="228.0.0.2"

                        bind="192.168.1.252"

                        port="45564"

                        frequency="500"

                        dropTime="3000"/>

            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"

                      address="192.168.1.252"

                        autoBind="100"

                      port="5002"

                      selectorTimeout="100"

                      maxThreads="6"/>

 

            <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">

              <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>

            </Sender>

            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>

            <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>

            <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>

          </Channel>

 

          <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"

                 filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>

 

   <!--       <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"

                    tempDir="/tmp/war-temp/"

                    deployDir="/tmp/war-deploy/"

                    watchDir="/tmp/war-listen/"

                    watchEnabled="false"/> -->

 

          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>

        </Cluster>

 

配置nginx负载:

使用nginx做负载很简单,只要在配置文件里面加

  upstream  www.tomcat.com  {

#         ip_hash;  //启用这个的话,整个C类地址会防问同一个server

        server 192.168.1.251:8080;

        server 192.168.1.252:8080;

                   #两台负载的IP地址,这里默认的是RR

      }

 

 

  server

  {

    listen       80;

    server_name  _;

 

    location / {

            proxy_pass        http://www.tomcat.com;

            proxy_set_header   Host             $host;

            proxy_set_header   X-Real-IP        $remote_addr;

            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

        }

 

  }

 

到这里配置文件就OK了,服务器的启动顺序如下:

 

 

|-------------|      |-------------|       |-------------|

|tomcat1 |  --à  |tomcat2 |  --à  |nginx   |

|-------------|      |-------------|       |-------------|

 

先启动tocmat1,tomcat1启动完全的时候再启动tomcat2,等两个tocmat全启动之后,再启动nginx

 

 

测试一下我们的配置,测试页如下:

<%@ page contentType="text/html; charset=GBK" %>  

<%@ page import="java.util.*" %>  

<html><head><title>Cluster Test</title></head>  

<body>  

<%  

  //HttpSession session = request.getSession(true);  

  System.out.println(session.getId());  

  out.println("<br> SESSION ID:" + session.getId()+"<br>");    

  // 如果有新的请求,则添加session属性  

  String name = request.getParameter("name");  

  if (name != null && name.length() > 0) {  

     String value = request.getParameter("value");  

     session.setAttribute(name, value);  

  }    

    out.print("<b>Session List:</b>");    

    Enumeration<String> names = session.getAttributeNames();  

    while (names.hasMoreElements()) {  

        String sname = names.nextElement();   

        String value = session.getAttribute(sname).toString();  

        out.println( sname + " = " + value+"<br>");  

        System.out.println( sname + " = " + value);  

   }  

%>  

  <form action="index.jsp" method="post">  

    名称:<input type=text size=20 name="name">  

     <br>  

    :<input type=text size=20 name="value">  

     <br>  

    <input type=submit value="提交">  

   </form>  

</body>  

</html>

 

配置WEB-INF下的web.xml文件,在<web-app>中加入<distributable/>

 

<web-app>

 

<distributable/>

 

</web-app>

 

然后我们就可以用nginx来防问了!

先防问,然后随便关闭那一个,再开启,发现SESSION都是同步的!

 

PS:

负载的时候可以用APACHENGINX,如果什么都不用,两台一接防问了话,可能会出错极session不同步的问题,网上也很多人介意不要做seeeion同步,这样会降低机器的性能,有一个方法可以,就是NGINXip_hash,这样至少可以保证客户端去防问同一台TOCMAT,除非那台TOCMAT挂了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章