介紹
負(fù)載平衡是優(yōu)化資源利用率、最大化吞吐量、減少延遲和確保容錯(cuò)配置的常用技術(shù)氮兵。
nginx可以作為一個(gè)非常有效的HTTP負(fù)載平衡器,將流量分配到多個(gè)應(yīng)用服務(wù)器歹鱼,提高Web應(yīng)用程序的性能泣栈、可擴(kuò)展性和可靠性。
負(fù)載均衡策略
nginx支持的負(fù)載均衡機(jī)制有以下幾種
- round-robin
將請(qǐng)求以循環(huán)方式分發(fā)給應(yīng)用服務(wù)器 - least-connected
下一條請(qǐng)求分配給活躍連接最少的服務(wù)器 - ip-hash
使用一個(gè)hash函數(shù)決定由哪個(gè)服務(wù)器處理下一條請(qǐng)求(基于客戶端的IP地址)
默認(rèn)的負(fù)載均衡配置
http {
upstream myapp1 {
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://myapp1;
}
}
}
#默認(rèn)使用 round-robin 機(jī)制
nginx的反向代理實(shí)現(xiàn)包括http弥姻、https南片、fastcgi、uwsgi庭敦、scgi疼进、memcached和grpc的負(fù)載平衡。
如果配置https的負(fù)載均衡秧廉,使用https協(xié)議即可伞广。
當(dāng)配置FastCGI
, uwsgi
, SCGI
, memcached
, gRPC
的負(fù)載均衡,分別使用 fastcgi_pass
, uwsgi_pass
, scgi_pass
, memcached_pass
, grpc_pass
命令疼电。
最少連接的負(fù)載均衡
在某些請(qǐng)求需要更長(zhǎng)時(shí)間才能完成的情況下嚼锄,新的請(qǐng)求分發(fā)到不那么繁忙的服務(wù)器,這種機(jī)制可以實(shí)現(xiàn)更公平負(fù)載均衡蔽豺。
要啟用這種機(jī)制区丑,加入least_conn
指令即可
upstream myapp1 {
least_conn;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
會(huì)話持續(xù)(session persistence)
如果需要將客戶機(jī)綁定到特定的應(yīng)用服務(wù)器,保證來(lái)自同一臺(tái)客戶端的請(qǐng)求總是被同一臺(tái)服務(wù)器處理修陡,可以使用ip-hash
負(fù)載均衡機(jī)制沧侥。
upstream myapp1 {
ip_hash;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
加權(quán)負(fù)載平衡(Weighted load balancing)
可以與以上3中策略配合使用。
upstream myapp1 {
server srv1.example.com weight=3;
server srv2.example.com;
server srv3.example.com;
}
若是這種配置魄鸦,假如來(lái)了5個(gè)新請(qǐng)求宴杀,那么有3個(gè)會(huì)分發(fā)給srv1,而srv2和srv3各處理一個(gè)請(qǐng)求拾因。
健康檢測(cè)
nginx的反向代理實(shí)現(xiàn)包括了服務(wù)器的健康檢測(cè)旺罢。如果來(lái)自特定服務(wù)器的響應(yīng)因出現(xiàn)錯(cuò)誤而失敗斯棒,nginx會(huì)將這個(gè)服務(wù)器標(biāo)記為失敗,并在一段時(shí)間內(nèi)不會(huì)選擇該服務(wù)器處理請(qǐng)求主经。
max_fails
指令記錄發(fā)生在 fail_timeout
時(shí)間內(nèi)與服務(wù)器交互連續(xù)不成功的次數(shù)荣暮。默認(rèn)情況下,max_fails
設(shè)置為1罩驻,當(dāng)設(shè)置為0時(shí)相應(yīng)服務(wù)器取消健康檢測(cè)穗酥。
fail_timeout
失敗超時(shí)時(shí)間,也表示多久服務(wù)器被標(biāo)記為失敗惠遏。在服務(wù)器失敗后的失敗超時(shí)間隔之后砾跃,nginx將開(kāi)始用客戶機(jī)的請(qǐng)求優(yōu)雅地探測(cè)服務(wù)器。如果探測(cè)成功节吮,則將服務(wù)器標(biāo)記為活躍抽高。