同一個目標,同一個夢想

          One Target,One Dream
          posts - 25, comments - 11, trackbacks - 0, articles - 37

          第三次Apache tomcat集群總結

          Posted on 2009-08-04 18:32 J2EE Home工作室 閱讀(5047) 評論(4)  編輯  收藏 所屬分類: Apache + Tomcat

          ???? 第一次做集群時架好后在啟動tomcat時報了一大堆錯誤:內存溢出唄。我就納悶了怎么會出現這樣錯誤,服務器配置是4G內存,查了一通資料,發現原來tomcat在啟動時要加載已經編譯好的.class文件,默認內存區大小為128M,如果文件較多,這個錯誤也是必然的。咋辦?調內存唄,我的幾個tomcat都是以服務形式安裝的,整得我要改注冊表,就改這個地方,HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\Tomcat62\Parameters\Java
          然后調整里邊JavaMsJavaMx的值,前者表示運行時加載的最小內存,后者表示可利用的最大內存,單位是M,要換到十進制下去改。這個問題搞了三個周才找到解決辦法,第一次就敗在此處!
          ????
          第二次什么錯誤是其中一臺機器上tomcat啟動報錯Unable to start cluster. org.apache.catalina.tribes.ChannelException: java.net.SocketException: error set ting options; No faulty members identified. ,搞了一天沒有找到解決辦法,棄之;那位仁兄如果有解決辦法歡迎賜教!
          ????
          第三次集群方式和前兩次沒什么區別,都是采用http_proxy形式作為Apachetomcat之間連接的橋梁,這次把成功的配置詳細的說明下:
          1.
          去掉apachehttpd.conf目錄中以下幾行的注釋

          #change here start
          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

          ?#end

          # Virtual hosts

          # change here two step 就是去掉了注釋,主要用于配置虛擬機文件
          Include conf/extra/httpd-vhosts.conf

          2. httpd.conf最下邊加上這些東東

          ProxyRequests Off

          <proxy balancer://cluster>

          BalancerMember ajp://192.168.0.22:9001 loadfactor=1 route=jvm3

          BalancerMember ajp://192.168.0.22:9003 loadfactor=1 route=jvm4

          BalancerMember ajp://192.168.0.22:9090 loadfactor=1 route=jvm5

          </proxy>

          ?

          ProxyRequests Off

          <proxy balancer://cluster2>

          BalancerMember ajp://192.168.0.1:8009 loadfactor=1 route=jvm1

          </proxy>

          ?

          ProxyRequests Off

          <proxy balancer://cluster3>

          BalancerMember ajp://192.168.0.1:9009 loadfactor=1 route=jvm2

          </proxy>


          具體什么意思就不說了,第一行表格是做集群用,下邊兩個僅作為負載均衡之用,可以說就沒均衡負載,為啥?就一個tomcat你做什么負載啊,呵呵。重點關注這里

          <proxy balancer://cluster2>

          Cluster2 才是關鍵所在,他表示了你的站點要在那個群集內做負載均衡或者集群,我們這里用到了集群和負載均衡,其實就是一回事說白了,上 cluster 做集群, cluster2 cluster3 僅做負載均衡之用,不做 session 復制和繪畫保持。

          2 下邊我們看下 extra 目錄中 httpd-vhosts.conf 文件的修改吧

          以上邊說的 cluster,cluster2,cluster3 為例各配置一個虛擬機

          <VirtualHost *:80>

          ?????? ?ServerAdmin cxccma@163.com

          ?????? ?ServerName *****.com

          ?????? ?ServerAlias www.*****.com

          ???????? ProxyPass / balancer://cluster/ stickysession=jsessionid nofailover=On

          ???????? ProxyPassReverse / balancer://cluster/

          </VirtualHost>

          <VirtualHost *:80>

          ???????? ServerAdmin cxccma@163.com

          ???????? ServerName *****.cn

          ???????? ServerAlias www. *****.cn

          ???????? ProxyPass / balancer://cluster2/

          ???????? ProxyPassReverse / balancer://cluster2/

          </VirtualHost>

          <VirtualHost *:80>

          ???????? ServerAdmin cxccma@163.com

          ???????? ServerName *****.com

          ???????? ServerAlias www. *****.com

          ???????? ProxyPass / balancer://cluster3/

          ???????? ProxyPassReverse / balancer://cluster3/

          </VirtualHost>

          以上明白了,就是說是三個站點分別在不同的群集內,為什么要這樣做?主要是因為我們前期用的是 tomcat5.5 版本的,后期開發中友用到了 6.x 版本的,所以整了兩個群集以兼容前期和后期的站點,當然如果你需要在 cluster2, 或者 cluster3 中再加一臺 tomcat 做負載均衡用 ,OK, 很簡單,直接復制下就可以

          3.apache 說完了,接下來說下 tomcat

          Tomcat 中不用做什么大的改動,首先在 server.xml 文件中部署你的虛擬主機啊

          <Host name="www.******.com" appBase="webapps"

          ??? ???unpackWARs="true" autoDeploy="true"

          ?????? xmlValidation="false" xmlNamespaceAware="false">

          ?????????????? <Context path="" docBase="D:\lejie"

          ???????? debug= "0" reloadable="false" crossContext="false" verbosity="DEBUG">

          ???? </Context>

          </Host>

          OK ,如果需要做全局集群,那就修改 content.xml 文件中 Context 元素,加上這句就行

          distributable="true"

          或者在單獨的文件中的 web.xml 文件中加入這句話

          < distributable/>

          到這應該都說完了吧,談下個人的想法: apache tomcat 有三種連接方法: JK mod_proxy,http_proxy ,前兩者的配置都是超繁瑣,在可維護性和模塊化上也沒什么優點,我一直用第三種連接方法,采用 AJP 直連, AJP1.3 在連接上表現出明顯的優點,所以我也建議采用第三種連接。

          算是一個工作總結吧,歡迎各位不吝賜教!如果有什么疑問請通過以下方式聯系本人

          Feedback

          # re: 第三次Apache tomcat集群總結[未登錄]  回復  更多評論   

          2009-08-06 16:22 by aaa
          我用的是jk,不覺得有什么繁瑣

          # re: 第三次Apache tomcat集群總結[未登錄]  回復  更多評論   

          2009-08-06 16:23 by aaa
          jk可以將靜態頁面交給apache直接處理

          # re: 第三次Apache tomcat集群總結[未登錄]  回復  更多評論   

          2014-08-19 20:19 by 小強
          參考這里http://www.javacui.com/service/136.html

          # re: 第三次Apache tomcat集群總結  回復  更多評論   

          2015-01-29 12:19 by 王丹
          什么叫全局集群?
          主站蜘蛛池模板: 东丰县| 西吉县| 工布江达县| 依安县| 嘉祥县| 建湖县| 岚皋县| 沾益县| 西华县| 长丰县| 广西| 咸丰县| 青岛市| 临泉县| 彩票| 施甸县| 徐州市| 楚雄市| 岱山县| 犍为县| 南靖县| 江陵县| 镇巴县| 深水埗区| 永城市| 金沙县| 正安县| 南郑县| 普兰县| 明星| 通州区| 涿鹿县| 云浮市| 冷水江市| 宁都县| 满洲里市| 大宁县| 恭城| 伊川县| 密云县| 钟山县|