簡單實現web服務器負載均衡

jopen 12年前發布 | 35K 次閱讀 Web服務器

負載均衡建立在現有網絡結構之上,提供了一種有效方式擴展服務器的帶寬、增加吞吐量、加強網絡數據處理能力、提高網絡的靈活性和可用性。

本篇講述如何利用反向代理來實現web服務器負載均衡。

20130730134949593.png

以上負載均衡架構圖,優點是架構較簡單,缺點是沒有根據業務權重設計負載。

以上負載均衡是通過均衡服務器的實際承載,響應請求數量,傳輸數據流量,來實現負載均衡。

各負載服務器通過svn服務器實現同步,這樣他們也必須處理同步可能帶來的問題。

數據庫作讀寫分離,合理加上內存數據庫。

一、下面以apache為例,簡單說明負載均衡的實現。

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  

添加以下內容:

 
    Listen 192.168.1.30:80  
    <VirtualHost 192.168.1.30:80>  
        ProxyRequests Off  
        Proxypass / balancer://proxy/   
        <Proxy balancer://proxy>  
            ProxySet lbmethod=byrequests  
            Order Deny,Allow  
            Allow from all  
            BalancerMember http://192.168.1.31  
            BalancerMember http://192.168.1.32  
            BalancerMember http://192.168.1.33  
        </Proxy>  
    </VirtualHost>  

這里你還可以通過不同的算法實現負載均衡,比方說按照請求次數,或者按照流量均衡,這里用到的指令是lbmethod

lbmethod可能的取值有:
lbmethod=byrequests 按請求數均衡(默認值)
lbmethod=bytraffic 按流量均衡
lbmethod=bybusyness 按繁忙程度均衡

Apache還有其他策略,本篇就不多描述,當然你還可以使用nginx等等

 

二、服務器內容同步,可以利用svn來實現。

首先在一個服務器建立一個svn庫,用于存放最新的程序,具體步驟可以參考《windows 搭建本地svn服務器》。

以后每次更新都將最新的文件發布到svn庫中。

然后在負載服務器上更新即可。

因為每個負載服務器都是獨立開來的,這里需要注意幾個問題:

1、內容同步

主要是數據庫,還好大都數據庫有讀寫鎖機制。另外一個就是上傳的文件,如果是用戶上傳可以考慮放到一個公共的資源服務器。后臺文件可以考慮svn同步更新。

2、會話同步

因為是不同服務器,一般session都以文件或者內存形式保存在本地。考慮使用memcached來共享session。

下面以php為例:

 
    ;修改php設置文件:  
    session.save_handler = memcache  
    session.save_path = "tcp://192.168.1.33:11211"  

 

三、數據庫作讀寫分離,合理利用內存數據庫。

web服務器訪問的瓶頸的很大原因在于數據庫讀寫上,這時候可以除了做數據庫查詢優化,索引優化等,還可以考慮將數據庫讀寫分離,如果內容更新太快且保存的價值不大,或者內容長時間不更新,而且經常都要讀取等等,都可以考慮使用內存數據庫,如memcached。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!