posts - 59, comments - 244, trackbacks - 0, articles - 0
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          apache與tomcat負(fù)載集群的3種方法

          Posted on 2011-04-15 00:51 penngo 閱讀(25575) 評(píng)論(9)  編輯  收藏 所屬分類: Java
          花了兩天時(shí)間學(xué)習(xí)apache與tomcat的集成方法,現(xiàn)在把學(xué)習(xí)成果記錄下來(lái)。
          apache與tomcat負(fù)載集群集成方法有3種jk、jk_proxy、http_proxy
          本次集成使用的軟件版本:
          apache:httpd-2.2.17-win32-x86-no_ssl.msi
          tomcat:apache
          -tomcat-6.0.20.zip
          jdk:jdk
          -6u14-windows-i586.exe

          本次測(cè)試是1個(gè)apache集成兩個(gè)tomcat。
          安裝apache http server省略,訪問(wèn)地址為http://127.0.0.1:8081
          安裝tomcat,解壓apache-tomcat-6.0.20.zip,測(cè)試時(shí)我是把兩個(gè)tomcat分開(kāi)放在不同的虛擬機(jī),其中一個(gè)是和apache同一臺(tái)虛擬機(jī)。
          兩個(gè)tomcat分別命名為worker2和worker3
          先說(shuō)tomcat.worker2的配置:
          server.xml
          (1)配置http監(jiān)聽(tīng)端口,這里端口設(shè)為8079,該步驟非必要,只要不沖突就行了。
          <Connector port="8079" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

          (2)配置AJP監(jiān)聽(tīng)端口,這里端口設(shè)為8077,該步驟非必要,只要不沖突就行了。
          <Connector port="8077" protocol="AJP/1.3" redirectPort="8443" />

          (3)配置服務(wù)器標(biāo)識(shí),這里標(biāo)識(shí)名配置為:worker2,添加jvmRoute="worker2",該步驟必須。
          <Engine name="Catalina" defaultHost="localhost" jvmRoute="worker2">
          在Engine節(jié)點(diǎn)啟用集群配置,只需去掉Cluster節(jié)點(diǎn)前的注釋就行了,該步驟必須,配置了集群才能實(shí)現(xiàn)Session復(fù)制,如果只有一個(gè)集群,只按我下邊的配置就行了,如果多個(gè)集群,則不能按此配置,tomcat服務(wù)器內(nèi)的幫助文檔/docs/cluster-howto.html,/docs/config/cluster.html有介紹,需要的可以參考下。
          <Engine name="Catalina" defaultHost="localhost" jvmRoute="worker2">
             
          <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> 

          要實(shí)現(xiàn)session復(fù)制,還需要在context.xml添加屬性distributable="true",如下:
          <Context distributable="true">
          如果不想在context.xml中添加distributable="true",還有另一方法是在應(yīng)用程序的web.xml中添加<distributeable/>,不過(guò)這方法我沒(méi)有測(cè)試。
          配置完成,訪問(wèn)地址為:http://127.0.0.1:8079

          另一個(gè)tomcat.worker3的配置
          server.xml
          <Connector port="8078" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
          <Connector port="9009" protocol="AJP/1.3" redirectPort="8443" />
          <Engine name="Catalina" defaultHost="localhost" jvmRoute="worker3">
             
          <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
          context.xml配置tomcat.worker2一樣。
          配置完成,訪問(wèn)地址為:http://127.0.0.1:8078
          注意:如果兩個(gè)tomcat是放在同一臺(tái)機(jī)內(nèi),server.xml可能還需要修改其它端口,請(qǐng)確認(rèn)兩個(gè)tomcat能正常啟動(dòng)。

          在tomcat.worker2和tomcat.worker3的webapps文件夾添加同樣的測(cè)試文件test"test.jsp
          <html>
          <head>
            
          <title>helloapp</title>
          </head>
          <body>
          <%
          System.out.println(
          "call test.jsp");

          %>   
          SessionID: 
          <%=session.getId() %>  
          </body>
          </html>
          訪問(wèn)http://127.0.0.1:8078/test/test.jsp和http://127.0.0.1:8079/test/test.jsp,確保能成功訪問(wèn)。

          現(xiàn)在開(kāi)始apache和tomcat的不同方式集成
          1、jk方式集成
          下載mod_jk-1.2.31-httpd-2.2.3.so,請(qǐng)下載合適的mod_jk版本,改名為mod_jk.so放進(jìn)modules文件夾內(nèi)
          修改conf/httpd.conf配置
          LoadModule jk_module modules/mod_jk.so
          JkWorkersFile conf/workers.properties
          JkLogFile logs/mod_jk.log
          JkLogLevel debug
          JkMount  /*.do loadbalancer
          JkMount  /*.jsp loadbalancer
          增加conf/workers.properties文件,添加內(nèi)容
          worker.list=loadbalancer
          worker.worker2.port=8077   #ajp的監(jiān)聽(tīng)端口
          worker.worker2.host=108.88.3.105
          worker.worker2.type=ajp13
          worker.worker2.lbfactor=1
          worker.worker3.port=9009
          worker.worker3.host=127.0.0.1
          worker.worker3.type=ajp13
          worker.worker3.lbfactor=1
          worker.loadbalancer.type=lb
          worker.loadbalancer.balance_workers=worker2,worker3 #這里在的worker2、worker3為需要與上邊tomcat設(shè)置的別名一致
          worker.loadbalancer.sticky_session=1
          配置完成任務(wù),訪問(wèn)http://127.0.0.1:8081/test/test.jsp,檢查是否能正常訪問(wèn)。

          2、ajp_proxy
          去掉httpd.conf文件中下面內(nèi)容的注釋(刪掉#號(hào)),開(kāi)啟下邊的配置
          Include conf/extra/httpd-vhosts.conf
          LoadModule proxy_module modules/mod_proxy.so
          LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
          LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
          LoadModule proxy_connect_module modules/mod_proxy_connect.so
          LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
          LoadModule proxy_http_module modules/mod_proxy_http.so
          注意:
          除了mod_proxy.so,mod_proxy_balancer.so,mod_proxy_connect.so
          如果是采用ajp_proxy,需要加載mod_proxy_ajp.so這個(gè)模塊;
          如果是采用http_proxy,需要加載mod_proxy_http.so這個(gè)模塊;

          httpd.conf,刪除剛才jk方式的配置內(nèi)容,增加下邊的配置
          ProxyRequests Off
          <proxy balancer://loadbalancer> 
          BalancerMember ajp://127.0.0.1:9009 loadfactor=1 route=worker3
          BalancerMember ajp://108.88.3.105:8077 loadfactor=1 route=worker2
          </proxy>
          conf/extra/httpd-vhosts.conf增加配置
          <VirtualHost *:8081>
                   ServerAdmin xxxx@xxx.com
                   ServerName localhost
                   ServerAlias localhost
                   ProxyPass / balancer://loadbalancer/ stickysession=jsessionid nofailover=On
                   ProxyPassReverse / balancer://loadbalancer/
                   ErrorLog "logs/loadbalancer-error.log"
                   CustomLog "logs/loadbalancer-access.log" common
          </VirtualHost>
          配置完成任務(wù),訪問(wèn)http://127.0.0.1:8081/test/test.jsp,檢查是否能正常訪問(wèn)。

          3、http_proxy
          http_proxy的配置與ajp_proxy類似,修改方法2的httpd.conf配置如下,其它不變
          ProxyRequests Off
          <proxy balancer://loadbalancer> 
          BalancerMember http://127.0.0.1:8078 loadfactor=1 route=worker3
          BalancerMember http://108.88.3.105:8079 loadfactor=1 route=worker2
          </proxy>
          配置完成任務(wù),訪問(wèn)http://127.0.0.1:8081/test/test.jsp,檢查是否能正常訪問(wèn)。

          apache_tomcat配置文件下載:apache_tomcat


          評(píng)論

          # re: apache與tomcat負(fù)載集群的3種方法  回復(fù)  更多評(píng)論   

          2011-04-15 15:37 by 寧波LED
          一個(gè)看不懂,無(wú)語(yǔ)了

          # re: apache與tomcat負(fù)載集群的3種方法  回復(fù)  更多評(píng)論   

          2011-07-29 17:56 by 白河
          請(qǐng)教一下啊。
          為啥按照你的配置 在同一臺(tái)機(jī)器上 都是只能請(qǐng)求一個(gè)tomcat?

          # re: apache與tomcat負(fù)載集群的3種方法  回復(fù)  更多評(píng)論   

          2011-07-29 23:24 by penngo
          @白河
          沒(méi)遇上這情況.

          # re: apache與tomcat負(fù)載集群的3種方法  回復(fù)  更多評(píng)論   

          2013-01-04 18:45 by bohaiwaiwai
          如果有httpd-vhost.conf中有
          RewriteCond %{HTTP_HOST} www.jkl.cn$ [NC]
          RewriteRule ^/(.*)$ http://192.168.0.168:8080/jkl_web/$1 [P,L]
          這樣的配置怎么辦啊。。

          # re: apache與tomcat負(fù)載集群的3種方法[未登錄](méi)  回復(fù)  更多評(píng)論   

          2013-12-27 14:38 by 222
          這種方式采用了session粘滯的方式實(shí)現(xiàn)的

          # re: apache與tomcat負(fù)載集群的3種方法  回復(fù)  更多評(píng)論   

          2015-04-09 13:25 by 定格
          LZ學(xué)習(xí)是通過(guò)視頻還是書籍,求資料

          # re: apache與tomcat負(fù)載集群的3種方法  回復(fù)  更多評(píng)論   

          2015-07-30 14:37 by 放放風(fēng)
          多認(rèn)證負(fù)載均衡跳轉(zhuǎn),3種方法都試過(guò)了,跳轉(zhuǎn)慢,10-15秒才反應(yīng)過(guò)來(lái),直連apache+tomcat到是很快,郁悶啊

          # re: apache與tomcat負(fù)載集群的3種方法  回復(fù)  更多評(píng)論   

          2015-09-09 11:32 by Aceslup
          <Context distributable="true"> 這個(gè)沒(méi)有測(cè)試成功

          # re: apache與tomcat負(fù)載集群的3種方法[未登錄](méi)  回復(fù)  更多評(píng)論   

          2016-04-29 16:58 by Leon
          能發(fā)表不是JK 方式的另外兩種配置嗎/
          主站蜘蛛池模板: 甘肃省| 沈丘县| 霸州市| 江津市| 伊吾县| 紫阳县| 通化市| 屯门区| 临猗县| 临海市| 巩留县| 从化市| 崇信县| 高雄市| 库尔勒市| 奇台县| 洛南县| 德保县| 泗水县| 蒙阴县| 贡觉县| 沙洋县| 商河县| 介休市| 洛隆县| 厦门市| 临江市| 常德市| 体育| 济源市| 中宁县| 榆社县| 兴和县| 桐柏县| 体育| 丁青县| 大方县| 大化| 开远市| 湾仔区| 会同县|