作者: 丫忠
• 星期一, 二月 01st, 2010

HAProxy負載平衡器介紹

HAProxy 是一款基於 TCP 和 HTTP 協定的高效能負載平衡器,也是一款 Open Source 的 GPL 免費軟體,可以為企業帶來負載平衡需求的解決方案,HAProxy 適應於負載較大的 web伺服器,HAProxy 的高效能得以應付同時上萬個連結的session,HAProxy的高安全性得以保護 web伺服器 在防火牆內,並且很簡單地架設在現有的網路架構,以下為官網提供 HAProxy的架構:

圖片來源:http://haproxy.1wt.eu/

HAProxy負載平衡器-版本比較

目前 HAProxy 的版本有3個版本,有2個版本(1.1跟1.2)為目前較穩定的版本,1.3的版本為目前正在發展的版本,較不穩定;但是,相對提供較多元功能,HAProxy 詳細版本介紹如下:

版本 1.1 – 此版本最目前最穩定(stable)的版本,目前已經不再更新功能。

版本 1.2 – 此版本為以 1.1版本為基礎,加上新功能的版本,新功能如下:

  • 支援 poll/epoll ,用來支援大量的session
  • IPV6
  • 應用程式 cookie
  • hot-reconfiguration
  • 高級的動態流量管理
  • TCP keep alive
  • source hash
  • 加權負載平衡演算法
  • rbtree 算法的調整器
  • web 狀態表介面

以上一些專有名稱 丫忠 是直接翻譯過來,請原諒 丫忠 並沒有詳細介紹^^

版本 1.3 – 此版本為目前正在開發的版本,支援的功能也比較多元,基本上 丫忠 認為此版本的功能較能符合使用者對於 web伺服器 上應用的需求,例如:內容交換功能、全透代理功能等,可以分別依據 來源內容 及 來源IP 分配到後端不同的伺服器,詳細功能介紹如下所示:

  • 內容交換:可以根據來源端的請求(request)分配到不同的 伺服器 ,來源端請求 如:URI , heade , cookie …等,丫忠認為此功能非常實用,就等丫忠有空時再實做出此功能的應用囉
  • 全透明代理:可以根據 來源端IP 分配到後端不同的伺服器(此功能在 kernel Linux 2.4/2.6 時,需要補丁 cttproxy 才可以使用)
  • 與核心(kernel)串接:與 kernel 的串接提高了 HAProxy最大承載量,同時也降低了 CPU 的使用率,此版本也支援 Linux L7SW 以滿足商用對於 最大承載量的需求。
  • 拒絕連接:DDos攻擊是網路駭客最常見的攻擊方式之一,然而此功能可以有效阻擋DDos攻擊。
  • 快速可靠的標頭(header)處理:基於 RFC2616 規格相容的標頭(header)處理,對於請求(request)進行完整性分析和索引,只需要不到 2ms的時間
  • 模組化設計:模組化設計可以很方便讓有興趣的人一同加入開發,HTTP 已經從 TCP協定 中分離出來,使得 HTTP模組 的開發更加方便快速
  • ACLs
  • TCP過濾檢查:結合 ACL 來針對請求(request)進行過濾檢查,如此就可以進行條件式檢查,例如:只允許SSL 但是不允許SSH
  • 加權負載平衡演算法

HAProxy負載平衡器-支援平台

HAProxy 目前支援的平台如下:

HAProxy負載平衡器-高效能說明

  • 單一程序:事件驅動 模組大大的降低了 內容交換 的消耗 和 記憶體 的使用率。每毫秒(ms)可以處理幾百個任務,每個 session 僅消耗幾 KB的記憶體,然而類似的情況在 Apache中,卻需要消耗幾MB的記憶體。
  • 事件檢查器:可以在上萬個連接中及時檢查各種事件,目前僅支援運作在 Linux平台上的HAProxy 1.2的版本
  • 單一緩衝區:儘可能避免在I/O之間的任何資料拷貝動作,以節省CPU及記憶體的使用
  • MRU記憶體配置(memory allocator)
  • work factoring
  • event aggregation
  • two FSMs
  • reduced footprint
  • 優化HTTP標頭(header)分析
  • 減少系統調用次數

HAProxy負載平衡器-下載

請至 HAProxy官網下載

相似於 HAProxy 的負載平衡器

  • Linux Virtual Servers (LVS) :丫忠有列出 LVS vs HAProxy 優缺點比較,網友可以比較看看,LVS 整合於Linux 2.4 和 2.6 kernel的非常快速的 3/4層負載平衡器,需要結合使用 keep-alived 才能夠使用 後端伺服器狀態檢查功能,這通常對於有需求於 基於IP負載平衡器 的網友來說,是一個解決方案。
  • Pure 負載均衡器(PLB) :Pure 負載平衡器 使用了和 HAProxy一樣的事件驅動模組,但是其目的僅為了提升高效能和可用性,並且 沒有任何HTTP處理和session keep-alived.
  • Pound:Pound 可以把它當作 HAProxy 的一個擴充,Pound 支援 SSL,可以根據請求的URL進行分配,設定檔也很尐;但是 Pound 不支援 session keep-alived,適用於一般中小型企業
  • Pen :Pen 是一款很簡單的 TCP負載平衡器,支援 高達2048個客戶端IP(Client IP)的session keep-alived,支援 基於IP的ACL;但是,缺點是當同時 session數達到幾千個後就達到最高效能了

寫完了 HAProxy負載平衡器的介紹 後,丫忠是有股衝動想要安裝HAProxy來試看看,丫忠已經有下載後並且安裝了,安裝方式很簡單,只要 make TARGET=xxxx 就完成了,接下來就是 HAProxy負載平衡器的安裝方式及實例架構了,等完成後再將文件分享出來給大家參考看看!!

參考資料:http://cn.haproxy.org/


本文相關的文章

  1. 原來寫一篇文章要花這麼多時間
  2. 負載平衡器優缺點比較(Nginx vs HAProxy vs LVS)
  3. 用 php 進行 http認證(http Authentication)
  4. nohup 讓ssh執行的command在背景執行並且不中斷
文章分類: 代理伺服器  | 相關標籤: ,
歡迎留下您的想法