說到負載均衡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