淺談軟件和硬件負載均衡(LVS、HAProxy、Nginx、F5)及一次線上問題分析

一、負載均衡

什麼是負載均衡

百度百科對負載均衡的解釋:

負載均衡建立在現有網絡結構之上,它提供了一種廉價有效透明的方法擴展網絡設備和服務器的帶寬、增加吞吐量、加強網絡數據處理能力、提高網絡的靈活性和可用性。
負載均衡(Load Balance)其意思就是分攤到多個操作單元上進行執行,例如Web服務器、FTP服務器、企業關鍵應用服務器和其它關鍵任務服務器等,從而共同完成工作任務。

簡言之就是:將高併發、高流量的網絡請求,經過負載均衡,動態轉發給後端多個節點處理,以提高響應效率、T提高吞吐量

負載均衡的優點

  1. 減傷公網IP數量,節省IP支出成本
  2. 異常內部服務器IP,提高內部服務器安全性
  3. 解決單機故障問題,提供高併發下高可用的策略
  4. 在用戶無感知情況下,做WEB服務器的動態水平拓展
  5. 支持四層和七層負載,對四層性能更好,支持服務器的動態上下線
  6. 性能強,併發數可達數萬至數十萬
  7. 配置簡單,有固定格式的配置文件

四層和七層負載均衡

這裏的四層和七層是指的OSI七層網絡模型。OSI網絡模型是從上往下的,越底層越接近硬件,越往上越接近軟件。這七層模型分別是物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層

在這裏插入圖片描述

四層負載均衡:基於IP+端口的負載均衡:從傳輸層開始是,使用“ip + port”接受請求,在轉發到對應的服務器

七層負載均衡:基於虛擬的URL或主機IP的負載均衡,在四層負載均衡的基礎上,通過應用層協議實現負載均衡

常見的負載均衡軟硬件

當前服務器集羣的負載均衡主要分爲:硬件負載均衡和軟件負載均衡。

硬件負載均衡主要有:F5、Array、NetScaler等

軟件負載均衡主要有:LVS、HAProxy、Nginx等

二、硬件負載均衡

硬件負載均衡解決方案是直接在服務器和外部網絡間安裝負載均衡設備,這種設備我們通常稱之爲負載均衡器。由於使用專門的設備完成網絡請求轉發的任務,獨立於操作系統,整體性能高,負載均衡策略多樣化,流量管理智能化。

優點

  • 其功能強大,不僅包含負載均衡還包括應用交換、會話交換、狀態監控、智能網絡地址轉換、通用持續性、響應錯誤處理、IPv6網關、高級路由、智能端口鏡像、SSL加速、智能HTTP壓縮、TCP優化、第7層速率整形、內容緩衝、內容轉換、連接加速、高速緩存、Cookie加密、選擇性內容加密、應用攻擊過濾、拒絕服務(DoS)攻擊和SYN Flood保護、防火牆過濾等功能。

  • 直接連接交換機,處理網絡請求能力強,與系統無關,負載性可以強。可以應用於大量設施、適應大訪問量、使用簡單。

缺點

  • 價格高昂、成本高,配置冗餘.即使網絡請求分發到服務器集羣,負載均衡設施卻是單點配置。
  • 無法有效掌握服務器及應使用狀態。

三、軟件負載均衡

由於硬件負載均衡價格高昂,一般對於中小規模網站,使用軟件負載均衡便可解決生產中所遇到的問題。

Nginx/LVS/HAProxy是目前使用最廣泛的三種開源的負載均衡軟件。一般對負載均衡的使用是隨着網站規模的提升根據不同的階段來使用不同的技術。

  • 如果是中小型的Web應用,比如日PV小於1000萬,Web前端採用Nginx/HAProxy+Keepalived作負載均衡器;
  • 如果服務器較多,可以用DNS輪詢,LVS所耗費的機器還是比較多的。大型網站或重要的服務(Mysql),且服務器比較多時,可以考慮用LVS+Keepalived的架構。

LVS

LVS的是Linux Virtual Server的簡寫,翻譯爲Linux虛擬服務器,即一個虛擬的服務器集羣系統,是由我國章文嵩博士在1998年5月所研究成立,也是中國國內最早出現的自由軟件項目之一。主要有一下特點:

1. 抗負載能力強,性能高,能達到F5的60%,對內存和CPU資源消耗比較低
2. 穩定,可靠性高,自身有完美的熱備方案(Keepalived+lvs)
3. 配置性較低,這是缺點也是優點,因爲沒有可太多配置的東西,所以不需要人工介入,減少了人爲出錯機率
4. 工作在網絡4層,通過VRRP協議(僅作代理之用),具體的流量是由linux內核來處理,因此沒有流量的產生
5. 應用範圍較廣。因爲LVS工作在4層,所以它幾乎可以對所有應用做負載均衡,包括http、數據庫、在線聊天室等等。
6. 不支持正則處理,不能做動靜分離
7. 支持多種負載均衡算法:rr(輪詢),wrr(帶權輪詢)、lc(最小連接)、wlc(帶權最小連接)
8. LVS工作模式有4種:
 - nat 地址轉換
 - dr 直接路由
 - tun 隧道
 - full-nat

