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