官术网_书友最值得收藏!

4.4.4 負載均衡策略

upstream機制提供了負載均衡的功能,可以將請求負載分擔到集群服務器的某個服務器上面。它的工作流程如下:

1)分析客戶端請求報文,構建發往上游服務器的請求報文;

2)調用ngx_http_upstream_init開始與上游服務器建立TCP連接;

3)發送在第一步中組建的請求報文;

4)接收來自上游服務器的響應頭并進行解析,之后往下游轉發;

5)接收來自上游服務器的相應體,并進行轉發。

注意

upstream機制允許開發人員自己設定相應的處理方式,來達到自己的目的。

upstream支持6種負載分配方式,前三種為Nginx原生支持的分配方式,后三種為第三方支持的分配方式。

1. Nginx輪詢

輪詢是upstream的默認分配方式,即每個請求按照時間順序輪流分配到不同的后端服務器,如果某個后端服務器宕掉后,則能自動將其剔除,剩下的繼續輪詢。Niginx輪詢實現如代碼清單4-7所示。

代碼清單4-7 Nginx輪詢

 upstream zachary.sh.cn {
    server 192.168.1.10:8081;
    server 192.168.1.11:8081;
}

Nginx輪詢代理示意如圖4-7所示。

080-1

圖4-7 Nginx/upstream輪詢代理圖

2. Nginx權重

權重是輪詢的加強版,即在輪詢的基礎上還可以指定輪詢比率,weight和訪問概率成正比,主要應用于應用服務器性能不均的情況。Nginx權重實現如代碼清單4-8所示,這里192.168.1.11的訪問比例是192.168.1.10的兩倍。

代碼清單4-8 Nginx權重

upstream zachary.sh.cn {
    server 192.168.1.10:8081 weight=1;
    server 192.168.1.11:8081 weight=2;
}

Nginx權重代理示意如圖4-8所示。

081-1

圖4-8 Nginx/upstream權重代理圖

3. Nginx ip_hash

ip_hash即每個請求會按照訪問IP的hash值分配,這樣同一客戶端連續的Web請求都會被分發到同一服務器進行處理,可以解決session的問題。如果服務器宕掉,則能自動將其剔除,如代碼清單4-9所示。

代碼清單4-9 Nginx ip_hash

upstream zachary.sh.cn {
    ip_hash
    server 192.168.1.10:8081;
    server 192.168.1.11:8081;
}

Nginx ip_hash的代理示意如圖4-9所示。

082-1

圖4-9 Nginx/upstream ip_hash代理圖

4. Nginx fair

fair即按后端服務器的響應時間來分配請求,響應時間短的優先分配,如代碼清單4-10所示。

代碼清單4-10 Nginx fair

upstream zachary.sh.cn {
    server 192.168.1.10:8081;
    server 192.168.1.11:8081;
    fair;
}

Nginx fair的代理示意如圖4-10所示。

082-2

圖4-10 Nginx/upstream fair代理圖

5. Nginx url_hash

url_hash與ip_hash類似,但是其按照訪問URL的hash結果來分配請求,使得每個URL定向到同一個后端服務器,主要應用于后端服務器為緩存時的場景中,如代碼清單4-11所示。

代碼清單4-11 Nginx url_hash

upstream zachary.sh.cn {
    server 192.168.1.10:8081;
    server 192.168.1.11:8081;
    hash $request_uri;
    hash_method crc32;
}

6. Nginx least_conn

least_conn把請求轉發給連接數較少的后端服務器,如代碼清單4-12所示。

代碼清單4-12 Nginx least_conn

upstream zachary.sh.cn {
    least_conn;    #把請求轉發給連接數較少的后端服務器
    server 192.168.1.10:8081;
    server 192.168.1.11:8081;
}

Nginx least_conn的代理示意如圖4-11所示。

083-1

圖4-11 Nginx/upstream ip_hash代理圖

主站蜘蛛池模板: 合川市| 松滋市| 龙海市| 确山县| 杭锦旗| 汝南县| 嵩明县| 泰顺县| 临夏县| 涪陵区| 南昌市| 兴山县| 淮阳县| 塔城市| 安国市| 蒲城县| 深泽县| 密山市| 正阳县| 象州县| 榕江县| 额敏县| 云林县| 沈阳市| 句容市| 临高县| 本溪市| 沙河市| 岗巴县| 开平市| 民权县| 深圳市| 宜兴市| 山东| 密云县| 思茅市| 茶陵县| 阳东县| 闸北区| 南川市| 平顺县|