HAproxy

HAProxy是一個使用C語言編寫的自由及開放源代碼軟件,它提供高可用性、負載均衡,以及基於TCP(第四層)和HTTP(第七層)的應用程序代理。HAProxy特別適用於那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。

  1. 支持兩種代理模式:TCP(四層)和HTTP(七層),支持虛擬主機
  2. 能夠補充Nginx的一些缺點比如Session的保持,Cookie的引導等工作
  3. HAProxy跟LVS類似,本身只是一款負載均衡軟件;單純從效率上來講HAProxy會比Nginx有更出色的負載均衡速度,在併發處理上也是優於Nginx的。
  4. 支持url檢測後端的服務器出問題的檢測會有很好的幫助
  5. 更多的負載均衡策略比如:動態加權輪循(Dynamic Round Robin),加權源地址哈希(Weighted Source Hash),加權URL哈希和加權參數哈希(Weighted Parameter Hash)已經實現
  6. 自帶強大的監控服務器狀態的頁面,實際環境中我們結合Nagios進行郵件或短信報警
  7. 不支持POP/SMTP協議 SPDY協議
  8. 不能做Web服務器,即不支持HTTP cache功能
  9. 重載配置的功能需要重啓進程,雖然也是soft restart,但沒有Nginx的reaload更爲平滑和友好
  10. 多進程模式支持不夠好

Nginx

Nginx是一款輕量級的Web服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,在BSD-like 協議下發行。其特點是佔有內存少,併發能力強。Nginx默認採用多進程工作方式,Nginx啓動後,會運行一個master進程和多個worker進程。

  1. 工作在網絡7層,可以針對http應用做一些分流的策略,比如針對域名,目錄結構

    注:1.10.X版本之後引入了對四層tcp轉發的支持,默認:不開啓

  2. Nginx對網絡的依賴較小,理論上能ping通就能進行負載功能

  3. Nginx安裝配置比較簡單,測試起來很方便

  4. 也可以承擔較高的負載壓力且穩定,nginx是爲解決c10k問題而誕生的

    官方測試Nginx能夠支撐5萬併發連接,實際生產環境中可以支撐2~4萬併發連接數。

  5. 對後端服務器的健康檢查,只支持通過端口來檢測,不支持通過url來檢測

  6. Nginx對請求的異步處理可以幫助節點服務器減輕負載壓力

  7. Nginx僅能支持http、https和Email協議,這樣就在適用範圍較小。

  8. 不支持Session的直接保持,但能通過ip_hash來解決。對Big request header的支持不是很好。

  9. Nginx還能做Web服務器即Cache功能。

  10. 相較於HAproxy的重載配置的功能需要重啓進程,Nginx則是支持熱部署的。

三大主流軟件負載均衡的適用場景:

  1. 網站建設初期,可以選用Nginx、HAProxy作爲反向代理負載均衡(流量不大時,可以不選用負載均衡),因爲其配置簡單,性能也能滿足一般業務場景。如果考慮到負載均衡器是有單點問題,可以採用Nginx+Keepalived/HAproxy+Keepalived避免負載均衡器自身的單點問題。
  2. 網站併發到達一定程度後,爲了提高穩定性和轉發效率,可以使用lvs,畢竟LVS比Nginx/HAProxy要更穩定,轉發效率也更高。

四、一次線上事故分析

本司網絡拓撲結構中,入口是F5,後面既有HAProxy、也有Nginx進行網絡的代理。

事發場景

有段時間的搞線上大促和秒殺活動,頭兩天可能參與人數尚可,沒觸發報警。兩三天後,APP端的監控發現存在大量的慢請求,還是APP首頁的加載,慢請求比例甚至高達5%,嚴重影響了用戶體驗。但是,後端服務、接口端的監控顯示,一切正常。那麼,真相會是什麼呢?

問題排查及定位

在排查了機房網絡沒有異常,且沒有出現網絡波動。這時,開始懷疑會不會是F5出現了問題?我們開啓了APP端的監控,並且實時監控F5的運行狀況,發現當APP端大量出現慢請求時,F5上出現了大量的TCP鏈接被拒絕。因而請求根本就沒打到後端服務上。

聯繫了F5的供應商進行支持,最終發現是:在高峯期,F5的SSL連接(Https和Websockets使用)已經遠遠超過了自身支持的併發上限(我們的F5的SSL TPS上限是5000),而實際SSL併發量已高達8000左右,此時也出現大量TCP鏈接被拒絕的現象。

解決方案

調整架構,採用HAproxy來分擔SSL的流量。結合F5,採用6臺HAproxy做高可用的分流。將一部分業務流量遷移到HAproxy,降低F5的壓力。

總結

  • F5是通過芯片來 SSL offloading的,後期如有要求還需升級F5。

  • SSL在高併發下對於運算的要求是非常高的,普通的CPU是很難勝任的,因此CPU的性能可能成爲一個瓶頸。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章