在許多應(yīng)用中,負(fù)載平衡是一種常用的技術(shù)來(lái)優(yōu)化利用資源最大化吞吐量,減少等待時(shí)間,并確保容錯(cuò)??梢允褂胣ginx的作為一種非常高效的HTTP負(fù)載平衡器,將流量分配到多個(gè)應(yīng)用服務(wù)器上提高性能,可擴(kuò)展性和高可用性。

負(fù)載均衡方法 nginx支持下面幾種負(fù)載均衡機(jī)制:
round-robin:輪詢。以輪詢方式將請(qǐng)求分配到不同服務(wù)器上
least-connected:最少連接數(shù)。將下一個(gè)請(qǐng)求分配到連接數(shù)最少的那臺(tái)服務(wù)器上
ip-hash :基于客戶端的IP地址。散列函數(shù)被用于確定下一個(gè)請(qǐng)求分配到哪臺(tái)服務(wù)器上
3. 負(fù)載均衡默認(rèn)配置
nginx負(fù)載均衡最簡(jiǎn)單的配置如下:
http {
upstream myapp1 {
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://myapp1;
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
http {
upstream myapp1 {
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://myapp1;
}
}
}
在上面的例子中,srv1,srv2,srv3運(yùn)行著相同的應(yīng)用程序。如果沒(méi)有特別指定負(fù)載均衡方法默認(rèn)是以輪詢方式。所有的請(qǐng)求被代理到服務(wù)組myapp1,然后nginx負(fù)載均衡的分發(fā)請(qǐng)求。
nginx反向代理實(shí)現(xiàn)包括下面這些負(fù)載均衡HTTP、HTTPS、FastCGI、uwsgi,SCGI和memcached。
要配置HTTPS的負(fù)載均衡,只需使用“https”開(kāi)頭的協(xié)議。
當(dāng)要設(shè)置FastCGI,uwsgi,SCGI,或者memcached的負(fù)載平衡,分別使用fastcgi_pass,uwsgi_pass,scgi_pass和memcached_pass指令。
最少連接負(fù)載均衡
在一些要求需要更長(zhǎng)的時(shí)間才能完成的應(yīng)用情況下, 最少連接可以更公平地控制應(yīng)用程序?qū)嵗呢?fù)載。使用最少連接負(fù)載均衡,nginx不會(huì)向負(fù)載繁忙的服務(wù)器上分發(fā)請(qǐng)求,而是將請(qǐng)求分發(fā)到負(fù)載低的服務(wù)器上。
配置如下:
upstream myapp1 {
least_conn;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
1
2
3
4
5
6
upstream myapp1 {
least_conn;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
會(huì)話持久性
以輪詢或最少連接的負(fù)載均衡算法,每個(gè)后續(xù)的客戶端的請(qǐng)求,可以潛在地分配給不同的服務(wù)器上,并不能保證相同的客戶端請(qǐng)求將總是指向同一服務(wù)器上。
這對(duì)于有會(huì)話信息的應(yīng)用場(chǎng)景下,會(huì)有問(wèn)題的。一般的做法是需要將session信息共享,如使用memcache來(lái)存放session。
本文來(lái)自網(wǎng)絡(luò),經(jīng)授權(quán)后發(fā)布,本文觀點(diǎn)不代表Infocode藍(lán)暢信息技術(shù)立場(chǎng),轉(zhuǎn)載請(qǐng)聯(lián)系原作者。