第三次Apache tomcat集群總結
Posted on 2009-08-04 18:32 J2EE Home工作室 閱讀(5049) 評論(4) 編輯 收藏 所屬分類: Apache + Tomcat
????
第一次做集群時架好后在啟動tomcat時報了一大堆錯誤:內存溢出唄。我就納悶了怎么會出現(xiàn)這樣錯誤,服務器配置是4G內存,查了一通資料,發(fā)現(xiàn)原來tomcat在啟動時要加載已經編譯好的.class文件,默認內存區(qū)大小為128M,如果文件較多,這個錯誤也是必然的。咋辦?調內存唄,我的幾個tomcat都是以服務形式安裝的,整得我要改注冊表,就改這個地方,HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\Tomcat62\Parameters\Java
然后調整里邊JavaMs和JavaMx的值,前者表示運行時加載的最小內存,后者表示可利用的最大內存,單位是M,要換到十進制下去改。這個問題搞了三個周才找到解決辦法,第一次就敗在此處!
????第二次什么錯誤是其中一臺機器上tomcat啟動報錯Unable to start cluster. org.apache.catalina.tribes.ChannelException: java.net.SocketException: error set ting options; No faulty members identified. ,搞了一天沒有找到解決辦法,棄之;那位仁兄如果有解決辦法歡迎賜教!
????第三次集群方式和前兩次沒什么區(qū)別,都是采用http_proxy形式作為Apache和tomcat之間連接的橋梁,這次把成功的配置詳細的說明下:
1.去掉apache中httpd.conf目錄中以下幾行的注釋
#change here start
?#end |
# Virtual hosts
# change here two step
就是去掉了注釋,主要用于配置虛擬機文件 |
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 版本的,后期開發(fā)中友用到了 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 ,前兩者的配置都是超繁瑣,在可維護性和模塊化上也沒什么優(yōu)點,我一直用第三種連接方法,采用 AJP 直連, AJP1.3 在連接上表現(xiàn)出明顯的優(yōu)點,所以我也建議采用第三種連接。
算是一個工作總結吧,歡迎各位不吝賜教!如果有什么疑問請通過以下方式聯(lián)系本人