Tomcat集群和負載均衡的實現(session同步)

(一) 環境說明

  • 服務器有4臺,一臺安裝apache,三臺安裝tomcat
  • apache2.0.55、tomcat5.5.15、jk2.0.4、jdk1.5.6或jdk1.4.2
  • ip配置:一臺安裝apache的ip為192.168.0.88,三臺安裝tomcat的服務器ip分別為192.168.0.1/2/4

(二) 安裝過程

  • 在三臺要安裝tomcat的服務器上先安裝jdk
  • 配置jdk的安裝路徑,在環境變量path中加入jdk的bin路徑,新建環境變量JAVA_HOME指向jdk的安裝路徑
  • 在三臺要安裝tomcat的服務器上分別安裝tomcat,調試三個tomcat到能夠正常啟動
  • 分別修改3臺tomcat的server.xml端口為:7080/8888/9999
<Connector port="7080" maxHttpHeaderSize="8192"   
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"   
               enableLookups="false" redirectPort="8443" acceptCount="100"   
               connectionTimeout="20000" disableUploadTimeout="true" />  
<Connector port="8888" maxHttpHeaderSize="8192"   
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"   
               enableLookups="false" redirectPort="8443" acceptCount="100"   
               connectionTimeout="20000" disableUploadTimeout="true" />  
<Connector port="9999" maxHttpHeaderSize="8192"   
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"   
               enableLookups="false" redirectPort="8443" acceptCount="100"   
               connectionTimeout="20000" disableUploadTimeout="true" />  
  • 分別測試每個tomcat的啟動是否正常

http://192.168.0.1:7080
http://192.168.0.2:8888
http://192.168.0.4:9999

(三) 負載均衡配置過程

  • 在那臺要安裝apache的服務器上安裝apache2.0.55,我的安裝路徑為默認C:\Program Files\Apache Group\Apache2
  • 安裝后測試apache能否正常啟動,調試到能夠正常啟動http://192.168.0.88
  • 下載jk2.0.4后解壓縮文件
  • 將解壓縮后的目錄中的modules目錄中的mod_jk2.so文件復制到apache的安裝目錄下的modules目錄中,我的為C:\Program Files\Apache Group\Apache2\modules
  • 修改apache的安裝目錄中的conf目錄的配置文件httpd.conf,在文件中加LoadModule模塊配置信息的最后加上一句LoadModule jk2_module modules/mod_jk2.so
  • 分別修改三個tomcat的server.xml,修改內容如下:

將其中的jvmRoute="jvm1"分別修改為jvmRoute="tomcat1"、jvmRoute="tomcat2"和jvmRoute="tomcat3"

    <!-- An Engine represents the entry point (within Catalina) that processes   
         every request.  The Engine implementation for Tomcat stand alone   
         analyzes the HTTP headers included with the request, and passes them   
         on to the appropriate Host (virtual host). -->   
  
    <!-- You should set jvmRoute to support load-balancing via AJP ie :-->   
    <Engine name="Standalone" defaultHost="localhost" jvmRoute="tomcat1">         
       
          
    <!-- Define the top level container in our container hierarchy   
    <Engine name="Catalina" defaultHost="localhost">   
    --> 
  • 然后重啟三個tomcat,調試能夠正常啟動
  • 在apache的安裝目錄中的conf目錄下創建文件workers2.propertie,寫入文件內容如下
# Define the communication channel   
[channel.socket:192.168.0.1:8009]   
info=Ajp13 forwarding over socket   
#配置第一個服務器   
tomcatId=tomcat1 #要和tomcat的配置文件server.xml中的jvmRoute="tomcat1"名稱一致   
debug=0   
lb_factor=1 #負載平衡因子,數字越大請求被分配的幾率越高   
  
# Define the communication channel   
[channel.socket:192.168.0.2:8009]   
info=Ajp13 forwarding over socket   
tomcatId=tomcat2   
debug=0   
lb_factor=1   
  
# Define the communication channel   
[channel.socket:192.168.0.4:8009]   
info=Ajp13 forwarding over socket   
tomcatId=tomcat3   
debug=0   
lb_factor=1   
  
[status:]   
info=Status worker, displays runtime information.    
  
[uri:/jkstatus.jsp]   
info=Display status information and checks the config file for changes.   
group=status:   
  
[uri:/*]   
info=Map the whole webapp   
debug=0   
  • 在三個tomcat的安裝目錄中的webapps建立相同的應用,我和應用目錄名為TomcatDemo,在三個應用目錄中建立相同 WEB-INF目錄和頁面index.jsp,index.jsp的頁面內容如下:
<%@ page contentType="text/html; charset=GBK" %>   
<%@ 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="index.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>  
  • 重啟apache服務器和三個tomcat服務器,到此負載 均衡已配置完成。測試負載均衡先測試apache,訪問http://192.168.0.88/jkstatus.jsp,能否正常訪問,并查詢其中的內容,有三個tomcat的相關配置信息和負載說明,訪問http://192.168.0.88/TomcatDemo/index.jsp看能夠運行,能運行,則已建立負載均衡

(四) tomcat集群配置

  • 負載均衡配置的條件下配置tomcat集群
  • 分別修改三個tomcat的server.xml,修改內容如下:
        <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="5000"/>   
  
            <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> 

將集群配置選項的注釋放開即可

  • 重啟三個tomcat,到此tomcat的集群已配置完成

(五) 應用配置

對于要進行負載和集群的的tomcat目錄下的webapps中的應用中的WEB-INF中的web.xml文件要添加如下一句配置 <distributable/>

<?xml version="1.0" encoding="UTF-8"?>   
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">  
   <display-name>TomcatDemo</display-name>   
   <distributable/>   
</web-app>

補充:
因為tomcat的session同步功能需要用到組播,windows默認情況下是開通組播服務的,但是linux默認情況下并沒有開通,可以通過指令打開route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0,如果需要服務器啟動時即開通組播需在/etc/sysconfig/static-routes文件內加入eht0 net 224.0.0.0 netmask 240.0.0.0。具體組播概念請查閱CCNP相關內容。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,835評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,676評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,730評論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,118評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,873評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,266評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,330評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,482評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,036評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,846評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,025評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,575評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,279評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,684評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,953評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,751評論 3 394
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,016評論 2 375

推薦閱讀更多精彩內容