1. 程式人生 > 實用技巧 >第四節:Nginx負載均衡配置、快取配置、效能調優

第四節:Nginx負載均衡配置、快取配置、效能調優

一. 負載均衡

1. 用法

 通過proxy_pass 可以把請求代理至後端服務,但是為了實現更高的負載及效能, 我們的後端服務通常是多個, 這個是時候可以通過upstream 模組實現負載均衡。

負載均衡的演算法有:

  • ll:輪詢
  • ll+weight:輪詢加權重

  • ip_hash:基於Hash 計算,用於保持session 一至性 該演算法下權重失效

  • url_hash:靜態資源快取,節約儲存,加快速度(第三方) 該演算法下權重配置失效

  • least_conn:最少連結(第三方)

  • least_time:最小的響應時間,計算節點平均響應時間,然後取響應最快的那個,分配更高權重(第三方)

2. 引數

upstream 相關引數如下:

  • server反向服務地址加埠

  • weight權重,預設是1,越大權重就越大

  • max_fails失敗多少次認為主機已掛掉則,踢出 (預設配置10s,即伺服器宕掉,會自動剔除)

  • fail_timeout踢出後重新探測時間

  • backup備用服務,當其他非backup的機器全部宕機或者繁忙的時候,才會啟動這臺機器。

  • down 表示當前Server不參與負載
  • max_conns允許最大連線數

  • slow_start當節點恢復,不立即加入,而是等待 slow_start 後加入服務對列。

3. 案例

事先準備:

  有三個同樣的api服務,分別部署在9001、9002、9003埠下,比如:訪問 http://localhost:9001/Home/GetMsg,會返回 【

獲取成功,當前埠為:9001】,其它埠類似。

要求:

 Nginx監聽8080埠,接收到8080埠的請求,按照響應的演算法進行轉發到9001-9003埠。 

(1). 輪詢

 訪問地址:http://localhost:8080/Home/GetMsg,會依次轉發到9001、9002、9003埠上。

配置如下:

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  
65; upstream myApiTest { server localhost:9001; server localhost:9002; server localhost:9003; } server { listen 8080; server_name xxx; #隨意配置一個即可,優先走代理地址 location / { proxy_pass http://myApiTest; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }

補充其他引數說明:

 下面配置,當請求http://localhost:8080/Home/GetMsg時候,只會被轉發到9003埠上,此時把9003埠的服務關掉,再次請求,則會被轉發到9001埠上,其中9002埠,全程不參與負載。

upstream myApiTest {
    server localhost:9001 backup;
    server localhost:9002 down;
    server localhost:9003;
}

(2).輪詢+權重

  下面配置,被轉發到9001 9002埠的概率要大於9003埠。

配置如下:

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    upstream myApiTest {
          server localhost:9001 weight=10;
          server localhost:9002 weight=5;
          server localhost:9003;
    }
    server {
        listen       8080;
        server_name   xxx;    #隨意配置一個即可,優先走代理地址
        location / {
            proxy_pass http://myApiTest;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

(3). ip_hash

 主要用來解決Session不一致的問題,但是該策略下,weight權重無效,所以該方案會導致某個Server壓力可能過大,請求分配不均勻問題。

(4). url_hash

二. 快取配置

三. 效能調優

!

  • 作者 : Yaopengfei(姚鵬飛)
  • 部落格地址 : http://www.cnblogs.com/yaopengfei/
  • 宣告1 : 如有錯誤,歡迎討論,請勿謾罵^_^。
  • 宣告2 : 原創部落格請在轉載時保留原文連結或在文章開頭加上本人部落格地址,否則保留追究法律責任的權利。