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掛了!

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