1. 程式人生 > >nginx的負載均衡模塊詳解

nginx的負載均衡模塊詳解

結果 memcached ssi 調度算法 服務器 span pan 嘗試 get

反向代理與負載均衡的概念:

Nginx僅僅是作為nginx proxy反向代理使用,nginx其實是反向代理,只不過是有負載均衡的功能!

安裝Nginx負載均衡

官網Nginx模塊講解

模塊詳解

upstream模塊

upstream www { #upstream是關鍵字,必須要寫,後面的www是一個群組名字,自己起名
server 192.168.70.127:80 weight=1; # server固定關鍵字,後面可以接域名或者IP,如果不指定端口默認80.

#weight權重,數值越大被分配的請求越多,結尾有分號


server 192.168.70.126:80 weight=1 bakup;#bakcup相當於熱備

server 192.168.79.128:80 weight=1 max_fails=2 fail_timeout=20s;#max_fails嘗試連接後端主機失敗的次數,這個值配合 proxy_next_upstream、 fastcgi_next_upstream和memcached_next_upstream這三個參數來使用。根據需求配置,不要太大建議1-3次

fail_timeout=20s 失敗秒數,在達到max_fails嘗試連接失敗次數後,休息20秒,在次連接默認10秒,建議2-3秒

}

upstream模塊調度算法

調度算法一份分為兩類:

  第一類 靜態調度算法

        分配的時候,不需要考慮後端節點服務器的情況(rr, wrr, ip_hash調度算法)

第二類 動態調度算法

        根據自身的情況調度,根據後端節點狀態是否響應很快進行調度(least_conn,fair等)

靜態調度算法

  rr輪詢(默認調度算法)

按照客戶端請求順序把客戶端的請求逐一分配到不同後端節點服務器

wrr權重輪序

在rr輪詢算法的基礎上加上權重,權重值越大,別轉發的請求越多,可以根據服務器狀態進行指定權重值大小

ip_hash

每個請求按照客戶端IP的hash結果分配,新的請求到達時,先將客戶端IP通過哈希算法哈希出一個值,在隨後的的客戶端請求中,客戶IP的哈希值只要相同,就會被分配至同一臺服務器,該調度算法可以解決動態網頁的session共享問題,但是會導致請求分配不均

(在upstream裏配置,如果是ip_hash,不能有weight和bakcup)

        upstream www{

                      ip_hash:

                            server xxxx

                         }

動態調度算法

fair

fair算法會根據後端節點服務器的響應時間來分配請求,時間短的優先分配,必須下載nginx的相關模塊upstream_fair

  upstream www{

 fair;

  server xxx;

 server xxx;

}

least_conn

least_conn算法根據後端節點的連接數來決定分配情況,哪個機器連接數少就分發

url_hash算法(web cache)

和ip_hash類似,一般用於web緩存,根據訪問URL的hash結果來分配請求的,每個URL定向到同一個後端服務器,後端服務器為緩存服務器時效果明顯。

upstream www{

server xxxx

hash $request_uri;

hash_method crc32;

}

一致性hash算法

一致性hash算法一般用於代理後端業務為緩存服務(squid,memcached)的場景,通過將用戶請求的URI或指定字符串進行計算,然後調度到後端服務器上,此後任何用戶查找同一個RUI或者指定字符串都會被調度到這一臺服務器上,此後後端的每個節點緩存的內容都是不同的。

http{

  upstream www{

     consistent_hash $request_uri;

      server xxxx id=1001  weigh=3;

 }

}

http_proxy_module模塊

proxy_pass轉發代理

    location /name/ {

proxy_pass http://127.0.0.1/remote/;

}

相關參數

proxy_set_header 設置http請求header項傳給後端服務器節點,可實現讓代理後端服務器節點獲取訪問客戶端用戶真實IP地址       proxy_set_header Host $host;

client_body_buffer_size 用於指定客戶端請求主體緩沖區大小

proxy_connect_timeout 表示反向代理與後端節點服務器連接的超時時間

proxy_send_timeout 代理後端服務器的數據回傳時間,在規定時間之內服務器必須傳完所有數據,否則斷開

proxy_read_timeout 設置nginx從代理的後端服務器獲取信息時間,表示連接建立成功後,nginx等待後端服務器的響應時間

proxy_buffer_size   設置緩沖區大小,默認該緩沖區大小等於指令proxy_buffers設置大小

proxy_buffers 這是緩沖區的數量和大小,nginx從代理的後端服務器獲取響應信息

proxy_busy_bufers_size 用於設置系統很忙時可以使用的proxy_buffers大小,官方推薦proxy_buffer*2

proxy_temp_file_write_size 臨時緩存文件

nginx的負載均衡模塊詳解