爲什麼要用 HAProxy 而不是 Nginx 做負載均衡?

負載均衡器是數據中心的入口點,處於訪問一切資源的關鍵路徑上。這給了他們一些有趣的特徵。首先,它們是在基礎設施中需要監控的最重要的點。其次,他們處於一個獨特的位置,不僅可以提供有關自己的特性,還可以提供他們所支持的後端的每項服務。

有兩種流行的開源軟件負載均衡器:HAProxynginx。讓我們看看他們在這方面的異同。

啓用負載均衡器上的監控

如題。負載均衡器將生產環境的一切服務組織成爲一個整體系統。

  • 安裝新的東西
  • 啓用統計信息和監控內容
  • 啓用日誌
  • 啓用nginx狀態頁面

編輯 /etc/nginx/nginx.conf

server { 
    listen 0.0.0.0:6644; 
    access_log off; 
    
    allow 127.0.0.0/8; 
    allow 10.0.0.0/8; 
    deny all;
    
    location / { 
         stub_status on; 
    } 
}

啓用HAProxy統計信息頁面
編輯/etc/haproxy/haproxy.cfg

listen stats 0.0.0.0:6427 
    mode http 
    maxconn 10 
    no log 
    
    acl network_allowed src 127.0.0.0/8 
    acl network_allowed src 10.0.0.0/8 
    tcp-request connection if if!network_allowed 
    
    stats enable 
    stats uri /

從負載均衡器收集指標
有標準的監控解決方案:datadog,signalfx,prometheus,graphite ... [2]

這些工具從應用程序,服務器和基礎架構收集指標,它們允許檢索指標,繪製圖表併發送警報。

將負載平衡器集成到我們的監控系統中至關重要。我們需要了解客戶端活動情況,請求數,錯誤率等...

毋庸置疑,監控能力將受限於負載均衡器測量到的信息。

可從nginx獲得指標

nginx只提供7種不同的指標。

Nginx僅在所有站點上給出總和。 單個站點或應用程序則沒有任何數字對應。

活動連接:當前活動客戶端連接數,包括等待連接。
接受:接受的客戶端連接總數。
handling:已處理連接的總數。通常,參數值與accept 相同,除非已達到某些資源限制(例如,worker_connections限制)。
請求:客戶端請求的總數。
讀取:nginx正在讀取請求頭的當前連接數。
寫入:nginx將響應寫回客戶端的當前連接數。
等待:等待請求的當前空閒客戶端連接數。

資料來源:https://nginx.org/en/docs/htt...

HAProxy 提供的指標

HAProxy提供83種不同的指標。

數字是全局,每個前端和每個後端(無論哪個有意義)。它們可在人類可讀的網頁上以原始CSV格式提供。

0. pxname [LFBS]:代理名稱
1. svname [LFBS]:服務名稱(FRONTEND用於前端,BACKEND用於後端,任何名稱用於服務器/偵聽器)
2. qcur [..BS]:當前排隊的請求。對於後端,這將報告未分配服務器的隊列號。
3. qmax [..BS]:qcur的最大值
4. scur [LFBS]:當前會話
5. smax [LFBS]:最大會話
6. slim [LFBS]:配置的會話限制
7. stot [LFBS]:累計數連接
8. bin [LFBS]:字節輸入
9. bout [LFBS]:字節輸出

[...] 

32. 類型[LFBS] :( 0 =前端,1 =後端,2 =服務器,3 =套接字/監聽器)
33. rate [.FBS]:每秒的會話數超過最後一秒
34. rate_lim [.F ..]:每秒新會話的配置限制
35. rate_max [.FBS]:每秒新會話的最大數量
36. check_status [... S]:上次健康檢查的狀態,其中一個:
37. check_code [... S]:layer5-7代碼,如果可用
38. check_duration [... S]:以ms爲單位完成上次健康檢查所用的時間
39. hrsp_1xx [.FBS]:帶1xx代碼的http響應
40. hrsp_2xx [.FBS]:具有2xx代碼的http響應
41. hrsp_3xx [.FBS]:具有3xx代碼
42. http響應.hrsp_4xx [.FBS]:具有4xx代碼的http響應
43. hrsp_5xx [.FBS]:http響應5xx代碼
44. hrsp_other [.FBS]:與其他代碼的http響應(協議錯誤)
[...]

