說到負載均衡LVS這套技術,有不少種實現方法。html
本文所說,主要就是利用apache服務器實現反向代理,實現負載均衡。linux
首先,傳統的正向代理以下圖所示,正如咱們用的遊戲加速代理,大多的我的PC把請求發給正向代理服務器,代理服務器一般配置高端的帶寬,替咱們請求相應的服務。web
而負載均衡中的反向代理,一般意義上,是一個請求轉發的代理。相似一個收發室的管理人員,外來的不少郵件,傳到收發室,而後由管理員分配給不一樣的辦公室。經過這樣的操做,可使每臺服務器避免過多的負載致使宕機。而轉發的這個過程,一般也有不少種不一樣的算法。下圖所示,就是一個反向代理的過程:算法
實現這樣一個架構,須要幾臺服務器,不管是linux 或者 windows均可以實現。apache
若是如圖所示,實現,則須要四臺服務器,1臺apache反向代理服務器,實現請求的轉發分配。3臺後臺的主服務器。windows
在apache代理服務器上面,若是安裝的centos系統,那麼自帶的httpd服務,就不用再安裝apache服務器了。它的apache服務器的配置文件在/etc/httpd/conf/httpd.conf文件中,能夠經過vi命令打開。centos
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文件末尾添加:cookie
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中session
<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