nginx負載均衡如何實現?

什麼是nginx?

Nginx("engine x")是一款是由俄羅斯的程序設計師Igor Sysoev所開發高性能的Web和反向代理服務器,也是一個 IMAP/POP3/SMTP 代理服務器。

在高連接併發的情況下,Nginx是Apache服務器不錯的替代品。

nginx服務器基本特徵

  • 處理靜態文件,索引文件以及自動索引;打開文件描述符緩衝
  • 無緩存的反向代理加速,簡單的負載均衡和容錯
  • FastCGI,簡單的負載均衡和容錯
  • 模塊化的結構。包括gzipping, byte ranges, chunked responses,以及 SSI-filter等filter。如果由FastCGI或 其它代理服務器處理單頁中存在的多個SSI,則這項處理可以並行運行,而不需要相互等待
  • 支持SSL 和 TLSSNI

nginx常用功能

1、Http代理,反向代理:作爲web服務器最常用的功能之一,尤其是反向代理。

Nginx在做反向代理時,提供性能穩定,並且能夠提供配置靈活的轉發功能。Nginx可以根據不同的正則匹配,採取不同的轉發策略,比如圖片文件結尾的走文件服務器,動態頁面走web服務器,只要你正則寫的沒問題,又有相對應的服務器解決方案,你就可以隨心所欲的玩。並且Nginx對返回結果進行錯誤頁跳轉,異常判斷等。如果被分發的服務器存在異常,他可以將請求重新轉發給另外一臺服務器,然後自動去除異常服務器。

2、負載均衡

Nginx的負載均衡是通過upstream實現的。

eg.

upstream test.aaa { 
    ip_hash;  ## 調度算法
    server 192.168.1.10:80; 
    server 192.168.1.11:80 down; 
    server 192.168.1.12:8009 max_fails=3 fail_timeout=20s; 
    server 192.168.1.13:8080; 
 } 
server { 
    listen       80;
    server_name  localhost;
    location / { 
    proxy_pass http://test.aaa; 
    } 
 } 

upstream 支持的負載均衡算法:

  • 輪詢(默認)

每個請求按時間順序逐一分配到不同的後端服務器,如果後端某臺服務器宕機,故障系統被自動剔除,使用戶訪問不受影響。

  • weight

指定輪詢機率,weight和訪問比率成正比,用於後端服務器性能不均的情況。

  • fair(第三方)

按後端服務器的響應時間來分配請求,響應時間短的優先分配。Nginx本身是不支持fair的,如果需要使用這種調度算法,必須下載Nginx的upstream_fair模塊。

  • url_hash(第三方)

按訪問URL的hash結果來分配請求,使每個URL定向到同一個後端服務器,後端服務器爲緩存時比較適用。另外,在upstream中加入hash語句後,server語句不能寫入weight等其他參數。Nginx本身是不支持url_hash的,如果需要使用這種調度算法,必須安裝Nginx 的hash軟件包。

upstream 支持的狀態參數

  • down,表示當前的server暫時不參與負載均衡。
  • backup,預留的備份機器。當其他所有的非backup機器出現故障或者忙的時候,纔會請求backup機器,因此這臺機器的壓力最輕。
  • max_fails,允許請求失敗的次數,默認爲1。當超過最大次數時,返回proxy_next_upstream 模塊定義的錯誤。
  • fail_timeout,在經歷了max_fails次失敗後,暫停服務的時間。max_fails可以和fail_timeout一起使用。

注,當負載調度算法爲ip_hash時,後端服務器在負載均衡調度中的狀態不能是weight和backup。

3、web緩存

Nginx可以對不同的文件做不同的緩存處理,配置靈活,並且支持FastCGI_Cache,主要用於對FastCGI的動態程序進行緩存。配合着第三方的ngx_cache_purge,對制定的URL緩存內容可以的進行增刪管理。


經典前端面試題每日更新,歡迎參與討論,地址:https://github.com/daily-interview/fe-interview


更多angular1/2/4/5、ionic1/2/3、react、vue、微信小程序、nodejs等技術文章、視頻教程和開源項目,請關注微信公衆號——全棧弄潮兒

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