Apache實現反向代理負載均衡

說到負載均衡LVS這套技術,有很多種實現方法。

本文所說,主要就是利用apache服務器實現反向代理,實現負載均衡。


首先,傳統的正向代理如下圖所示,正如我們用的遊戲加速代理,大多的個人PC把請求發給正向代理服務器,代理服務器通常配置高端的帶寬,替我們請求相應的服務。


而負載均衡中的反向代理,通常意義上,是一個請求轉發的代理。類似一個收發室的管理人員,外來的很多郵件,傳到收發室,然後由管理員分配給不同的辦公室。通過這樣的操作,可以使每臺服務器避免過多的負載導致宕機。而轉發的這個過程,通常也有很多種不同的算法。下圖所示,就是一個反向代理的過程:


實現這樣一個架構,需要幾臺服務器,不論是linux 或者 windows都可以實現。

如果如圖所示,實現,則需要四臺服務器,1臺apache反向代理服務器,實現請求的轉發分配。3臺後臺的主服務器。

在apache代理服務器上面,如果安裝的centos系統,那麼自帶的httpd服務,就不用再安裝apache服務器了。它的apache服務器的配置文件在/etc/httpd/conf/httpd.conf文件中,可以通過vi命令打開。

1 確保需要的mod_proxy模塊均加載,主要的模塊如下:

mod_proxy.so
mod_proxy_ajp.so
mod_proxy_balancer.so
mod_proxy_connect.so
mod_proxy_ftp.so
mod_proxy_http.so

2 配置相關的代理設置,在httpd.conf文件末尾添加:

ProxyRequest off
<Proxy balancer://testcluster>
  BalancerMember http://192.168.0.1 route=jvm1
  BalancerMember http://192.168.0.2 route=jvm2
  BalancerMember http://192.168.0.3 route=jvm3
</Proxy>
Proxy /tt balancer://test/tt stickysession=JSESSIONID | jsessionid nofailover=On
ProxyPass Reverse /tt balancer://test/tt

3 在後面的主服務器1(例如JBOSS服務器)的/jboss/server/default/deploy/jboss-web.service/servers.xml

 <Engine name="jboss.web" defaultHost="localhost" jvmRoute="jvm1">
....

這樣一個負載均衡就大致 形成了。


其中可能有人考慮到,如果一個請求時登陸請求,而第二個請求時操作,結果第二個請求轉發到第二個服務器上面。那麼如何操作。這個不用擔心,apache反向代理有 session粘連這樣一個概念,它會把所有關於cookie的文件保存在apache服務器上面,其他的操作均會讀取這樣一個文件。


不同的負載分配方案

1 如果按照上面的配置方案:

ProxyRequest off
<Proxy balancer://testcluster>
  BalancerMember http://192.168.0.1:8080 route=jvm1
  BalancerMember http://192.168.0.2:8080 route=jvm2
  BalancerMember http://192.168.0.3:8080 route=jvm3
</Proxy>
Proxy /tt balancer://test/tt stickysession=JSESSIONID | jsessionid nofailover=On
ProxyPass Reverse /tt balancer://test/tt

apache服務器會按照請求,挨個轉發,第一個轉發給jvm1服務器。第二個請求轉發給jvm2服務器。第4個請求轉發給jvm1服務器等等


2 如果某臺服務器的性能要優於其他幾臺,那麼可以通過loadfactor參數實現負載的分配

ProxyRequest off
<Proxy balancer://testcluster>
  BalancerMember http://192.168.0.1:8080 route=jvm1 loadfactor=1
  BalancerMember http://192.168.0.2:8080 route=jvm2 loadfactor=2
  BalancerMember http://192.168.0.3:8080 route=jvm3 loadfactor=3
</Proxy>
Proxy /tt balancer://test/tt stickysession=JSESSIONID | jsessionid nofailover=On
ProxyPass Reverse /tt balancer://test/tt
這樣第一個請求發給jvm1,第二個和第三個發給jvm2,第四個到第六個發給jvm3






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章