Posted on 2009-08-04 18:32
J2EE Home工作室 閱讀(5050)
評論(4) 編輯 收藏 所屬分類:
Apache + Tomcat
????
第一次做集群時架好后在啟動tomcat時報了一大堆錯誤:內存溢出唄。我就納悶了怎么會出現這樣錯誤,服務器配置是4G內存,查了一通資料,發現原來tomcat在啟動時要加載已經編譯好的.class文件,默認內存區大小為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. ,搞了一天沒有找到解決辦法,棄之;那位仁兄如果有解決辦法歡迎賜教!
????第三次集群方式和前兩次沒什么區別,都是采用http_proxy形式作為Apache和tomcat之間連接的橋梁,這次把成功的配置詳細的說明下:
1.去掉apache中httpd.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
元素,加上這句就行
或者在單獨的文件中的
web.xml
文件中加入這句話
到這應該都說完了吧,談下個人的想法:
apache
和
tomcat
有三種連接方法:
JK
,
mod_proxy,http_proxy
,前兩者的配置都是超繁瑣,在可維護性和模塊化上也沒什么優點,我一直用第三種連接方法,采用
AJP
直連,
AJP1.3
在連接上表現出明顯的優點,所以我也建議采用第三種連接。
算是一個工作總結吧,歡迎各位不吝賜教!如果有什么疑問請通過以下方式聯系本人