posts - 59, comments - 244, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          apache與tomcat負載集群的3種方法

          Posted on 2011-04-15 00:51 penngo 閱讀(25574) 評論(9)  編輯  收藏 所屬分類: Java
          花了兩天時間學習apache與tomcat的集成方法,現在把學習成果記錄下來。
          apache與tomcat負載集群集成方法有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

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

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

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

          要實現session復制,還需要在context.xml添加屬性distributable="true",如下:
          <Context distributable="true">
          如果不想在context.xml中添加distributable="true",還有另一方法是在應用程序的web.xml中添加<distributeable/>,不過這方法我沒有測試。
          配置完成,訪問地址為:http://127.0.0.1:8079

          另一個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一樣。
          配置完成,訪問地址為:http://127.0.0.1:8078
          注意:如果兩個tomcat是放在同一臺機內,server.xml可能還需要修改其它端口,請確認兩個tomcat能正常啟動。

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

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

          現在開始apache和tomcat的不同方式集成
          1、jk方式集成
          下載mod_jk-1.2.31-httpd-2.2.3.so,請下載合適的mod_jk版本,改名為mod_jk.so放進modules文件夾內
          修改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文件,添加內容
          worker.list=loadbalancer
          worker.worker2.port=8077   #ajp的監聽端口
          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設置的別名一致
          worker.loadbalancer.sticky_session=1
          配置完成任務,訪問http://127.0.0.1:8081/test/test.jsp,檢查是否能正常訪問。

          2、ajp_proxy
          去掉httpd.conf文件中下面內容的注釋(刪掉#號),開啟下邊的配置
          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這個模塊;
          如果是采用http_proxy,需要加載mod_proxy_http.so這個模塊;

          httpd.conf,刪除剛才jk方式的配置內容,增加下邊的配置
          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>
          配置完成任務,訪問http://127.0.0.1:8081/test/test.jsp,檢查是否能正常訪問。

          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>
          配置完成任務,訪問http://127.0.0.1:8081/test/test.jsp,檢查是否能正常訪問。

          apache_tomcat配置文件下載:apache_tomcat


          評論

          # re: apache與tomcat負載集群的3種方法  回復  更多評論   

          2011-04-15 15:37 by 寧波LED
          一個看不懂,無語了

          # re: apache與tomcat負載集群的3種方法  回復  更多評論   

          2011-07-29 17:56 by 白河
          請教一下啊。
          為啥按照你的配置 在同一臺機器上 都是只能請求一個tomcat?

          # re: apache與tomcat負載集群的3種方法  回復  更多評論   

          2011-07-29 23:24 by penngo
          @白河
          沒遇上這情況.

          # re: apache與tomcat負載集群的3種方法  回復  更多評論   

          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負載集群的3種方法[未登錄]  回復  更多評論   

          2013-12-27 14:38 by 222
          這種方式采用了session粘滯的方式實現的

          # re: apache與tomcat負載集群的3種方法  回復  更多評論   

          2015-04-09 13:25 by 定格
          LZ學習是通過視頻還是書籍,求資料

          # re: apache與tomcat負載集群的3種方法  回復  更多評論   

          2015-07-30 14:37 by 放放風
          多認證負載均衡跳轉,3種方法都試過了,跳轉慢,10-15秒才反應過來,直連apache+tomcat到是很快,郁悶啊

          # re: apache與tomcat負載集群的3種方法  回復  更多評論   

          2015-09-09 11:32 by Aceslup
          <Context distributable="true"> 這個沒有測試成功

          # re: apache與tomcat負載集群的3種方法[未登錄]  回復  更多評論   

          2016-04-29 16:58 by Leon
          能發表不是JK 方式的另外兩種配置嗎/
          主站蜘蛛池模板: 宁远县| 调兵山市| 科技| 淄博市| 开鲁县| 田东县| 普定县| 云安县| 仁化县| 广汉市| 教育| 衡水市| 靖州| 许昌市| 故城县| 称多县| 德兴市| 津南区| 新泰市| 尼勒克县| 宁德市| 平谷区| 舞钢市| 思茅市| 潞城市| 正蓝旗| 临清市| 云南省| 葵青区| 宁波市| 闽侯县| 沂源县| 涪陵区| 宣汉县| 平邑县| 宁化县| 潞城市| 嵩明县| 江永县| 怀安县| 凤庆县|