1. 程式人生 > >Nginx深入詳解之upstream分配方式

Nginx深入詳解之upstream分配方式

    location /PlcmRmWeb {
            proxy_pass              http://rpum_provision_pool;


            proxy_set_header        Host $rpum_host;
            proxy_set_header        Connection "Keep-Alive";
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;


            proxy_http_version      1.1;
            proxy_buffering         off;
            proxy_request_buffering off;
        }



    ###########################################################################
    upstream rpum_console_web_pool {
        server localhost:10002;
    }

一、分配方式
        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;
}
4、fair        
        fair顧名思義,公平地按照後端伺服器的響應時間(rt)來分配請求,響應時間短即rt小的後端伺服器優先分配請求。
    upstream backend {
    server 192.168.1.101;
    server 192.168.1.102;
    server 192.168.1.103;
            fair;

}
5、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等引數。
        關於,如何在負載均衡中使用upstream請參看這裡

二、裝置狀態
        從上面例項不難看出upstream中server指令語法如下:
        server address [parameters]
        關鍵字server必選。
        address也必選,可以是主機名、域名、ip或unix socket,也可以指定埠號。
        parameters是可選引數,可以是如下引數:
        down:表示當前server已停用
        backup:表示當前server是備用伺服器,只有其它非backup後端伺服器都掛掉了或者很忙才會分配到請求。
        weight:表示當前server負載權重,權重越大被請求機率越大。預設是1.
        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;           
        }
        更多詳細資訊請參看這裡

http://blog.chinaunix.net/uid-664509-id-4082804.html