athrunwang

          紀元
          數據加載中……
          主題: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配置文件 
          Xml代碼  收藏代碼
          1. <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />  
          2.   
          3. <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />  
          4.   
          5. <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">  
          6.   
          7. <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" hannelSendOptions="8">  
          8.         <Manager className="org.apache.catalina.ha.session.DeltaManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true" />  
          9.           
          10.         <Channel className="org.apache.catalina.tribes.group.GroupChannel">    
          11.              <Membership className="org.apache.catalina.tribes.membership.McastService" address="228.0.0.4" port="45564" frequency="500" dropTime="3000"/>    
          12.              <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="auto"    
          13.                        port="4000"  
          14.                        autoBind="100"  
          15.                        selectorTimeout="5000"  
          16.                        maxThreads="6" />  
          17.     
          18.              <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">  
          19.                <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>  
          20.              </Sender>  
          21.              <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>  
          22.              <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>  
          23.                
          24.              <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"  
          25.                   filter=""/>  
          26.            <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>  
          27.     
          28.            <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"  
          29.                      tempDir="/tmp/war-temp/"  
          30.                      deployDir="/tmp/war-deploy/"  
          31.                      watchDir="/tmp/war-listen/"  
          32.                      watchEnabled="false"/>  
          33.     
          34.            <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>  
          35.            <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>  
          36.            </Channel>  
          37.       </Cluster>  
          38. ......  
          39.   
          40. </Engine>  

          服務器B的server.xml配置文件,其中不同的是8180、8109和4001的幾個端口的修改和jvmRoute值的不同,其它都一樣 
          Xml代碼  收藏代碼
          1. <Connector port="8180" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />  
          2.   
          3. <Connector port="8109" protocol="AJP/1.3" redirectPort="8443" />  
          4.   
          5. <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm2">  
          6.   
          7. <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" hannelSendOptions="8">  
          8.         <Manager className="org.apache.catalina.ha.session.DeltaManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true" />  
          9.           
          10.         <Channel className="org.apache.catalina.tribes.group.GroupChannel">    
          11.              <Membership className="org.apache.catalina.tribes.membership.McastService" address="228.0.0.4" port="45564" frequency="500" dropTime="3000"/>    
          12.              <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="auto"    
          13.                        port="4001"  
          14.                        autoBind="100"  
          15.                        selectorTimeout="5000"  
          16.                        maxThreads="6" />  
          17.     
          18.              <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">  
          19.                <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>  
          20.              </Sender>  
          21.              <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>  
          22.              <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>  
          23.                
          24.              <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"  
          25.                   filter=""/>  
          26.            <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>  
          27.     
          28.            <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"  
          29.                      tempDir="/tmp/war-temp/"  
          30.                      deployDir="/tmp/war-deploy/"  
          31.                      watchDir="/tmp/war-listen/"  
          32.                      watchEnabled="false"/>  
          33.     
          34.            <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>  
          35.            <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>  
          36.            </Channel>  
          37.       </Cluster>  
          38. ......  
          39.   
          40. </Engine>  

          tomcat配置好了,為了session復制,我們還需要在應用的web.xml文件中添加<distributeable/>這個一個配置,那接下來我們就來講講apache的配置,需要修改apache的httpd.conf文件,將去掉一下這些的注釋,使其生效 
          Xml代碼  收藏代碼
          1. Include conf/extra/httpd-vhosts.conf  
          2.   
          3. LoadModule negotiation_module modules/mod_negotiation.so  
          4. LoadModule proxy_module modules/mod_proxy.so  
          5. LoadModule proxy_ajp_module modules/mod_proxy_ajp.so  
          6. LoadModule proxy_balancer_module modules/mod_proxy_balancer.so  
          7. LoadModule proxy_connect_module modules/mod_proxy_connect.so  
          8. LoadModule proxy_ftp_module modules/mod_proxy_ftp.so  
          9. LoadModule proxy_http_module modules/mod_proxy_http.so  

          在http.conf的最后面新增以下配置,使apache可以反向代理和負載均衡,注意這里的端口是tomcat的端口,同時route是剛才配置的jvmRoute的值,不能配錯 
          Xml代碼  收藏代碼
          1. ProxyRequests Off  
          2. <proxy balancer://loadbalancer>   
          3. BalancerMember http://127.0.0.1:8080 loadfactor=1 route=jvm1  
          4. BalancerMember http://127.0.0.1:8180 loadfactor=1 route=jvm2  
          5. </proxy>  

          下面是httpd-vhosts.conf文件的配置,其它就不多講了,"ProxyPass /google !"是可以配置/google地址不反向代理,那么輸入地址/google就會在你apahce的根目錄里面找,"/baidu" 是配置了方向代理到百度,以上這兩個配置主要是看個人需求,主要是想說明怎么配置方向代理,而"ProxyPass / balancer://loadbalancer/ stickysession=jsessionid nofailover=On" 這兩句才是重點,主要是配置“/”都反向代理到tomcat,并且是負載均衡的模式 
          Xml代碼  收藏代碼
          1. <VirtualHost *:80>  
          2.     ServerAdmin webmaster@dummy-host.xiaoyang.com  
          3.     DocumentRoot "D:/Program Files/Apache Software Foundation/Apache2.2/docs/dummy-host.xiaoyang.com"  
          4.     ServerName dummy-host.xiaoyang.com  
          5.     ServerAlias www.dummy-host.xiaoyang.com  
          6.     ErrorLog "logs/dummy-host.xiaoyang.com-error.log"  
          7.     CustomLog "logs/dummy-host.xiaoyang.com-access.log" common  
          8.   
          9.         ProxyPass /google !  
          10.           
          11.         ProxyPass /baidu http://www.baidu.com  
          12.     ProxyPassReverse /baidu http://www.baidu.com  
          13.       
          14.     ProxyPass / balancer://loadbalancer/ stickysession=jsessionid nofailover=On  
          15.     ProxyPassReverse / balancer://loadbalancer/  
          16. </VirtualHost>  

          好了這就完成了,然后就可以打開你的apache的地址了,你不停的刷新頁面,會被負載分配到兩個tomcat服務其上面其,同時會話是相同的。 

          posted on 2011-12-26 22:07 AthrunWang 閱讀(316) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 工布江达县| 五河县| 屏东市| 蓬溪县| 丽江市| 永济市| 忻州市| 嘉祥县| 林西县| 海安县| 怀化市| 汨罗市| 黔西县| 西昌市| 津市市| 衡阳市| 横峰县| 庐江县| 禄劝| 玛纳斯县| 平乐县| 泗阳县| 达孜县| 湘乡市| 平安县| 抚远县| 襄垣县| 全州县| 二手房| 禹城市| 南木林县| 德钦县| 汽车| 德化县| 栾川县| 五华县| 永平县| 龙胜| 高陵县| 和静县| 泽库县|