在關於高併發負載均衡一文中已經提到,企業在解決高併發問題時,通常有兩個方向的處理策略,軟件、硬件,硬件上添加負載均衡器分發大量請求,軟件上可在高併發瓶頸處:數據庫+web服務器兩處添加解決方案,其中web服務器前面一層最經常使用的的添加負載方案就是使用nginx實現負載均衡。html
1、負載均衡的做用nginx
一、轉發功能web
按照必定的算法【權重、輪詢】,將客戶端請求轉發到不一樣應用服務器上,減輕單個服務器壓力,提升系統併發量。算法
二、故障移除數據庫
經過心跳檢測的方式,判斷應用服務器當前是否能夠正常工做,若是服務器期宕掉,自動將請求發送到其餘應用服務器。tomcat
三、恢復添加服務器
如檢測到發生故障的應用服務器恢復工做,自動將其添加處處理用戶請求隊伍中。session
2、Nginx實現負載均衡
一樣使用兩個tomcat模擬兩臺應用服務器,端口號分別爲8080 和8081併發
一、Nginx的負載分發策略負載均衡
Nginx 的 upstream目前支持的分配算法:
1)、輪詢 ——1:1 輪流處理請求(默認)
每一個請求按時間順序逐一分配到不一樣的應用服務器,若是應用服務器down掉,自動剔除,剩下的繼續輪詢。
2)、權重 ——you can you up
經過配置權重,指定輪詢概率,權重和訪問比率成正比,用於應用服務器性能不均的狀況。
3)、ip_哈希算法
每一個請求按訪問ip的hash結果分配,這樣每一個訪客固定訪問一個應用服務器,能夠解決session共享的問題。
二、配置Nginx的負載均衡與分發策略
經過在upstream參數中添加的應用服務器IP後添加指定參數便可實現,如:
複製代碼
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; } }
複製代碼
經過以上配置,即可以實現,在訪問8080.max.com這個網站時,因爲配置了proxy_pass地址,全部請求都會先經過nginx反向代理服務器,在服務器將請求轉發給目的主機時,讀取upstream爲 tomcatsever1的地址,讀取分發策略,配置tomcat1權重爲3,因此nginx會將大部分請求發送給49服務器上的tomcat1,也就是8080端口;較少部分給tomcat2來實現有條件的負載均衡,固然這個條件就是服務器一、2的硬件指數處理請求能力。
三、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越大,負載的權重就越大。
3)max_fails
容許請求失敗的次數默認爲1.當超過最大次數時,返回proxy_next_upstream 模塊定義的錯誤
4)fail_timeout
max_fails 次失敗後,暫停的時間。
5)Backup
其它全部的非backup機器down或者忙的時候,請求backup機器。因此這臺機器壓力會最輕。
3、使用Nginx的高可用
除了要實現網站的高可用,也就是提供n多臺服務器用於發佈相同的服務,添加負載均衡服務器分發請求以保證在高併發下各臺服務器能相對飽和的處理請求。一樣,負載均衡服務器也須要高可用,以防若是負載均衡服務器掛掉了,後面的應用服務器也紊亂沒法工做。 實現高可用的方案:添加冗餘。添加n臺nginx服務器以免發生上述單點故障。具體方案詳見下文:keepalive+nginx實現負載均衡高可用
4、總結
總結一點,負載均衡不管是各類軟件或硬件上的解決方案,主要仍是將大量的併發請求按照必定的規律分發給不一樣的服務器處理,從而減小某臺服務器的瞬時壓力,提升網站的抗併發能力。nginx在負載均衡的應用之因此普遍,筆者認爲這歸功於它的靈活配置,一個nginx.conf文件解決大部分問題,不管是nignx建立虛擬服務器、nginx的反向代理服務器,仍是本文介紹的nginx的負載均衡,幾乎都在這個配置文件中進行。服務器上只負責把nginx搭好,跑起來便可。並且它自己輕量級,不須要佔用服務器太多資源就能夠達到較好的效果,膩害。