標簽:
Nginx可以作為負載均衡服務(wù)器,定義一組服務(wù)器,nginx的反向代理多臺服務(wù)器時其實就是利用負載均衡模塊實現(xiàn)的。負載均衡模塊是ngx_http_upstream_module,通過此模塊定義多臺后端服務(wù)器,這些服務(wù)器通過指令proxy_pass、fastcgi_pass和memcached_pass引用。
配置例子
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/ {
proxy_pass http: //backend ;
}
}
ngx_http_upstream_module模塊常用的指令:
upstream name { …}
通過此命令定義一組服務(wù)器,這組服務(wù)器有一個名字是name,各個服務(wù)器可以監(jiān)聽不同的端口。監(jiān)聽在TCP和UNIX域套接字的服務(wù)器可以混用。
例子:
upstreambackend {
serverbackend1.example.com weight=5;
server127.0.0.1:8080 max_fails=3 fail_timeout=30s;
serverunix: /tmp/backend3 ;
}
默認情況下,nignx按加權(quán)輪巡的方式將請求分發(fā)到各服務(wù)器。當此負載均衡nginx和后端服務(wù)器通信時,如果出現(xiàn)錯誤,請求會被傳給下一臺服務(wù)器,直到所有可用的服務(wù)器都被嘗試過,如果所有服務(wù)器都返回失敗,客戶端將會得到最后通信的那臺服務(wù)器的失敗相應(yīng)結(jié)果。
Server address [parameters];
此命令用于指定被負載的后端服務(wù)器,每個server指定一臺服務(wù)器,可以指定指定多臺服務(wù)器,服務(wù)器地址可以是域名或IP地址,端口是可選的。
常用參數(shù):
weight=number
設(shè)定服務(wù)器權(quán)限,默認是1。
max_fails=number
設(shè)定nginx與后端服務(wù)器通信的嘗試失敗次數(shù)。在fail_timeout參數(shù)定義的時間段內(nèi),如果失敗次數(shù)達到此值,nginx就認為此服務(wù)器不可用,在下一個max_timeout時間段內(nèi),服務(wù)器不會在被嘗試。失敗的默認嘗試次數(shù)為1,0表示停止嘗試次數(shù),認為服務(wù)器一直可用。
fail_timeout=time
設(shè)定在此時間段內(nèi),服務(wù)器失敗次數(shù)達到指定的嘗試次數(shù),服務(wù)器就被認為在此時間段內(nèi)不可用。
backup
標記為備用服務(wù)器,當主服務(wù)器不可以用后,請求會轉(zhuǎn)給backup服務(wù)器。
down
標記服務(wù)器永久不可用。如果某一服務(wù)器宕機時,應(yīng)加上down參數(shù)。
ip_hash
在upstream中使用此參數(shù)。指定多臺服務(wù)器負載均衡算法,確保從同一客戶端過來的請求會被傳給同一臺服務(wù)器。當此服務(wù)器宕機后,同一客戶端請求會傳給其他可用的同一服務(wù)器。
Keepalive connections;
Connections參數(shù)設(shè)置每個worker進程和后端服務(wù)器保持連接的最大數(shù),這些保持的連接被放入緩存中。如果連接數(shù)大于此值,最久未使用的連接會被關(guān)閉。Keepalive不會限制nginx與上游服務(wù)器如memcached服務(wù)器的連接總數(shù),新的連接總會被創(chuàng)建。
配置memcached作為上游服務(wù)器連接keepalive的例子:
Upstreammemcached_backend {
Server127. 0.0 . 1 : 11211 ;
Server10. 0.0 . 2 : 11211 ;
Keepalive32;
}
Server{
…
Location/memcached/ {
Set$memcached_key $uri;
Memcached_passmemcached_backend;
}
}
配置fastcgi的服務(wù)器,設(shè)置fastcig_keep_conn指令來連接keepalive工作:
upstreamfastcgi_backend {
server127.0.0.1:9000;
keepalive8;
}
server{
…
location /fastcgi/ {
fastcgi_passfastcgi_backend;
fastcgi_keep_connon;
…
}
}
|