簡述Nginx負載均衡

Nginx在作爲負載均衡器的同時也是反向代理服務器,其配置語法相當簡單,有輪詢、ip_hash、url_hash、權重等多種方法對後端的服務器做負載均衡,同時還支持後端服務器的健康檢查。另外,它相對於LVS來說比較有優勢的一點是,由於它是基於第七層即應用層的負載均衡,是根據包頭內的信息來執行負載均衡任務的,因此對網絡的依賴性很小,理論上能PING通就能夠實現負載均衡。在實際應用上不僅作爲一款性能優異的負載均衡器,同時也是一款適用於高併發環境的web應用軟件。

優點如下:
配置文件非常簡單,風格和程序一樣通俗易懂。
成本低廉。Nginx爲開源軟件,可以免費使用。
支持Rewrite 重寫規則:可以根據域名、URL的不同,將HTTP請求分配到不同的後端服務器羣組上。
有內置的健康檢查功能:即使後端某臺Web服務器宕機,也不影響前端訪問。
節省帶寬:支持GZIP壓縮,可以添加瀏覽器本地緩存的Header
穩定性高:用於反向代理,宕機的概率微乎其微。
缺點:
目前只支持HTTP和MAIL的負載均衡。

負載均衡算法:
1、輪詢(默認)
每個請求按時間順序逐一分配到不同的後端服務器,如果後端服務器宕機,則會跳過該服務器分配至下一個健康的服務器。並且它無須記錄當前所有連接的狀態,所以它是一種無狀態調度。
2、weight 權重
在輪詢的基礎上加上權重,weight和訪問率成正比,適用於後端服務器性能不一致的情況下。
3、ip_hash
每個請求按訪問IP的哈希結果進行分配,當新的請求到達時,先將客戶端IP通過hash算法進行計算得出一個值,隨後的請求客戶端IP的hash值只要相同,就會被分配到同一臺後端服務器上,該調度算法可以解決Session的問題,但會因爲分配不均導致無法保證負載均衡。
4、fair(第三方)
按後端服務器的響應時間來分配請求,響應時間短的優先分配。
5、url_hash(第三方)
按訪問URL的hash結果來分配請求,使每個URL定向到同一個後端服務器,後端服務器作爲緩存時比較有效。
6、Tengine增加的一致性哈希算法
將每個Server虛擬成N個節點,均勻分佈到哈希環上,每次請求時,根據配置的參數計算出一個hash值,在hash環上查找離這個hash值最近的虛擬節點,對應的Server作爲該次請求的後端服務器,好處在於動態增加服務器或者服務器宕機時對集羣的影響最小。

具體的實現:
1、輪詢rr:
upstream test {
    server IP1:PORT;
    server IP2:PORT;
            .............
    }
2、權重weight:
upstream test {
    server IP1:PORT  weight=A; 
    server IP2:PORT  weight=B;
            ..............
    }
3、ip_hash
upstream test {
    ip_hash;
    server IP1:PORT;
    server IP2:PORT;
            .............
   }
4、fair//需要在編譯安裝時添加模塊
upstream test {
    server IP1:PORT;
    server IP2:PORT;
            .............
     fair;
    }
5、url_hash//需要在編譯時添加模塊
upstream test {
    server IP1:PORT;
    server IP2:PORT;
            .............
    hash $request_url;
   }
Nginx的性能優勢:
作爲web服務器:Nginx處理靜態文件、索引文件以及自動索引效率非常高。
作爲代理服務器:Nginx可以實現快速高效的反向代理,提高網站性能。
作爲負載均衡服務器:Nginx既可以在內部直接支持Rails和PHP,也可以支持HTTP代理服務器,對外進行服務。同時支持簡單的容錯和利用算法進行負載均衡。
在性能方面:Nginx是專門爲性能優化而開發的,在實現上非常注重效率。它採用內核epoll模型,可以支持更多的併發連接,並在大併發時佔用很低的內存資源。
在穩定性方面:Nginx採用了分階段資源分配技術,使得對CPU與內存的佔用率非常低。
在高可用方面:Nginx支持熱部署,啓動速度迅速,因此可以在不間斷服務的情況下,對軟件版本或者配置進行升級,即使運行數月也無需重新啓動,幾乎可以做到7x24不間斷運行。

幾個優化Nginx的措施:

一、編譯安裝過程的優化
1、減小Nginx編譯後的文件大小
    找到在源碼目錄下的auto/cc/gcc,刪除#debug  CFLAGS="$CFLAGS -g
2、在編譯過程指定CPU類型
    --with-cc-opt='03' --with-cpu-opt=cpu
    cat /proc/cpuinfo |grep “module name”//獲得CPU的信息
二、利用谷歌開源工具TCMalloc進行優化
1、下載並編譯安裝libunwind、gperftools
2、配置gperftools
    echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf 
/sbin/ldconfig
3、重新編譯安裝Nginx並添加
    --with-google_perftools_module
4、添加gperftools線程目錄
    mkdir /tmp/tcmalloc 
    chmod  777 /tmp/tcmalloc -R
5、修改Nginx配置文件
    在#pid logs/nginx.pid;這行的下面添加
    google_perftools_profiles /tmp/tcmalloc;
6、重啓Nginx
7、測試:
    lsof -n | grep tcmalloc #測試tcmalloc
    lsof -n | grep nginx  #測試nginx
三、內核參數優化/etc/sysctl.conf內
    /sbin/sysctl -p //生效
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章