nginx學習1.5 nginx負載均衡配置

環境:

centos6/7,nginx-1.9.15.

摘要說明:

上一篇主要講述nginx下的一些常用語法;

本章節主要講述nginx的三種負載均衡策略及其相關配置:

步驟:

1.upstream

首先我們看一個負載均衡upstream的配置示例:

upstream backend  {
  server backend1.example.com weight=5;
  server backend2.example.com:8080;
  server unix:/tmp/backend3;
}
 
server {
  location / {
    proxy_pass  http://backend;
  }
}

從上面我們可以看到:

  1. upstream是獨立於server的一個配置
  2. upstream下包含多個server
  3. upstream可搭配proxy_pass使用

總結,請求到達server,匹配到location,後調用upstream,按照一定規則選擇其中一臺sever進行反向代理;

接下來我們看下upstream和server的主要語法:

upstream

語法:upstream name { ... } 
默認值:none 
使用字段:http 
說明:upstream主要用於設置一羣服務器,可以將upstream放在proxy_pass和fastcgi_pass指令中作爲一個單獨的實體,upstream可以是監聽不同端口的服務器,並且也可以是同時監聽TCP和Unix socket的服務器。
服務器可以指定不同的權重,默認爲1。

server

語法:server name [parameters] 
默認值:none 
使用字段:upstream 
說明:指定後端服務器的名稱和一些參數,可以使用域名,IP,端口,或者unix socket。如果指定爲域名,則首先將其解析爲IP。此外還有下需配置參數

  • ·weight = NUMBER - 設置服務器權重,默認爲1。
  • ·max_fails = NUMBER - 在一定時間內(這個時間在fail_timeout參數中設置)檢查這個服務器是否可用時產生的最多失敗請求數,默認爲1,將其設置爲0可以關閉檢查,這些錯誤在proxy_next_upstream或fastcgi_next_upstream(404錯誤不會使max_fails增加)中定義。
  • ·fail_timeout = TIME - 在這個時間內產生了max_fails所設置大小的失敗嘗試連接請求後這個服務器可能不可用,同樣它指定了服務器不可用的時間(在下一次嘗試連接請求發起之前),默認爲10秒,fail_timeout與前端響應時間沒有直接關係,不過可以使用proxy_connect_timeout和proxy_read_timeout來控制。
  • ·down - 標記服務器處於離線狀態,通常和ip_hash一起使用。
  • ·backup - (0.6.7或更高)如果所有的非備份服務器都宕機或繁忙,則使用本服務器(無法和ip_hash指令搭配使用)。

示例配置:

upstream  backend  {
  server   backend1.example.com    weight=5;
  server   127.0.0.1:8080          max_fails=3  fail_timeout=30s;
  server   unix:/tmp/backend3;
}

注意:如果你只使用一臺上游服務器,nginx將設置一個內置變量爲1,即max_fails和fail_timeout參數不會被處理。如果nginx不能連接到上游,請求將丟失。所以upstream一般使用多臺上游服務器。

2.upstream默認負載策略——輪詢

輪詢:按照訪問時間先後,按照順序訪問不同的後端服務器

	#默認負載策略---輪詢,會依次將請求分發到三臺server上
	upstream  backend  {
        server   127.0.0.1:8080;
        server   127.0.0.1:8888;
        server   127.0.0.1:9999;
    }
	server {
        listen       2009;
        server_name  localhost;
        location  / {
          proxy_pass http://backend;
        }
        error_page   500 502 503 504  /50x.html;
        location  /50x.html {
            root   html;
        }
    }

這裏需要注意的是upstream中若有服務掛了,upstream就會將請求進行順延,並不會丟失請求,直到服務正常;

3.upstream負載策略——權重

權重的本質還是輪詢,只是在輪詢的同時給每個server加上了輪詢機率;

權重配置的越大,輪詢機率越大,成正比,默認權重爲1;常用於不用配置服務器配置不同權重;

	#負載策略---權重,會根據權重將請求按機率分發到後端服務器,權重越高,機率越大,默認權重爲1;若後端服務器掛了則不參與負載
	upstream  backend2010  {
        server   127.0.0.1:8080 weight=3;
        server   127.0.0.1:8888 weight=2;
        server   127.0.0.1:9999;
    }
	server {
        listen       2010;
        server_name  localhost;
        location  / {
          proxy_pass http://backend2010;
        }
        error_page   500 502 503 504  /50x.html;
        location  /50x.html {
            root   html;
        }
    }

上述配置,若服務都正常,訪問6次,會訪問8080端口3次,8888端口2次,9999端口1次

:需要注意的下,同一個nginx下,upstream的名稱需要保持唯一

4.upstream負載策略——ip哈希

ip_hash

語法:ip_hash 
默認值:none 
使用字段:upstream 
ip_hash 指令將基於客戶端連接的IP地址來分發請求。
哈希的關鍵字是客戶端的C類網絡地址,這個功能將保證這個客戶端請求總是被轉發到一臺服務器上,但是如果這臺服務器不可用,那麼請求將轉發到另外的服務器上,這將保證某個客戶端有很大概率總是連接到一臺服務器。
無法將權重(weight)與ip_hash聯合使用來分發連接。如果有某臺服務器不可用,你必須標記其爲“down”;

	#負載策略-ip_hash;根據客戶端ip固定客戶端請求的後端服務器
	upstream  backend2011  {
	    ip_hash;
        server   127.0.0.1:8080;
        server   127.0.0.1:8888;
        server   127.0.0.1:9999 down;
    }
	server {
        listen       2011;
        server_name  localhost;
        location  / {
          proxy_pass http://backend2011;
        }
        error_page   500 502 503 504  /50x.html;
        location  /50x.html {
            root   html;
        }
    }

ip_hash主要用於解決session問題,後端服務器若不想做session共享可採用此種策略

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章