上文中主要介紹了tomcat的集群方式,下邊再來說下apache的反向代理。反向代理可以這樣來理解,我們通常認為的代理(正向代理)是局域網內部機器本身不能上網,網關可以上網,大家在局域網內是通過網關上網的,這個網關就是個代理機器。反向代理意思就反了過來,現在網關並不是給內部局域網做代理的,而是給外部請求內部局域網做代理的,例如,當前一個應用系統在局域網內的A機器上,外部網絡不能直接訪問A機器,而是通過網關訪問到了A,這裡網關就是個反向代理了。
總結:正向代理---為在防火牆內的局域網客戶端提供Internet的途徑,反向代理---將防火牆後面的服務器提供給Internet用戶訪問。
大家常說的Apache負載均衡就是利用了Apache的反向代理,再加上負載均衡策略實現的。下邊說下apache如何做負載均衡。
在Apache2.2x版本後已經加入了mod_proxy(反向代理)模塊,只是默認沒有啟用而已,下邊打開自己機器上Apache目錄下的httpd.conf文件,去掉mod_proxy模塊前的注釋:
#加載mod_proxy 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這樣即打開了Apache的mod_proxy模塊
在httpd.conf的最後加上如下配置:
ServerAdmin [email]****.com[/email] ServerName localhost ServerAlias localhost ProxyPass / balancer://cluster/ stickysession=JSESSIONID nofailover=Off ProxyPassReverse / balancer://cluster/ ErrorLog "logs/error.log" CustomLog "logs/access.log" common
ProxyPass / balancer://cluster/代表所有的請求都會重定向到balancer://cluster/處理。balancer是內置負載。cluster為下邊配置中的負載名稱(名字隨意但上下要保持一致)
ProxyPassReverse / balancer://cluster/是反向代理,也就是將所有的請求反向代理到負載均衡後的應用url路徑中。
stickysession=JSESSIONID nofailover=Off是做Session復制用的。(粘性session)繼續在httpd.conf文件尾處增加如下配置:
ProxyRequests Off其中ProxyRequests Off為關閉正向代理,因為正向代理允許客戶端通過它訪問任意網站並且隱藏客戶端自身,因此你必須采取安全措施以確保僅為經過授權的客戶端提供服務。這裡用Apache的反向代理,所以先把正向代理給關了。BalancerMember ajp://127.0.0.1:18009 loadfactor=1 route=tomcat7_node1 BalancerMember ajp://127.0.0.1:28009 loadfactor=1 route=tomcat7_node2 # status=+H為配置熱備,當所有機器都over時,才會請求該機器 #BalancerMember http://192.168.1.218:8009 status=+H #按照請求次數均衡(默認) #ProxySet lbmethod=byrequests #按照權重 #ProxySet lbmethod=bytraffic #按負載量,也就是往負載少的派發新請求 #ProxySet lbmethod=bybusyness ProxySet lbmethod=bybusyness
BalancerMember ajp://127.0.0.1:18009 loadfactor=1 route=tomcat7_node1為負載的成員都有哪些(將外部請求轉發到哪些集群成員上),18009為tomcat的ajp端口,注意在同一機器上兩個tomcat的端口不要一致。
route為路由標識,為上文tomcat中的jvmRoute,注意要跟上文中的tomcat中的名字保持一致
ProxySetlbmethod即是負載均衡算法策略。此處使用的是按照負載量,吞吐量少Node的之後可要小心喽,分配到你的任務可就多了。而byrequests策略更偏重的是次數。
Apache的負載均衡配置已結束,下邊就開始測試吧,測試前需要注意一點,如果需要將tomat中的web項目作為默認項目啟動(即輸入http://localhost:8080即可訪問到該項目)時,需要也將apache的負載均衡配置中的
BalancerMember ajp://127.0.0.1:18009 loadfactor=1 route=tomcat7_node1
端口號後也不用加項目名稱。如果是非作為tomcat的默認項目,則需要改Apache的配置為ajp://127.0.0.1:18009/WebProject(即加上項目名稱),總之就是tomcat和apache的項目路徑保存一致即可,否則session信息將無法共享。
1、啟動Apache、2個tomcat(不分先後啟動,只有都啟來即可)
2、訪問本機的http://localhost(或者http://localhost/WebProject,根據自己的項目路徑)
3、可以看到apache將請求轉發到不同的用用服務器上