HAProxy介紹 HAProxy HAProxy支持兩種主要的代理模式 HAProxy負載均衡策略非常多 HAProxy優缺點 HAProxy功能 HAProxy 組成 ...
HAProxy介紹
HAProxy
HAProxy: 是法國人Willy Tarreau 開發的一個開源軟體,是一 款應對客戶端10000 以上的同時連接的高性能的TCP和HTTP 負載均衡器。
其功能是用來提供基於cookie的持久性,基於內容的交換,過載保護的高級流量管制,自動故障切換,以正則表達式為基礎的標題控制運行時間,基於Web 的報表,高級日誌記錄以幫助排除故障的應用或網路及其他功能。
LB Cluster:
四層:lvs, nginx(stream) ,haproxy(mode tcp)
七層:http: nginx(http), haproxy(mode http), httpd...
HAProxy :http://www.haproxy.org
文檔:https://cbonte.github.io/haproxy-dconv/
軟體負載均衡一般通過兩種方式來實現:
基於操作系統的軟負載實現和基於第三方應用的軟負載實現。
LVS就是基於Linux操作系統實現的一種軟負載,HAProxy就是開源的並且基於第三應用實現的軟負載。
HAProxy是一款提供高可用性、負載均衡以及基於TCP(第四層)和HTTP(第七層)應用的代理軟體。
HAProxy是完全免費的、藉助HAProxy可以快速並且可靠的提供基於TCP和HTTP應用的代理解決方案。
HAProxy支持兩種主要的代理模式
TCP 即4層 (大多用於郵件伺服器、內部協議通信伺服器等),在4層模式下,HAProxy僅在客戶端和伺服器之間轉發雙向流量。
它主要是通過分析IP層及TCP/UDP層的流量實現的基於IP加埠的負載均衡。
僅建立一次TCP連接。
HTTP 即7層模式,HAProxy會分析協議,並且能通過允許、拒絕、交換、增加、修改或刪除請求 (request)或者回應(response)里指定內容來控制協議,
七層負載均衡器可以根據報文內容,再配合負載均衡演算法來選擇後端伺服器,因此也稱為“內容交換器”。
負載均衡器與客戶端及後端的伺服器會分別建立一次TCP連接
七層負載均衡對負載均衡設備的要求更高,而七層負載均 衡的處理能力也必然低於四層模式的負載均衡。
HAProxy負載均衡策略非常多
HAProxy的負載均衡演算法現在具體有如下8種:
roundrobin,表示簡單的輪詢,這個不多說,這個是負載均衡基本都具備的;
static-rr,表示根據權重,建議關註;
leastconn,表示最少連接者先處理,建議關註;
source,表示根據請求源IP,這個跟Nginx的IP_hash機制類似,我們用其作為解決session問題的一種方法,建議關註;
ri,表示根據請求的URI;
rl_param,表示根據請求的URl參數’balance url_param’ requires an URL parameter name;
hdr(name),表示根據HTTP請求頭來鎖定每一次HTTP請求;
rdp-cookie(name),表示根據據cookie(name)來鎖定並哈希每一次TCP請求。
HAProxy優缺點
HAProxy的優點
1、HAProxy是支持虛擬主機的,通過frontend指令來實現
2、能夠補充Nginx的一些缺點比如Session的保持,Cookie的引導等工作
3、支持url檢測後端的伺服器出問題的檢測會有很好的幫助。
4、它跟LVS一樣,本身僅僅就只是一款負載均衡軟體,單純從效率上來講HAProxy更會比Nginx有更出色的負載均衡速度,在併發處理上也是優於Nginx的。
5、HAProxy支持TCP協議的負載均衡轉發,可以對Mysql讀進行負載均衡,對後端的MySQL節點進行檢測和負載均衡,不過在後端的MySQL slaves數量超過10台時性能不如LVS
6、能對請求的url和header中的信息做匹配,有比LVS有更好的7層實現
7、自帶強大的監控伺服器狀態的頁面。
HAProyx的缺點
1、重載配置的功能需要重啟進程,雖然也是 soft restart,但沒有 Nginx 的 reaload 更為平滑和友好。
2、多進程模式支持不夠好。
3、不支持 HTTP cache 功能,現在不少開源的 lb 項目,都或多或少具備 HTTP cache 功能。
HAProxy功能
HAProxy 是TCP / HTTP 反向代理伺服器,尤其適合於高可用性環境。
可以針對HTTP 請求添加cookie,進行路由後端伺服器
可平衡負載至後端伺服器,並支持持久連接
支持基於cookie 進行調度
支持所有主伺服器故障切換至備用伺服器
支持專用埠實現監控服務
支持不影響現有連接情況下停止接受新連接請求
可以在雙向添加,修改或刪除HTTP 報文首部
支持基於pattern 實現連接請求的訪問控制
通過特定的URI 為授權用戶提供詳細的狀態信息
支持http 反向代理
支持動態程式的反向代理
支持基於資料庫的反向代理
HAProxy 組成
程式環境:
yum install haproxy
rpm -ql haproxy
/etc/haproxy
/etc/haproxy/haproxy.cfg
/etc/logrotate.d/haproxy
/etc/rc.d/init.d/haproxy
/etc/sysconfig/haproxy
/usr/bin/halog
/usr/bin/iprange
/usr/sbin/haproxy
/usr/share/doc/haproxy-1.5.18
/usr/share/haproxy
/var/lib/haproxy
主程式:/usr/sbin/haproxy
配置文件:/etc/haproxy/haproxy.cfg
Unit file :/usr/lib/systemd/system/haproxy.service
配置段:
global :全局配置段
進程及安全配置相關的參數
性能調整相關參數
Debug 參數
proxies :代理配置段
defaults :為frontend, backend, listen 提供預設配置
fronted :前端,相當於nginx, server {}
backend :後端,相當於nginx, upstream {}
listen :同時擁有前端和後端,
簡單的配置示例:
frontend web
bind *:80
default_backend websrvs
backend websrvs
balance roundrobin
server srv1 172.16.0.6:80 check
server srv2 172.16.0.7:80 check