paulwong

          配置負載均衡 配置集群

          所需軟件

            Apache :apache_2.0.63 1 個 【apache_2.0.63-win32-x86-no_ssl.msi】

            Tomcat: apache-tomcat-5.5.23 (zip版) 2個

            mod_jk:: mod_jk-apache-2.0.55.so 1個

            部署說明

            在同一臺機器上部署,即充當Apache負載服務器,又安裝兩個Tomcat Web服務,由Apache負責分發不同的請求到Tomcat Web服務器。

            注意:由于同一臺機器安裝兩個TomcatWeb服務,所以,系統環境變量不要配置TOMCAT_HOME 和CATALINA_HOME.

            安裝說明

            http://httpd.apache.org/ 下載Apache 2.0.63

            http://tomcat.apache.org/download-55.cgi 下載tomcat5.5 zip版本(解壓即可,綠色版)

            http://apache.mirror.phpchina.com/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.26/ 下載mod_jk,注意和 apache版本匹配

            Apache 的安裝一路Next即可。

            Tomcat 的安裝解壓兩份Tomcat即可。由于在同一臺電腦上,所以第二個Tomcat服務注意很多portId不能與第一個相同!

            安裝好apache和tomcat后,再將mod_jk-apache-2.0.55.so拷貝到Apache的安裝目錄的modules子目錄下。

            一、配置負載均衡

            負載均衡,就是apache將客戶請求均衡的分給tomcat1,tomcat2....去處理

            Step1.修改Apache配置文件http.conf

            在apache安裝目錄下conf目錄中找到http.conf,在文件最后加入一句:

            #加入下面一句話指定mod_jk配置文件路徑

          include "C:\Program Files\Apache Group\Apache2\conf\mod_jk.conf"

          Step2. http.conf 同目錄下新建mod_jk.conf文件,內容如下

          #加載mod_jk Module

            LoadModule jk_module modules/mod_jk-
          1.2.26-httpd-2.0.59.so

            #指定 workers.properties文件路徑

            JkWorkersFile conf/workers2.properties

            #指定那些請求交給tomcat處理
          ,"controller"為在workers2.propertise里指定的負載分配控制器

            JkMount /*.jsp controller

            JkMount /*.do controller

            # Where to put jk logs

            JkLogFile logs/mod_jk.log

            # Set the jk log level
          [debug/error/info]

            JkLogLevel info

            # Select the log format

            JkLogStampFormat
          "[%a %b %d %H:%M:%S %Y] "

            # JkOptions indicate to send SSL KEY SIZE
          ,

            JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories

            # JkRequestLogFormat set the request format

            JkRequestLogFormat
          "%w %V %T"

          Step3.在http.conf同目錄下新建 workers2.properties文件,內容如下

          #server 列表

            worker.list
          = tomcat1,tomcat2,controller

            #
          ========tomcat1========

            worker.tomcat1.port
          =9009 #ajp13 端口號,在tomcat下server.xml配置,默認8009

            worker.tomcat1.host
          =localhost #tomcat的主機地址,如不為本機,請填寫ip地址

            worker.tomcat1.type
          =ajp13

            worker.tomcat1.lbfactor
          =2 #server的加權比重,值越高,分得的請求越多

            #
          ========tomcat2========

            worker.tomcat2.port
          =8009 #ajp13 端口號,在tomcat下server.xml配置,默認8009

            worker.tomcat2.host
          =99.48.225.100 #tomcat的主機地址,如不為本機,請填寫ip地址

            worker.tomcat2.type
          =ajp13

            worker.tomcat2.lbfactor
          =1 #server的加權比重,值越高,分得的請求越多

            #
          ========controller,負載均衡控制器========

            worker.controller.type
          =lb

            worker.controller.balanced_workers
          =tomcat2,tomcat1 #指定分擔請求的tomcat

            worker.controller.sticky_session
          =1


            Step4.修改tomcat配置文件server.xml

            如果你在不同電腦上安裝tomcat,tomcat的安裝數量為一個,可以不必修改tomcat配置文件,我這里是在同一臺電腦上安裝兩個tomcat,所以需要更改其中一個的設置:

            打開tomcat2/conf/server.xml文件,修改以下端口號和增加jvmroute:

          <Server port="9005" shutdown="SHUTDOWN">

            
          <Connector port="9999" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"  enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="gb2312"/>

            
          <Connector port="9009" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />

            
          <Connector port="9082" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

            enableLookups
          ="false" acceptCount="100" connectionTimeout="20000" proxyPort="80" disableUploadTimeout="true" />


          再在兩個tomcat web服務上增加jvmRoute的值指向tomcat1,tomcat2:

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

          Step5. 測試是否成功
            編寫一個測試jsp
            建立一個目錄test.里面新建一個test.jsp,內容為

          <%@ page language="java" pageEncoding="GB2312" import="java.util.*"%>
          <%
            System
          .out.println("===========================");
            
          %>
          <html>
          <head>
          <title>主頁</title>
          <link href="css/css.css" rel="stylesheet" type="text/css" />
          <script type="text/javascript">
            function showCss(){
            document.getElementByIdx_x_xx("css").className = "show";
            }
            
          </script>
          </head>
          <body class="bg1">把test放到tomcat1,tomcat2下
          </body>
          </html>

          打開IE的兩個窗口http://localhost/ZX/index.jsp ,第一個窗口將由Tomcat1控制,而第二個窗口將被jk調度tomcat2來控制,但相同的session都由同一個tomcat服務器控制。

            二、配置集群

            集群在這里完成的即session在不同tomcat服務器中的同步復制。并不是說每個tomcat服務器中的session值一致,而是當tomcat1被關閉后,在其上跑的session值將被復制到tomcat2中去,當在tomcat1的客戶端繼續請求時,apache仍然會將請求通過jk調度到tomcat2服務器上,讓之前基于tomcat1的session服務繼續下去。

            這樣,就可以提高系統的容錯能力。

            Step1. 在tomcat2的server.xml文件中,

            將以下Element的注釋除去:

          <Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"  managerClassName="org.apache.catalina.cluster.session.DeltaManager"  expireSessionsOnShutdown="false"  useDirtyFlag="true"   notifyListenersOnReplication="true">

            
          <Membership   className="org.apache.catalina.cluster.mcast.McastService" mcastAddr="228.0.0.4"  mcastPort="45564" mcastFrequency="500"  mcastDropTime="3000"/>

            
          <Receiver  className="org.apache.catalina.cluster.tcp.ReplicationListener" tcpListenAddress="auto" tcpListenPort="4001" tcpSelectorTimeout="100" tcpThreadCount="6"/>

            
          <Sender   className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"   replicationMode="pooled"   ackTimeout="15000" waitForAck="true"/>

            
          <Valve className="org.apache.catalina.cluster.tcp.ReplicationValve"   filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>

            
          <Deployer className="org.apache.catalina.cluster.deploy.FarmWarDeployer" tempDir="/tmp/war-temp/"  deployDir="/tmp/war-deploy/"  watchDir="/tmp/war-listen/"   watchEnabled="false"/>

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

          </Cluster>

          同時修改:

            tcpListenPort="4001"

            為:

            tcpListenPort="4002"

            這是因為兩個tomcat在同一臺機器上為了防止端口沖突!

            Step2: 在tomcat1和tomcat2的/WEBINF/web.xml文件中

            在元素中增加這一句:

            Step3: 測試集群:

            增加文件test-session.jsp:

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

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

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

            
          <body>

            Server Info:

            
          <%

            out.println(request.getLocalAddr()
          + " : " + request.getLocalPort()+"<br>");
          %>

            
          <%

            out.println(
          "<br> ID " + session.getId()+"<br>"); // 如果有新的 Session 屬性設置

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

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

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

            session.setAttribute(dataName, dataValue);

            }

            out.print(
          "<b>Session 列表</b>"); Enumeration e = session.getAttributeNames();

            
          while (e.hasMoreElements()) {

            
          String name = (String)e.nextElement();

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

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

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

            }

            
          %>

            
          <form action="test-session.jsp" method="POST">

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

            
          <br>

            值:
          <input type=text size=20 name="dataValue">

            
          <br>

            
          <input type=submit>

            
          </form>

            
          </body>

            
          </html>

          開兩個IE窗口輸入:http://localhost/ZX/test-session.jsp 可以看到前一個IE創建了一個session1,服務指向tomcat1,后一個IE創建了一個session2,服務指向tomcat2,往session1的頁面不斷添加值寫入tomcat1,。。。比如:

            session1: ivy1 ivy11

            session2: ivy2 ivy22

            這時,將tomcat1關閉(關閉的同時,在服務的后臺,tomcat1中的所有session將被同步到tomcat2中去),仍然在第一個IE中請求服務,服務將被Apache中的jk調度到tomcat2上,session1沒有被丟失!

            三、創建一個jkstatus頁面定時查看該集群的服務情況

            step1:在workers2.properties文件中:

            修改:

            #server 列表

            worker.list = tomcat1,tomcat2,controller

            為

            #server 列表

            worker.list = tomcat1,tomcat2,controller,status

            新增:

            # 這個是用來監控jk運行情況的worker

            worker.status.type=status

            #end

            Step2: 在文件mod_jk.conf中

            新增:

            JkMount /jkstatus status

            Step3: 測試:

            在IE中輸入:http://localhost/jkstatus 可以看到各個tomcat服務的使用情況

          posted on 2011-12-09 00:45 paulwong 閱讀(344) 評論(0)  編輯  收藏 所屬分類: 分布式

          主站蜘蛛池模板: 衡阳市| 雷州市| 安丘市| 柯坪县| 通州区| 察雅县| 瑞安市| 蒲江县| 出国| 临江市| 远安县| 安岳县| 宁安市| 怀仁县| 文登市| 溆浦县| 绥德县| 封开县| 慈利县| 凭祥市| 黄石市| 锦州市| 拜城县| 休宁县| 隆林| 水富县| 白玉县| 扬中市| 天镇县| 齐河县| 吉木萨尔县| 金平| 淄博市| 新和县| 大连市| 德清县| 水城县| 广州市| 大姚县| 双流县| 烟台市|