企業在解決高併發問題時,一般有兩個方向的處理策略,軟體、硬體,硬體上新增負載均衡器分發大量請求,軟體上可在高併發瓶頸處:資料庫+web伺服器兩處新增解決方案,其中web伺服器前面一層最常用的的新增負載方案就是使用nginx實現負載均衡。
一、負載均衡的作用
1、**功能
按照一定的演算法【權重、輪詢】,將客戶端請求**到不同應用伺服器上,減輕單個伺服器壓力,提高系統併發量。
2、故障移除
通過心跳檢測的方式,判斷應用伺服器當前是否可以正常工作,如果伺服器期宕掉,自動將請求傳送到其他應用伺服器。
3、恢復新增
如檢測到發生故障的應用伺服器恢復工作,自動將其新增到處理使用者請求隊伍中。
二、nginx實現負載均衡
同樣使用兩個tomcat模擬兩台應用伺服器,埠號分別為8080 和8081
1、nginx的負載分發策略
nginx 的 upstream目前支援的分配演算法:
1)、輪詢 ——1:1 輪流處理請求(預設)
每個請求按時間順序逐一分配到不同的應用伺服器,如果應用伺服器down掉,自動剔除,剩下的繼續輪詢。
2)、權重 ——you can you up
通過配置權重,指定輪詢機率,權重和訪問比率成正比,用於應用伺服器效能不均的情況。
3)、ip_雜湊演算法
每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問乙個應用伺服器,可以解決session共享的問題。
2、配置nginx的負載均衡與分發策略
通過在upstream引數中新增的應用伺服器ip後新增指定引數即可實現,如:
upstream tomcatserver1通過以上配置,便可以實現,在訪問8080.max.com這個**時,由於配置了proxy_pass位址,所有請求都會先通過nginx反向**伺服器,在伺服器將請求**給目的主機時,讀取upstream為 tomcatsever1的位址,讀取分發策略,配置tomcat1權重為3,所以nginx會將大部分請求傳送給49伺服器上的tomcat1,也就是8080埠;較少部分給tomcat2來實現有條件的負載均衡,當然這個條件就是伺服器1、2的硬體指數處理請求能力。server
}
3、nginx其他配置
upstream myserver1)down
表示單前的server暫時不參與負載
2)weight
預設為1.weight越大,負載的權重就越大。
3)max_fails
允許請求失敗的次數預設為1.當超過最大次數時,返回proxy_next_upstream 模組定義的錯誤
4)fail_timeout
max_fails 次失敗後,暫停的時間。
5)backup
其它所有的非backup機器down或者忙的時候,請求backup機器。所以這台機器壓力會最輕。
三、使用nginx的高可用
除了要實現**的高可用,也就是提供n多台伺服器用於發布相同的服務,新增負載均衡伺服器分發請求以保證在高併發下各台伺服器能相對飽和的處理請求。同樣,負載均衡伺服器也需要高可用,以防如果負載均衡伺服器掛掉了,後面的應用伺服器也紊亂無法工作。
實現高可用的方案:新增冗餘。新增n臺nginx伺服器以避免發生上述單點故障。具體方案詳見下文:keepalive+nginx實現負載均衡高可用
四、總結
總結一點,負載均衡不論是各種軟體或硬體上的解決方案,主要還是將大量的併發請求按照一定的規律分發給不同的伺服器處理,從而減少某台伺服器的瞬時壓力,提高**的抗併發能力。nginx在負載均衡的應用之所以廣泛,筆者認為這歸功於它的靈活配置,乙個nginx.conf檔案解決大部分問題,不論是nignx建立虛擬伺服器、nginx的反向**伺服器,還是本文介紹的nginx的負載均衡,幾乎都在這個配置檔案中進行。伺服器上只負責把nginx搭好,跑起來即可。而且它本身輕量級,不需要占用伺服器太多資源就可以達到較好的效果,膩害。
nginx 負載均衡 Nginx負載均衡策略
nginx提供的負載均衡策略有2種 內建策略和擴充套件策略。內建策略為輪詢 預設 加權輪詢,ip hash,第三方。upstream mysvr1 輪詢 每個請求按照時間順序逐一的分配到每乙個後台伺服器上。如果某台伺服器宕機了,將會自動的剔除宕機的服務。nginx預設就是輪詢其權重都預設為1,伺服器...
nginx負載均衡
nginx 的 upstream目前支援 4 種方式的分配 1 輪詢 預設 每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。2 weight 指定輪詢機率,weight和訪問比率成正比,用於後端伺服器效能不均的情況。3 ip hash 每個請求按訪問ip的hash...
nginx負載均衡
nginx s stop quick exit nginx s quit graceful quit nginx s reload changing configuration,starting a new worker,quitting an old worker gracefully nginx...