資料來源:http://cbonte.github.io/hapro...

監控負載均衡器

上述度量標準用於在正在運行的系統上生成狀態。

首先,我們將看到每個負載均衡器開箱即用的狀態頁面。然後我們將深入研究第三方監控解決方案。

Nginx狀態頁面

nginx狀態頁面

7個nginx指標顯示在人類可讀的網頁上,可在127.0.0.1:6644/訪問

不開玩笑。這就是nginx認爲的“ 狀態頁面 ”。WTF?

它不顯示負載平衡的應用程序。它不顯示哪些服務器在線(有什麼東西甚至運行???)。在該頁面上沒有什麼可看的,它無助於調試任何問題。

HAProxy統計頁面

爲了比較,讓我們看一下HAProxy監控頁面,可在127.0.0.1:6427訪問

HAProxy的狀態頁

在這裏,我們可以看到哪些服務器上升或下降,使用了多少帶寬,連接了多少客戶端等等。這就是監控的意義所在。

正如一位經驗豐富的系統管理員曾經告訴我:“ 這頁是宇宙中最重要的事情。” [1]

每當事情變得不穩定時。首先,您在瀏覽器中打開www.yoursite.com,看看它有多糟糕。其次,打開 HAProxy 統計信息頁面以查找損壞的內容。此時,您已經90%的時間發現了問題的根源。

在可用監控有限的環境中尤其如此,或者更糟糕的是,根本沒有監控工具。狀態頁面隨時可以提供幫助(如果不是,那麼只需要幾條配置行)。

將nginx與監控系統集成

我們所能得到的只是來自網絡狀態頁面的7個指標,其中只有請求數是值得注意的。它沒有以 API 友好格式公開,並且不可能獲得每個站點的數字。我們唯一能做的就是解析原始文本,寄希望於在未來的版本中不會改變間距。

鑑於 nginx 沒有公開任何有用的信息,現有的監控工具都不能與之集成。當沒有任何東西可以得到時,沒有任何東西可以顯示,也沒有什麼可以提醒的。

注意:一些監控工具實際上假裝支持nginx集成。這意味着他們解析文本並提取請求數。這就是他們所能獲得的一切。

將HAProxy與監控系統集成

除了漂亮的人類可讀監控頁面之外,所有HAProxy指標都以CSV格式提供。工具可以(並且確實)利用它。

例如,這是 Datadog 提供的默認HAProxy儀表板:

haproxy-dash.png

Datadog 預製的 HAProxy 儀表板

資料來源:http://docs.datadoghq.com/int...

主機上安裝的 Datadog 代理會定期收集 HAProxy 指標。可以繪製指標,可以將圖表排列到儀表板(這是一個示例),同時我們可以配置自動警報。

HAProxy 狀態頁面提供當前狀態(在生成頁面時),而監控解決方案保存歷史記錄並允許事後的調試。

爲什麼nginx沒有監控?

nginx故意缺少所有監視功能。它們不會也永遠不會免費提供。

如果您已被nginx鎖定,並且需要一個合適的監控頁面和用於集成的JSON API,則必須支付“ Nginx Plus”版本的費用。價格從每臺服務器每年1900美元起。

請參閱:https://www.nginx.com/products/pricing/

結論:不惜一切代價避免使用nginx

負載均衡器是傳輸的關鍵點,也是在基礎架構中需要監控的最重要的事情。

Nginx的爲金錢而剝離了所有監控功能,同時裝作開源的樣子。

對我們的運營完全視而不見是不可接受的。遠離nginx。請改用HAProxy

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