apache 負載均衡配置

xz43發表於2013-10-09
Apache的反向代理和負載均衡其實利用的都是反向代理的原理,至於什麼叫做反向代理可以點此
關鍵需要載入下面三個模組
LoadModule proxy_module modules/mod_proxy.so   
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so   
LoadModule proxy_http_module modules/mod_proxy_http.so 
mod_proxy 提供代理伺服器功能,mod_proxy_balancer 提供負載均衡功能,mod_proxy_http 讓代理伺服器能支援HTTP協議。

開啟httpd.conf檔案,取消下面四行的註釋,用以開啟代理所需的.so支援模組(沒找到的則直接新增)。 
View Code 
#LoadModule proxy_http_module modules/mod_proxy_http.so 
#LoadModule proxy_connect_module modules/mod_proxy_connect.so 
#LoadModule proxy_module modules/mod_proxy.so 
#LoadModule proxy_module modules/mod_proxy_blancer.so 


將Apache作為LoadBalance前置機有三種不同的部署方式

1)輪詢均衡策略的配置

進入Apache的conf目錄,開啟httpd.conf檔案,在檔案的末尾加入:

ProxyPass / balancer://proxy/         #注意這裡以"/"結尾


       BalancerMember http://192.168.0.201:8080/

       BalancerMember http://192.168.0.202:8080/


我們來觀察上述的引數“ProxyPass / balancer://proxy/”,其中,“ProxyPass”是配置虛擬伺服器的命令,“/”代表傳送Web請求的URL字首,如:或者aaa,這些URL都將符合上述過濾條件;“balancer://proxy/”表示要配置負載均衡,proxy代表負載均衡名;BalancerMember 及其後面的URL表示要配置的後臺伺服器,其中URL為後臺伺服器請求時的URL。以上面的配置為例,實現負載均衡的原理如下:

假設Apache接收到請求,由於該請求滿足ProxyPass條件(其URL字首為“/”),該請求會被分發到後臺某一個BalancerMember,譬如,該請求可能會轉發到 http://192.168.0.201:8080/aaa進行處理。當第二個滿足條件的URL請求過來時,該請求可能會被分發到另外一臺BalancerMember,譬如,可能會轉發到http://192.168.0.202:8080/。如此迴圈反覆,便實現了負載均衡的機制。

2) 按權重分配均衡策略的配置

ProxyPass / balancer://proxy/         #注意這裡以"/"結尾


        BalancerMember http://192.168.0.201:8080/  loadfactor=3

        BalancerMember http://192.168.0.202:8080/  loadfactor=1


引數”loadfactor”表示後臺伺服器負載到由Apache傳送請求的權值,該值預設為1,可以將該值設定為1到100之間的任何值。以上面的配置為例,介紹如何實現按權重分配的負載均衡,現假設Apache收到aaa 4次這樣的請求,該請求分別被負載到後臺伺服器,則有3次連續的這樣請求被負載到BalancerMember為http://192.168.0.201:8080的伺服器,有1次這樣的請求被負載BalancerMember為http://192.168.0.202:8080後臺伺服器。實現了按照權重連續分配的均衡策略。

3) 權重請求響應負載均衡策略的配置

ProxyPass / balancer://proxy/ lbmethod=bytraffic  #注意這裡以"/"結尾


         BalancerMember http://192.168.0.201:8080/  loadfactor=3

         BalancerMember http://192.168.0.202:8080/  loadfactor=1

 

引數“lbmethod=bytraffic”表示後臺伺服器負載請求和響應的位元組數,處理位元組數的多少是以權值的方式來表示的。“loadfactor”表示後臺伺服器處理負載請求和響應位元組數的權值,該值預設為1,可以將該值設定在1到100的任何值。根據以上配置是這麼進行均衡負載的,假設Apache接收到aaa請求,將請求轉發給後臺伺服器,如果BalancerMember為http://192.168.0.201:8080後臺伺服器負載到這個請求,那麼它處理請求和響應的位元組數是BalancerMember為http://192.168.0.202:8080 伺服器的3倍(回想(2)均衡配置,(2)是以請求數作為權重負載均衡的,(3)是以流量為權重負載均衡的,這是最大的區別)。
引數“lbmethod”可以透過不同的賦值,設定不同的演算法實現負載均衡,比方說按照請求次數,或者按照流量均衡
lbmethod可能的取值有: 
lbmethod=byrequests 按照請求次數均衡(預設) 
lbmethod=bytraffic 按照流量均衡 
lbmethod=bybusyness 按照繁忙程度均衡(總是分配給活躍請求數最少的伺服器)

注:每次修改httpd.conf,用apachectl –k restart重新啟動Apache。

proxy、proxy_blancer和mod_jk的比較
proxy  缺點:當其中一臺tomcat停止執行的時候,apache仍然會轉發請求過去,導致502閘道器錯誤。但是隻要伺服器再啟動就不存在這個問題。
mod_jk 優點:Apache 會自動檢測到停止掉的tomcat,然後不再發請求過去。
       缺點:當停止掉的tomcat伺服器再次啟動的時候,Apache檢測不到,仍然不會轉發請求過去(驗證過,不會這樣)。
proxy和mod_jk 共同優點:可以只將Apache置於公網,節省公網IP地址資源。可以透過設定來實現Apache專門負責處理靜態網頁,讓Tomcat專門負責處理jsp和servlet等動態請求。
              共同缺點:如果前置Apache代理伺服器停止執行,所有叢集服務將無法對外提供。
proxy和mod_jk 對靜態頁面請求的處理,都可以通設定來選取一個儘可能最佳化的效果。
mod_proxy_balancer和mod_jk 都需要修改tomcat的配置檔案配合
這三種Tomcat叢集方式對實現最佳負載均衡都有一定不足,mod_proxy_balancer和mod_jk相對好些,mod_jk的設定能力更強些。lbfactor引數來分配請求任務。
apache自帶mod_proxy功能模組中目前只可以實現兩種不同的負載均衡叢集實現方式,第一種是分工合作的的形式,透過各臺主機負責不同的任務而實現任務分工。第二種是不同的機器在擔任同樣的任務,某臺機器出現故障主機可以自動檢測到將不會影響到客戶端,而第一種卻不能實現但第一種實現方式的優點在於他是主伺服器負擔相應沒第二種大,因為它只是提供跳轉指路功能,形象的說他不給你帶路只是告訴你有條路可以到,但到了那是否可以看到你見的人他已經不會去管你了。相比之下第二種效能要比第一種會好很多;但他們都有個共同點都是一託N形式來完成任務的所以你的主機效能一定要好。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9399028/viewspace-773993/,如需轉載,請註明出處,否則將追究法律責任。

相關文章