Nginx 負載均衡原理簡介與負載均衡配置詳解

Nginx負載均衡原理簡介與負載均衡配置詳解html

 

by:授客  QQ1033553122nginx

 

測試環境

nginx-1.10.0web

負載均衡原理

客戶端向反向代理髮送請求,接着反向代理根據某種負載機制轉發請求至目標服務器(這些服務器都運行着相同的應用),並把得到的內容返回給客戶端,期中,代理請求可能根據配置被髮往不一樣的服務器。服務器

 

 


負載均衡配置

測試案例:app

 

以下,分別在兩臺服務器(192.168.1.103, 192.168.1.102)上部署了相同的應用,並經過8080端口訪問網站,以下負載均衡

 

http://192.168.1.xx:8080/webautotest/xxxxxxxide

 

同時在192.168.1.103上安裝了nginx反向代理,想經過192.168.1.10380端口來實現對兩個站點的訪問函數

 


 


 

 

編輯nginx配置文件(例中爲/usr/local/ngnix/conf/nginx.conf),找到http結點,以下,添加帶背景色部分的內容,測試

http {網站

    upstream myapp1 {

        server 192.168.1.103:8080;

        server 192.168.1.104:8080;

    }

    ……略

   server {

        listen 80;

        server_name  localhost;

 

        ……略

        location /webautotest/ {

            proxy_buffering off;

            proxy_pass http://myapp1;

        }

    }

}

 

從新加載配置文件

[root@localhost nginx-1.10.0]# /usr/local/ngnix/sbin/nginx -s reload

 

訪問測試url

以下,訪問相同的頁面,展現來自不一樣服務器的頁面

 

 


 



 

說明:

負載均衡方法

nginx提供瞭如下三種負載均衡機制、方法:

  • round-robin — 請求以循環、輪轉的方式分發到應用服務器。
  • least-connected — 下一個請求被分配到擁有最少活動鏈接數的服務器
  • ip-hash — 使用一個哈希函數,基於客戶端ip地址判斷下一個請求應該被分發到哪一個服務器。

 

默認的負載均衡配置

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。當不顯示指定負載均衡方法時,默認爲round-robin。全部請求都被代理轉發至myapp1服務器組,並根據負載均衡方法來分發請求。

 

最少鏈接負載均衡

另外一個負載均衡原則爲least-connected。當一些請求花費較長時間來完成時,least-connected更「公平」的控制應用程序實例上的負載。

 

配置了least-connected的負載均衡機制的狀況下,nginx會盡可能不讓負載繁忙的應用服務器上負載過多的請求,相反的,會把新的請求發送到比較不繁忙的服務器。

 

配置示例:

 

upstream myapp1 {

        least_conn;

        server srv1.example.com;

        server srv2.example.com;

        server srv3.example.com;

}

 

 

會話持久性

注意,round-robinleast-connected負載均衡下,每一個後續的客戶端可能被分發至不一樣服務器,不保證相同客戶端的請求老是被髮送到相同的服務器。

 

若是有必要把客戶端綁定至特定服務器,則可以使用ip-hash負載均衡機制。

 

ip-hash機制下,客戶端ip地址被用做hash key來判斷客戶端請求應該發送到哪一個服務器,這種方法保證了來自相同客戶端的請求老是發送到相同服務器(若是服務器可用的話)

 

upstream myapp1 {

    ip_hash;

    server srv1.example.com;

    server srv2.example.com;

    server srv3.example.com;

}

 

負載均衡權重

可經過配置服務器權重來影響負載均衡機制。

 

上面的例子中,都未配置服務器權重,這意味着全部服務器都擁有相同的權重。

 

針對round-robin負載機制,權重意味着更多或更少的請求傳送至服務器---假設有足夠的請求,且按統一方式處理請求,且足夠快完成請求處理。

 

配置示例:

  upstream myapp1 {

        server srv1.example.com weight=3;

        server srv2.example.com;

        server srv3.example.com;

    }

 

上例配置中,每發送至服務器實例的5個新的請求中,有3個發送到srv1,1個發送到srv2,1個發送到srv3

 

注:當前版本彷佛只實現了round-robin機制下的權重設置

 

健康檢測

nginx反向代理實現包含服務器健康檢查。若是來自特定服務器的響應失敗,報錯,nginx將標記該服務器爲failed,一段時間內儘可能避免選擇此服務器做爲隨後請求的分發服務器。

 

max_fails機制設置fail_timeout期間,和服務器溝通失敗的連續重試次數,默認爲1.當設置爲0時,不作服務器健康檢測。fail_timeout定義了服務器被標記爲failed的時長。fail_timeout時間間隔事後,nginx將開始使用活動客戶端請求來探測服務器,若是探測成功則標記服務器爲活動服務器。

 

進一步閱讀

In addition, there are more directives and parameters that control server load balancing in nginx, e.g. proxy_next_upstream, backup, down, and keepalive. For more information please check our reference documentation.

Last but not least, application load balancing, application health checks, activity monitoring and on-the-fly reconfiguration of server groups are available as part of our paid NGINX Plus subscriptions.

The following articles describe load balancing with NGINX Plus in more detail:

 

參考連接:

http://nginx.org/en/docs/http/load_balancing.html

https://www.nginx.com/resources/admin-guide/?_ga=1.235398721.1182431122.1462539513

相關文章
相關標籤/搜索