2017年04月04日 13:10:03 阿里-橙鷹-潘民蘭 閱讀數:15409 標籤: nginxupstream集羣 負載均衡 更多html
我的分類: nginxnginx
ngx_http_upstream_module
模塊是用來定義被proxy_pass,fastcgi_pass,uwsgi_pass,scgi_pass, and memcached_pass 指令引用的服務器組。算法
實例配置緩存
upstream backend {
服務器
server backend1.example.com weight=5;
併發
server backend2.example.com:8080;
app
server unix:/tmp/backend3;
負載均衡
server backup1.example.com:8080 backup;
dom
server backup2.example.com:8080 backup;
socket
}
server {
location / {
proxy_pass http://backend;
}
}
動態可配置組的按期健康檢查能夠做爲咱們商業訂閱的一部分:
resolver 10.0.0.1;
upstream dynamic {
zone upstream_dynamic 64k;
server backend1.example.com weight=5;
server backend2.example.com:8080 fail_timeout=5s slow_start=30s;
server 192.0.2.1 max_fails=3;
server backend3.example.com resolve;
server backend4.example.com service=http resolve;
server backup1.example.com:8080 backup;
server backup2.example.com:8080 backup;
}
server {
location / {
proxy_pass http://dynamic;
health_check;
}
}
指令集
Syntax:
upstream name { ... }
Default:
—
Context:
http
定義一組服務。服務能夠監聽在不一樣端口, 另外, 服務混合監聽在 TCP and UNIX-domain sockets。
例如:
upstream backend {
server backend1.example.com weight=5;
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
server unix:/tmp/backend3;
server backup1.example.com backup;
}
一般, 請求被服務之間經過加權循環均衡負載方法分發。在上面的例子中, 每七次請求將被以下分發:5 次請求去 backend1.example.com
而後第二和第三個服務分別得到一次。當和一個服務通訊失敗時, 請求將被傳遞給另外一個服務,若是仍是不行的話 會一直傳遞到全部的服務器,若是全部的服務都不不能成功處理該請求,客戶端將接受到最後一個服務器的響應。
Syntax:
server address [parameters];
Default:
—
Context: upstream
定義一個服務的地址和其餘參數, 該地址能夠被定義爲一個 域名或者IP地址,做爲一個可選的端口, 或者是一個被"unixt:"前綴修飾的UNIX_domain socket 路徑, 若是一個端口沒有定義, 則使用80端口. 一個域名若是對應多個Ip地址,則同時定義多個服務地址。.
能夠定義一下參數
weight=number
設置定義的服務的權重,默認爲1。
max_conns=number
限制鏈接到代理服務器的併發鏈接數,版本(1.11.5). 默認值是0,意思是沒有限制. 若是集羣沒有使用 共享內存, 則該限制對應的是每一個工做進程。.
若是idle keepalive 鏈接,多workers, 和 shared memory是可以使用的 , 那麼代理服務器的激活的和閒置的鏈接將超過max_conns的值。
版本1.5.9 到 1.11.5, max_conns是可用的做爲咱們商業訂閱的一部分。
max_fails=number
設置在被fail_timeout參數定義的時間內當和服務通訊失敗嘗試的次數。默認的該值被設爲1.若是爲0表示不支持失敗重試,什麼被看成是不成功的嘗試被這些指令定義:proxy_next_upstream,fastcgi_next_upstream, uwsgi_next_upstream, scgi_next_upstream, 和 memcached_next_upstream .
fail_timeout=time
默認狀況下, 該參數被設置成10秒.
backup
標記該服務是一個熱備服務. 當主服務不可用後纔會把請求傳遞給它。
down
標記該服務永久不可用。
另外,下面參數是作爲咱們商業訂閱的一部分:
resolve
監控綁定到一個服務的域名的ip地址的變化,而後自動修改upstream配置不須要重啓nginx(1.5.12).服務集羣必須使用共享內存。
爲了讓該參數生效,resolver指令必須定義在http 模塊,如:
http {
resolver 10.0.0.1;
upstream u {
zone ...;
...
server example.com resolve;
}
}
route=string
設置服務路由的名稱
service=name
啓用DNS SRV記錄解析和設置服務的名稱(1.9.13).爲了讓該參數生效,須要定義resolve參數和指定一個不須要端口的hostname.
若是該服務名稱不包含(".")號,那麼RFC-compliant名稱將被構造以及TCP協議被添加到服務的前綴。例如,去查找_http._tcp.backend.example.com SRV記錄,是有必要定義該指令:
server backend.example.com service=http resolve;
若是該服務名稱包含一個或者多個點號, 那麼該服務名稱將經過結合服務前綴和服務名稱構造。例如。
server backend.example.com service=_http._tcp resolve;
server example.com service=server1.backend resolve;
最高優先級SRV記錄(一樣最低數字的優先級值)將被看成主服務解析,剩下的SRV記錄被看成備份服務。若是backup參數在有定義在該服務商,高優先級SRV 記錄將被看成備份服務,剩下的SRV記錄被忽略。
slow_start=time
設置服務從權重0到正常值的一個時間期限,當不健康的服務變成健康的,或者當服務從不可用到可用,默認值是0,意思slow start不可用。
該參數不能和hash 以及ip_hash 負載均衡方法一塊兒使用。
若是在集羣中只有一個服務 max_fails
, fail_timeout
and slow_start
參數將被忽略,而後這樣的服務將被永久看成可用。
Syntax:
zone name [size];
Default:
—
Context:
upstream
This directive appeared in version 1.9.0.
定義集羣的配置和工做進程共享運行時狀態的共享內存區域的name 和size ,幾個集羣會共享一樣的區域,因此能夠定義zone的大小一次就可。
另外,做爲咱們商業訂閱的一部分,集羣運行改變集羣成員和修改一些服務的配置不須要重啓nginx。那配置是能夠見的在指定的位置被upstream_conf管理。
Syntax:
state file;
Default:
—
Context:
upstream
This directive appeared in version 1.9.7.
制定一個文件保存動態可配置集羣的狀態。
例如:
state /var/lib/nginx/state/servers.conf; # path for Linux
state /var/db/nginx/state/servers.conf; # path for FreeBSD
集羣的狀態目前被限制在一系列的服務裏。當解析配置或者更新配置時該文件將被讀取。直接改變該文件的內容應該要避免,該指令不能和server指令一塊兒使用。
在configuration_reload或者binary_upgrade期間對該文件的修改將可能丟失修改。
這個指令是咱們商業訂閱的一部分。
Syntax: | hash |
---|---|
Default: | — |
Context: | upstream |
This directive appeared in version 1.7.2.
指定集羣負載均衡的方法基於hash key的值。key能夠保護文本,變量,和它們的組合。注意,從集羣添加或者刪除服務都會致使請求映射到其餘服務商。這個方法能夠和Cache::Memcached Perl 庫兼容。
若是consistent參數被定義,一致性哈希算法將被使用,該方法保證一小部分的請求被從新映射到其餘服務當集羣的服務添加或者刪除時,這幫助緩存服務器提升緩存命中率。IThe method is compatible with the Cache::Memcached::Fast Perl library with the ketama_points
parameter set to 160.
Syntax: ip_hash;
Default:
—
Context:
upstream
指定集羣服務應該根據客戶端ip來進行負載均衡。IPV4地址的前三個字節,或者整個IPV6的地址,將被看成哈希值。這個方法保證來自哦同一個客戶端的請求映射到同一個服務器上除掉該服務部可用。
IPV6地址將從1.3.2和1.2.2版本開始支持。
若是集羣中的一個服務被暫時的移除,該服務應用用 down參數定義,以防當前客戶的ip地址哈希映射過去。
例如:
Example:
upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com down;
server backend4.example.com;
}
直到版本.32和1.2.2,都不可以用過ip_hash進行負載均衡時指定權重。
Syntax:
keepalive connections;
Default:
—
Context:
upstream
This directive appeared in version 1.1.4.
激活鏈接到上游服務器的緩存。
connections參數設置鏈接到上游服務的最大空閒鏈接數--被保存在每一個工做進程的緩存裏。當鏈接數超過該connections時最近最少使用的鏈接將被關閉。
使用keepalive connections的上游服務的緩存配置實例:
upstream memcached_backend {
server 127.0.0.1:11211;
server 10.0.0.2:11211;
keepalive 32;
}
server {
...
location /memcached/ {
set $memcached_key $uri;
memcached_pass memcached_backend;
}
}
對於HTTP,proxy_http_version應該設置爲'1.1'而後"Connection"header 字段應該被清空:
upstream http_backend {
server 127.0.0.1:8080;
keepalive 16;
}
server {
...
location /http/ {
proxy_pass http://http_backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
...
}
}