主題:Apache與Tomcat搭建集群
早前就解了Apache和Tomcat可以搭建集群,可以負載均衡,升級就不需要停交易,真是強大。昨晚看了google reader的收藏又再次看到這篇文章,于是今天在星巴克研究了一把,發現真的很強大,負載均衡、session復制都可以做到,以后再也不用為升級系統而煩惱了。
下面就來講講是搭建集群的過程,首頁需要下載apahce和tomcat(當然需要安裝jdk,這就不多講了,大家應該懂得),本次實踐我是在windows系統的環境下進行的,apache是2.2.21版本,tomcat是7.0.16和7.0.23兩個版本。
首先講講tomcat需要配置的文件,假設Tomcat 7.0.16為服務器A,Tomcat 7.0.23為服務器B。注意如果你的Tomcat都是放在同一臺機子上,那你要修改端口,確保端口不要沖突。
服務器A的server.xml配置文件中的Engine節點中新增jvmRoute屬性,值可以自己定義,例如jvm1,同時新增Cluster節點的所有內容,如果tomcat是在同一臺機子的就需要注意Receiver節點的port屬性不能沖突,例如:4000
服務器A的server.xml配置文件
服務器B的server.xml配置文件,其中不同的是8180、8109和4001的幾個端口的修改和jvmRoute值的不同,其它都一樣
tomcat配置好了,為了session復制,我們還需要在應用的web.xml文件中添加<distributeable/>這個一個配置,那接下來我們就來講講apache的配置,需要修改apache的httpd.conf文件,將去掉一下這些的注釋,使其生效
在http.conf的最后面新增以下配置,使apache可以反向代理和負載均衡,注意這里的端口是tomcat的端口,同時route是剛才配置的jvmRoute的值,不能配錯
下面是httpd-vhosts.conf文件的配置,其它就不多講了,"ProxyPass /google !"是可以配置/google地址不反向代理,那么輸入地址/google就會在你apahce的根目錄里面找,"/baidu" 是配置了方向代理到百度,以上這兩個配置主要是看個人需求,主要是想說明怎么配置方向代理,而"ProxyPass / balancer://loadbalancer/ stickysession=jsessionid nofailover=On" 這兩句才是重點,主要是配置“/”都反向代理到tomcat,并且是負載均衡的模式
好了這就完成了,然后就可以打開你的apache的地址了,你不停的刷新頁面,會被負載分配到兩個tomcat服務其上面其,同時會話是相同的。
下面就來講講是搭建集群的過程,首頁需要下載apahce和tomcat(當然需要安裝jdk,這就不多講了,大家應該懂得),本次實踐我是在windows系統的環境下進行的,apache是2.2.21版本,tomcat是7.0.16和7.0.23兩個版本。
首先講講tomcat需要配置的文件,假設Tomcat 7.0.16為服務器A,Tomcat 7.0.23為服務器B。注意如果你的Tomcat都是放在同一臺機子上,那你要修改端口,確保端口不要沖突。
服務器A的server.xml配置文件中的Engine節點中新增jvmRoute屬性,值可以自己定義,例如jvm1,同時新增Cluster節點的所有內容,如果tomcat是在同一臺機子的就需要注意Receiver節點的port屬性不能沖突,例如:4000
服務器A的server.xml配置文件
Xml代碼
- <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
- <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
- <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" hannelSendOptions="8">
- <Manager className="org.apache.catalina.ha.session.DeltaManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true" />
- <Channel className="org.apache.catalina.tribes.group.GroupChannel">
- <Membership className="org.apache.catalina.tribes.membership.McastService" address="228.0.0.4" port="45564" frequency="500" dropTime="3000"/>
- <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="auto"
- port="4000"
- autoBind="100"
- selectorTimeout="5000"
- maxThreads="6" />
- <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
- <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
- </Sender>
- <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
- <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
- <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
- filter=""/>
- <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
- <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
- tempDir="/tmp/war-temp/"
- deployDir="/tmp/war-deploy/"
- watchDir="/tmp/war-listen/"
- watchEnabled="false"/>
- <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
- <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
- </Channel>
- </Cluster>
- ......
- </Engine>
服務器B的server.xml配置文件,其中不同的是8180、8109和4001的幾個端口的修改和jvmRoute值的不同,其它都一樣
Xml代碼
- <Connector port="8180" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
- <Connector port="8109" protocol="AJP/1.3" redirectPort="8443" />
- <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm2">
- <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" hannelSendOptions="8">
- <Manager className="org.apache.catalina.ha.session.DeltaManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true" />
- <Channel className="org.apache.catalina.tribes.group.GroupChannel">
- <Membership className="org.apache.catalina.tribes.membership.McastService" address="228.0.0.4" port="45564" frequency="500" dropTime="3000"/>
- <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="auto"
- port="4001"
- autoBind="100"
- selectorTimeout="5000"
- maxThreads="6" />
- <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
- <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
- </Sender>
- <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
- <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
- <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
- filter=""/>
- <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
- <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
- tempDir="/tmp/war-temp/"
- deployDir="/tmp/war-deploy/"
- watchDir="/tmp/war-listen/"
- watchEnabled="false"/>
- <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
- <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
- </Channel>
- </Cluster>
- ......
- </Engine>
tomcat配置好了,為了session復制,我們還需要在應用的web.xml文件中添加<distributeable/>這個一個配置,那接下來我們就來講講apache的配置,需要修改apache的httpd.conf文件,將去掉一下這些的注釋,使其生效
Xml代碼
- Include conf/extra/httpd-vhosts.conf
- LoadModule negotiation_module modules/mod_negotiation.so
- 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
在http.conf的最后面新增以下配置,使apache可以反向代理和負載均衡,注意這里的端口是tomcat的端口,同時route是剛才配置的jvmRoute的值,不能配錯
Xml代碼
- ProxyRequests Off
- <proxy balancer://loadbalancer>
- BalancerMember http://127.0.0.1:8080 loadfactor=1 route=jvm1
- BalancerMember http://127.0.0.1:8180 loadfactor=1 route=jvm2
- </proxy>
下面是httpd-vhosts.conf文件的配置,其它就不多講了,"ProxyPass /google !"是可以配置/google地址不反向代理,那么輸入地址/google就會在你apahce的根目錄里面找,"/baidu" 是配置了方向代理到百度,以上這兩個配置主要是看個人需求,主要是想說明怎么配置方向代理,而"ProxyPass / balancer://loadbalancer/ stickysession=jsessionid nofailover=On" 這兩句才是重點,主要是配置“/”都反向代理到tomcat,并且是負載均衡的模式
Xml代碼
- <VirtualHost *:80>
- ServerAdmin webmaster@dummy-host.xiaoyang.com
- DocumentRoot "D:/Program Files/Apache Software Foundation/Apache2.2/docs/dummy-host.xiaoyang.com"
- ServerName dummy-host.xiaoyang.com
- ServerAlias www.dummy-host.xiaoyang.com
- ErrorLog "logs/dummy-host.xiaoyang.com-error.log"
- CustomLog "logs/dummy-host.xiaoyang.com-access.log" common
- ProxyPass /google !
- ProxyPass /baidu http://www.baidu.com
- ProxyPassReverse /baidu http://www.baidu.com
- ProxyPass / balancer://loadbalancer/ stickysession=jsessionid nofailover=On
- ProxyPassReverse / balancer://loadbalancer/
- </VirtualHost>
好了這就完成了,然后就可以打開你的apache的地址了,你不停的刷新頁面,會被負載分配到兩個tomcat服務其上面其,同時會話是相同的。
posted on 2011-12-26 22:07 AthrunWang 閱讀(316) 評論(0) 編輯 收藏