天天看點

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

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

by:授客  QQ:1033553122

測試環境

nginx-1.10.0

負載均衡原理

用戶端向反向代理發送請求,接着反向代理根據某種負載機制轉發請求至目标伺服器(這些伺服器都運作着相同的應用),并把獲得的内容傳回給用戶端,期中,代理請求可能根據配置被發往不同的伺服器。

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

負載均衡配置

測試案例:

如下,分别在兩台伺服器(192.168.1.103, 192.168.1.102)上部署了相同的應用,并通過8080端口通路網站,如下

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

同時在192.168.1.103上安裝了nginx反向代理,想通過192.168.1.103的80端口來實作對兩個站點的通路

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

編輯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 負載均衡原理簡介與負載均衡配置詳解
Nginx 負載均衡原理簡介與負載均衡配置詳解

說明:

負載均衡方法

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

  • round-robin —

    請求以循環、輪轉的方式分發到應用伺服器。

  • least-connected —

    下一個請求被配置設定到擁有最少活動連接配接數的伺服器

  • ip-hash —

    使用一個哈希函數,基于用戶端ip位址判斷下一個請求應該被分發到哪個伺服器。

預設的負載均衡配置

server srv1.example.com;

server srv2.example.com;

server srv3.example.com;

location / {

上例中,有3個應用執行個體分别運作在srv1-srv3。當不顯示指定負載均衡方法時,預設為round-robin。所有請求都被代理轉發至myapp1伺服器組,并根據負載均衡方法來分發請求。

最少連接配接負載均衡

另一個負載均衡原則為least-connected。當一些請求花費較長時間來完成時,least-connected更“公平”的控制應用程式執行個體上的負載。

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

配置示例:

least_conn;

會話持久性

注意,round-robin或least-connected負載均衡下,每個後續的用戶端可能被分發至不同伺服器,不保證相同用戶端的請求總是被發送到相同的伺服器。

如果有必要把用戶端綁定至特定伺服器,則可使用ip-hash負載均衡機制。

ip-hash機制下,用戶端ip位址被用作hash key來判斷用戶端請求應該發送到哪個伺服器,這種方法保證了來自相同用戶端的請求總是發送到相同伺服器(如果伺服器可用的話)

ip_hash;

負載均衡權重

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

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

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

  upstream myapp1

{

server srv1.example.com weight=3;

上例配置中,每發送至伺服器執行個體的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:

  • Load

    Balancing with NGINX and NGINX Plus

  • Balancing with NGINX and NGINX Plus part 2

參考連結:

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

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

作者:授客

QQ:1033553122

全國軟體測試QQ交流群:7156436

Git位址:https://gitee.com/ishouke

友情提示:限于時間倉促,文中可能存在錯誤,歡迎指正、評論!

作者五行缺錢,如果覺得文章對您有幫助,請掃描下邊的二維碼打賞作者,金額随意,您的支援将是我繼續創作的源動力,打賞後如有任何疑問,請聯系我!!!

           微信打賞                       

支付寶打賞                  全國軟體測試交流QQ群  

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

繼續閱讀