1. 程式人生 > >nginx負載均衡算法

nginx負載均衡算法

不同的 style 分享圖片 backend str obi src 設置 ken

配置方式

NGINX配置負載均衡主要是在nginx.conf文件中裏upstream模塊

1、upstream模塊應放於nginx.conf配置的http{}標簽內
2、upstream模塊默認算法是wrr (權重輪詢 weighted round-robin)

分配算法

Nginx的upstream支持5種分配方式,下面將會詳細介紹,其中前三種為Nginx原生支持的分配方式,後兩種為第三方支持的分配方式。

1、輪詢

輪詢是upstream的默認分配方式,即每個請求按照時間順序輪流分配到不同的後端服務器,如果某個後端服務器down掉後,能自動剔除。

upstream backend {
    server 192.168.1.101:8888;
    server 192.168.1.102:8888;
    server 192.168.1.103:8888;
}

2、weight(權重比)

輪詢的加強版,即可以指定輪詢比率,weight和訪問幾率成正比,主要應用於後端服務器異質的場景下。

upstream backend {
    server 192.168.1.101 weight=1;
    server 192.168.1.102 weight=2;
    server 192.168.1.103 weight=3;
}

3、ip_hash

每個請求按照訪問ip(即Nginx的前置服務器或者客戶端IP)的hash結果分配,這樣每個訪客會固定訪問一個後端服務器,可以解決session一致問題。

upstream backend {
    ip_hash;
    server 192.168.1.101:7777;
    server 192.168.1.102:8888;
    server 192.168.1.103:9999;
}

註意:
1、當負載調度算法為ip_hash時,後端服務器在負載均衡調度中的狀態不能是weight和backup。
2、導致負載不均衡。

4、fair

fair顧名思義,公平地按照後端服務器的響應時間(rt)來分配請求,響應時間短即rt小的後端服務器優先分配請求。如果需要使用這種調度算法,必須下載Nginx的upstr_fair模塊。

upstream backend {
    server 192.168.1.101;
    server 192.168.1.102;
    server 192.168.1.103;
    fair;
}

5、url_hash,目前用consistent_hash替代url_hash

與ip_hash類似,但是按照訪問url的hash結果來分配請求,使得每個url定向到同一個後端服務器,主要應用於後端服務器為緩存時的場景下。

技術分享圖片
upstream backend {
    server 192.168.1.101;
    server 192.168.1.102;
    server 192.168.1.103;
    hash $request_uri;
    hash_method crc32;
}
技術分享圖片

其中,hash_method為使用的hash算法,需要註意的是:此時,server語句中不能加weight等參數。

提示:url_hash用途cache服務業務,memcached,squid,varnish。特點:每個rs都是不同的。

二、設備狀態

從上面實例不難看出upstream中server指令語法如下:server address [parameters]
參數說明:
server:關鍵字,必選。
address:主機名、域名、ip或unix socket,也可以指定端口號,必選。
parameters:可選參數,可選參數如下:
1.down:表示當前server已停用
2.backup:表示當前server是備用服務器,只有其它非backup後端服務器都掛掉了或者很忙才會分配到請求。
3.weight:表示當前server負載權重,權重越大被請求幾率越大。默認是1.
4.max_fails和fail_timeout一般會關聯使用,如果某臺server在fail_timeout時間內出現了max_fails次連接失敗,那麽Nginx會認為其已經掛掉了,從而在fail_timeout時間內不再去請求它,fail_timeout默認是10s,max_fails默認是1,即默認情況是只要發生錯誤就認為服務器掛掉了,如果將max_fails設置為0,則表示取消這項檢查。

舉例說明如下:

upstream backend {
    server    backend1.example.com weight=5;
    server    127.0.0.1:8080 max_fails=3 fail_timeout=30s;
    server    unix:/tmp/backend3;           
}

nginx負載均衡算法