企業(yè)在解決高并發(fā)問題時,一般有兩個方向的處理策略,軟件、硬件,硬件上添加負載均衡器分發(fā)大量請求,軟件上可在高并發(fā)瓶頸處:數(shù)據(jù)庫+Web服務(wù)器兩處添加解決方案,其中Web服務(wù)器前面一層最常用的的添加負載方案就是使用nginx實現(xiàn)負載均衡。
一、負載均衡的作用
1、轉(zhuǎn)發(fā)功能
按照一定的算法【權(quán)重、輪詢】,將客戶端請求轉(zhuǎn)發(fā)到不同應(yīng)用服務(wù)器上,減輕單個服務(wù)器壓力,提高系統(tǒng)并發(fā)量。
2、故障移除
通過心跳檢測的方式,判斷應(yīng)用服務(wù)器當(dāng)前是否可以正常工作,如果服務(wù)器期宕掉,自動將請求發(fā)送到其他應(yīng)用服務(wù)器。
3、恢復(fù)添加
如檢測到發(fā)生故障的應(yīng)用服務(wù)器恢復(fù)工作,自動將其添加到處理用戶請求隊伍中。
二、Nginx實現(xiàn)負載均衡
同樣使用兩個tomcat模擬兩臺應(yīng)用服務(wù)器,端口號分別為8080 和8081
1、Nginx的負載分發(fā)策略
Nginx 的 upstream目前支持的分配算法:
1)、輪詢 ——1:1 輪流處理請求(默認)
每個請求按時間順序逐一分配到不同的應(yīng)用服務(wù)器,如果應(yīng)用服務(wù)器down掉,自動剔除,剩下的繼續(xù)輪詢。
2)、權(quán)重 ——you can you up
通過配置權(quán)重,指定輪詢幾率,權(quán)重和訪問比率成正比,用于應(yīng)用服務(wù)器性能不均的情況。
3)、ip_哈希算法
每個請求按訪問ip的hash結(jié)果分配,這樣每個訪客固定訪問一個應(yīng)用服務(wù)器,可以解決session共享的問題。
2、配置Nginx的負載均衡與分發(fā)策略
通過在upstream參數(shù)中添加的應(yīng)用服務(wù)器IP后添加指定參數(shù)即可實現(xiàn),如:
upstream tomcatserver1 {
server 192.168.72.49:8080 weight=3;
server 192.168.72.49:8081;
}
server {
listen 80;
server_name 8080.max.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://tomcatserver1;
index index.html index.htm;
}
}
通過以上配置,便可以實現(xiàn),在訪問8080.max.com這個網(wǎng)站時,由于配置了proxy_pass地址,所有請求都會先通過nginx反向代理服務(wù)器,在服務(wù)器將請求轉(zhuǎn)發(fā)給目的主機時,讀取upstream為 tomcatsever1的地址,讀取分發(fā)策略,配置tomcat1權(quán)重為3,所以nginx會將大部分請求發(fā)送給49服務(wù)器上的tomcat1,也就是8080端口;較少部分給tomcat2來實現(xiàn)有條件的負載均衡,當(dāng)然這個條件就是服務(wù)器1、2的硬件指數(shù)處理請求能力。
3、nginx其他配置
upstream myServer {
server 192.168.72.49:9090 down;
server 192.168.72.49:8080 weight=2;
server 192.168.72.49:6060;
server 192.168.72.49:7070 backup;
}
1)down
表示單前的server暫時不參與負載
2)Weight
默認為1.weight越大,負載的權(quán)重就越大。
3)max_fails
允許請求失敗的次數(shù)默認為1.當(dāng)超過最大次數(shù)時,返回proxy_next_upstream 模塊定義的錯誤
4)fail_timeout
max_fails 次失敗后,暫停的時間。
5)Backup
其它所有的非backup機器down或者忙的時候,請求backup機器。所以這臺機器壓力會最輕。
三、使用Nginx的高可用
除了要實現(xiàn)網(wǎng)站的高可用,也就是提供n多臺服務(wù)器用于發(fā)布相同的服務(wù),添加負載均衡服務(wù)器分發(fā)請求以保證在高并發(fā)下各臺服務(wù)器能相對飽和的處理請求。同樣,負載均衡服務(wù)器也需要高可用,以防如果負載均衡服務(wù)器掛掉了,后面的應(yīng)用服務(wù)器也紊亂無法工作。
實現(xiàn)高可用的方案:添加冗余。添加n臺nginx服務(wù)器以避免發(fā)生上述單點故障。具體方案詳見下文:keepalive+nginx實現(xiàn)負載均衡高可用
四、總結(jié)
總結(jié)一點,負載均衡不論是各種軟件或硬件上的解決方案,主要還是將大量的并發(fā)請求按照一定的規(guī)律分發(fā)給不同的服務(wù)器處理,從而減少某臺服務(wù)器的瞬時壓力,提高網(wǎng)站的抗并發(fā)能力。nginx在負載均衡的應(yīng)用之所以廣泛,筆者認為這歸功于它的靈活配置,一個nginx.conf文件解決大部分問題,不論是nignx創(chuàng)建虛擬服務(wù)器、nginx的反向代理服務(wù)器,還是本文介紹的nginx的負載均衡,幾乎都在這個配置文件中進行。服務(wù)器上只負責(zé)把nginx搭好,跑起來即可。而且它本身輕量級,不需要占用服務(wù)器太多資源就可以達到較好的效果。