Nginx運維之八 負載均衡
負載均衡
Nginx負載均衡是最常用的Nginx功能,Nginx負載均衡的思想在於通過特定的調度算法將流量分發到不同的應用服務器上面來解決單臺機器的併發壓力。
最簡單的案例
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com:8080;
server unix:/tmp/backend3;
server backup1.example.com:8080 backup;
server backup2.example.com:8080 backup;
}
server {
location ^~ /example/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For
proxy_pass http://backend;
}
}
upstream
Syntax: upstream name { … }
Default: —
Context: http
定義一組可以監聽不同端口服務器,也可以監聽TCP和UNIX域套接字的服務器。
server
Syntax: server address [parameters];
Default: —
Context: upstream
定義服務器的地址和其他參數。地址可以指定爲域名或IP地址、可選端口或在“unix:”前綴之後指定的UNIX域套接字路徑。如果未指定端口,則使用端口80。一個解析爲多個IP地址的域名等同定義多個服務器。
支持參數如下:
weight
Syntax: weight=number
設置server的權重,默認值1
max_conns
Syntax: max_conns=number
限制與代理服務器同時激活連接的最大數量(1.11.5)。默認值爲零,意味着沒有限制。如果服務器組不駐留在共享內存中,則每個工作進程的限制都有效。
如果啓用了空閒保持活動連接、多個工作者和共享內存,則到代理服務器的活動連接和空閒連接的總數可能超過max_conns值。
max_fails
Syntax: max_fails=number
失敗重連的次數,這些嘗試應在fail_timeout參數設置的持續時間內發生,以考慮服務器在fail_timeout參數設置的持續時間內不可用。默認情況下,嘗試失敗的次數設置爲1。零值禁用重試。
fail_timeout
Syntax: fail_timeout=time
max_fails次失敗後,暫停的時間。默認是10S。
backup
其它所有的非backup機器down或者忙的時候,請求backup機器。所以這臺機器壓力會最輕。
down
標記當前的server暫時不參與負載
負載均衡模式
輪詢(默認)
每個請求按時間順序逐一分配到不同的後端服務器,如果後端服務器down掉,能自動剔除。我們上面的案例使用的就是。
weight(權重)
指定輪詢機率,weight和訪問比率成正比,用於後端服務器性能不均的情況。
例如:
upstream bakend {
server 103.1.248.230:8080 weight=10;
server 104.25.253.107:8080 weight=10;
}
ip_hash
每個請求按訪問ip的hash結果分配,這樣每個同IP的訪問會固定訪問一個後端服務器,可以解決session的問題。
例如:
upstream bakend {
ip_hash;
server 103.1.248.230:8080;
server 104.25.253.107:8080;
}
fair(第三方)
按後端服務器的響應時間來分配請求,響應時間短的優先分配。
upstream backend {
server 103.1.248.230:8080;
server 104.25.253.107:8080;
fair;
}
url_hash(第三方)
按訪問url的hash結果來分配請求,使每個url定向到同一個後端服務器,後端服務器爲緩存時比較有效。
例:在upstream中加入hash語句,server語句中不能寫入weight等其他的參數,hash_method是使用的hash算法
upstream backend {
server 103.1.248.230:8080;
server 104.25.253.107:8080;
hash $request_uri;
hash_method crc32;
}