什麼是負載均衡
負載均衡(Load Balance)創建在現有網絡結構之上,提供了一種廉價有效且透明的方法擴展網絡設備和服務器的帶寬、增長吞吐量、增強網絡數據處理能力、提升網絡的靈活性和可用性。負載均衡有兩方面的含義:首先,大量的併發訪問或數據流量分擔到多臺節點設備上作並行處理,減小用戶等待響應的時間;其次,單個重負載的運算分擔到多臺節點設備上作並行處理,每一個節點設備處理結束後,將結果彙總,返回給用戶,系統處理能力獲得大幅度提升。
簡單講就是:linux
- 將大量的併發處理轉發給後端多個節點處理,減小工做響應時間;
- 將單個繁重的工做轉發給後端多個節點處理,處理完再返回給負載均衡中心,在返回給用戶。
負載均衡的優勢
- 能夠在對用戶無感知的狀況下,作Web服務器的動態水平擴展
- 解決單機故障,增長業務併發訪問及處理能力
- 下降公網IP地址,節省IP支出成本
- 配置簡單,有固定格式的配置文件
- 功能豐富,支持四層和七層負載,對四層性能更好,支持動態下線主機
- 隱藏內部服務器IP,提升內部服務器的安全性
- 性能強,併發數可達數萬至數十萬
四層負載均衡
基於IP+端口的負載均衡:從傳輸層開始是,使用「ip + port」接受請求,在轉發到對應的服務器。 算法
七層負載均衡
基於虛擬的URL或主機IP的負載均衡:在四層負載均衡的基礎上,經過應用層協議實現負載均衡。 後端
常見負載均衡的軟硬件
四層負載均衡
- LVS
- HAProxy
- Nginx
七層負載均衡
- HAProxy
- Nginx
硬件負載均衡
- F5
- Netscaler
LVS、Nginx、HAProxy的區別
LVS
- 抗負載能力強。抗負載能力強、性能高,能達到F5硬件的60%;對內存和cpu資源消耗比較低
- 工做在網絡4層,經過vrrp協議轉發(僅做分發之用),具體的流量由linux內核處理,所以沒有流量的產生。
- 穩定性、可靠性好,自身有完美的熱備方案;(如:LVS+Keepalived)
- 應用範圍比較廣,能夠對全部應用作負載均衡;
- 不支持正則處理,不能作動靜分離。
- 支持負載均衡算法:rr(輪循)、wrr(帶權輪循)、lc(最小鏈接)、wlc(權重最小鏈接)
- 配置 複雜,對網絡依賴比較大,穩定性很高。
Ngnix:
- 工做在網絡的7層之上,能夠針對http應用作一些分流的策略,好比針對域名、目錄結構;
- Nginx對網絡的依賴比較小,理論上能ping通就就能進行負載功能;
- Nginx安裝和配置比較簡單,測試起來比較方便;
- 也能夠承擔高的負載壓力且穩定,通常能支撐超過1萬次的併發;
- 對後端服務器的健康檢查,只支持經過端口來檢測,不支持經過url來檢測。
- Nginx對請求的異步處理能夠幫助節點服務器減輕負載;
- Nginx僅能支持http、https和Email協議,這樣就在適用範圍較小。
- 不支持Session的直接保持,但能經過ip_hash來解決。
- 支持負載均衡算法:Round-robin(輪循)、Weight-round-robin(加權輪循)、Ip-hash(Ip哈希)
- Nginx還能作Web服務器即Cache功能。
HAProxy的特色是:
- TCP(四層)和HTTP(七層)作反向代理,支持虛擬主機
- 可平衡負載至後端服務器,並支持持久鏈接
- 支持基於cookie進行調度
- 支持全部主服務器故障切換至備用服務器
- 支持專用端口實現監控服務
- 支持不影響現有鏈接狀況下中止接受新鏈接請求
- 能夠在雙向添加,修改或刪除HTTP報文首部
- 支持基於pattern實現鏈接請求的訪問控制
- 經過特定的URI爲受權用戶提供詳細的狀態信息
- 能夠針對HTTP請求添加cookie,進行路由後端服務器
三大主流軟件負載均衡器適用業務場景:
- 網站建設初期,能夠選用Nigix/HAproxy做爲反向代理負載均衡(或者流量不大均可以不選用負載均衡),由於其配置簡單,性能也能知足通常的業務場景。若是考慮到負載均衡器是有單點問題,能夠採用Nginx+Keepalived/HAproxy+Keepalived避免負載均衡器自身的單點問題。
- 網站併發達到必定程度以後,爲了提升穩定性和轉發效率,可使用LVS、畢竟LVS比Nginx/HAproxy要更穩定,轉發效率也更高。不過維護LVS對維護人員的要求也會更高,投入成本也更大。