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

(一) 環(huán)境說明

  • 服務器有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的安裝路徑伸蚯,在環(huán)境變量path中加入jdk的bin路徑,新建環(huán)境變量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目錄下創(chuàng)建文件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相關內容菌羽。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末掠械,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子注祖,更是在濱河造成了極大的恐慌猾蒂,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件是晨,死亡現場離奇詭異肚菠,居然都是意外死亡,警方通過查閱死者的電腦和手機署鸡,發(fā)現死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門案糙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來限嫌,“玉大人靴庆,你說我怎么就攤上這事∨剑” “怎么了炉抒?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長稚叹。 經常有香客問我焰薄,道長,這世上最難降的妖魔是什么扒袖? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任塞茅,我火速辦了婚禮,結果婚禮上季率,老公的妹妹穿的比我還像新娘野瘦。我一直安慰自己,他們只是感情好飒泻,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布鞭光。 她就那樣靜靜地躺著,像睡著了一般泞遗。 火紅的嫁衣襯著肌膚如雪惰许。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天史辙,我揣著相機與錄音汹买,去河邊找鬼佩伤。 笑死,一個胖子當著我的面吹牛卦睹,可吹牛的內容都是我干的畦戒。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼结序,長吁一口氣:“原來是場噩夢啊……” “哼障斋!你這毒婦竟也來了?” 一聲冷哼從身側響起徐鹤,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤垃环,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后返敬,有當地人在樹林里發(fā)現了一具尸體遂庄,經...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年劲赠,在試婚紗的時候發(fā)現自己被綠了涛目。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡凛澎,死狀恐怖霹肝,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情塑煎,我是刑警寧澤沫换,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站最铁,受9級特大地震影響讯赏,放射性物質發(fā)生泄漏。R本人自食惡果不足惜冷尉,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一漱挎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧雀哨,春花似錦磕谅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至垢村,卻和暖如春割疾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背嘉栓。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工宏榕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留拓诸,地道東北人。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓麻昼,卻偏偏與公主長得像奠支,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子抚芦,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內容