【翻譯】Nginx的HTTP負載均衡

本文爲翻譯文,原文地址:http://nginx.org/en/docs/http/load_balancing.htmlhtml

介紹

將請求負載均衡到多個應用實例是一個經常使用的技術,它起到優化資源使用率、最大化吞吐量、下降延遲、保證容錯性。nginx

Nginx是一個很是有效的HTTP負載均衡工具,它將請求分發到多個應用服務器,從而提高Web應用的性能、擴展性、可靠性。算法

負載均衡策略

Nginx支持如下負載均衡機制:服務器

  • 循環:請求循環地分發到多個應用實例
  • 最少鏈接:下一個請求分發到最少有效鏈接的應用實例
  • IP哈希:對用戶的IP做哈希計算,哈希結果用於決定將此請求分發到哪一個應用實例

默認負載均衡配置

最簡單的負載均衡配置以下:app

http {
    upstream myapp1 {
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://myapp1;
        }
    }
}

如上例所示,一樣的應用有3個實例分別運行在服務器srv1到srv3中。當沒有指定負載均衡方法,默認是循環。所有請求被代理到服務組myapp1,nginx用負載均衡去分發請求。負載均衡

Nginx的反向代理實現包括給HTTP、HTTPS、FastCGI、uwsgi、SCGI和memcached。memcached

爲HTTPS配置負載均衡,只需用https便可。工具

當爲FastCGI、uwsgi、SCGI、memcached配置負載均衡,分別使用fastcgi_pass、uwsgi_pass、scgi_pass、memcached_pass便可。性能

最少鏈接機制

另外一個負載均衡機制是最少鏈接。在一些請求需耗時較長的場景下,最少鏈接容許更公平地調控應用實例的負載。優化

當使用最少鏈接機制,nginx會經過將新請求分發給不忙的應用實例,使繁忙的應用實例不超載。

當在服務組中使用least_conn指令,nginx會激活最少鏈接機制。

upstream myapp1 {
        least_conn;
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
    }

粘性會話機制

咱們需注意一點,對於循環、最少鏈接機制,每一個客戶端的請求可能被分到在不一樣的服務器,不保證同一客戶端的請求會被分發到同一臺服務器中。

若是須要綁定一個客戶端的請求總被分發到同一個服務器,可使用IP哈希機制。

在IP哈希機制中,用客戶端的IP計算哈希結果,此結果用於決定應該將請求分發到服務組的哪一個服務器。此機制保證了來自同一客戶端的請求會被分發到同一服務器,除非那服務器是不可用的。

配置IP哈希機制,只需在服務組中使用ip_hash指令。

upstream myapp1 {
    ip_hash;
    server srv1.example.com;
    server srv2.example.com;
    server srv3.example.com;
}

權重機制

咱們能夠經過配置服務器的權重,去影響nginx負載均衡的算法。

在上面的例子中,沒有配置服務器的權重,在指定的負載均衡機制中意味着所有服務器均被視爲相同權重的。

尤爲在循環機制,它意味着將請求平均地分發到不一樣的服務器中。

當給服務器指定了權重,權重會被負載均衡機制歸入計算因素之一。

upstream myapp1 {
        server srv1.example.com weight=3;
        server srv2.example.com;
        server srv3.example.com;
    }

在這個配置中,每5個新請求分發到應用實例的請求以下:3個請求會被分發到srv1,一個請求到srv2,一個請求到srv3。

最新版本的nginx,一樣也可使用權限到最少鏈接機制和IP哈希機制中。

健康檢查

Nginx的反向代理實現包括服務器的健康檢查。若是一個服務器返回的響應是錯誤的,nginx會標記此服務器是不可用的,而且會避免將接下來一段時間的請求分發到此服務器。

用max_fails參數設置跟服務器通訊的連續失敗的次數。max_fails默認爲1,當設置爲0時,健康檢查對此服務器不可用。fail_timeout參數定義服務器會被標記爲不可用多長時間。在fail_timeout期間後,nginx會用客戶端的請求優雅地試探服務器,若是探針表示成功,服務器會被標記爲成功的。

更多閱讀

此外,有不少指令和參數用來控制服務器負載均衡,好比proxy_next_upstream、backup、down、keepalive。更多信息請查閱文檔。

最後但不是最不重要的,服務組的application_load_balancing、application_health_checks、activity_monitoring、onthe-fly_reconfiguration是可用的。

下列文檔詳細描述nginx Plus負載均衡:略

相關文章
相關標籤/搜索