企業在解決高並發問題時,一般有兩個方向的處理策略,軟體、硬件,硬體上添加負載平衡器分發大量請求,軟體上可在高並發瓶頸處:資料庫web伺服器兩處添加解決方案,其中web伺服器前面一層最常用的新增負載方案就是使用nginx來實現負載平衡。
一、負載平衡的作用
1、轉送功能
依照一定的演算法【權重、輪詢】,將客戶端請求轉送到不同應用伺服器上,減輕單一伺服器壓力,提高系統並發量。
2、故障移除
透過心跳偵測的方式,判斷應用程式伺服器目前是否可以正常運作,如果伺服器期宕掉,自動將請求傳送到其他應用伺服器。
3、恢復添加
(推薦學習:nginx教學)
如偵測到發生故障的應用程式伺服器復原工作,自動將其新增到處理使用者請求隊伍中。
二、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 { 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來實現有條件的負載平衡,當然這個條件就是伺服器1、2的硬體指數處理請求能力。
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越大,負載的權重就越大。
3)max_fails
允許請求失敗的次數預設為1.當超過最大次數時,回傳proxy_next_upstream 模組定義的錯誤
4)fail_timeout
# max_fails 次失敗後,暫停的時間。
5)Backup
其它所有的非backup機器down或忙碌的時候,請求backup機器。所以這台機器壓力會最輕。
三、使用Nginx的高可用
除了要實現網站的高可用,也就是提供n多台伺服器用於發布相同的服務,添加負載平衡伺服器分發請求以確保在高並發下各台伺服器能相對飽和的處理請求。同樣,負載平衡伺服器也需要高可用,以防如果負載平衡伺服器掛掉了,後面的應用程式伺服器也紊亂無法運作。
實現高可用的方案:新增冗餘。新增n台nginx伺服器以避免發生上述單點故障。
四、總結
總結一點,負載平衡不論是各種軟體或硬體上的解決方案,主要還是將大量的並發請求按照一定的規律分發給予不同的伺服器處理,從而減少某台伺服器的瞬時壓力,提高網站的抗併發能力。 nginx在負載平衡的應用之所以廣泛,筆者認為這歸功於它的靈活配置,一個nginx.conf檔案解決大部分問題,不論是nignx創建虛擬伺服器、nginx的反向代理伺服器,還是本文介紹的nginx的負載平衡,幾乎都在這個設定檔中進行。伺服器上只負責把nginx搭好,跑起來即可。而且它本身輕量級,不需要佔用伺服器太多資源就可以達到較好的效果,膩害。
以上是配置Nginx實現負載平衡(圖)的詳細內容。更多資訊請關注PHP中文網其他相關文章!