HAProxy是一個自由及開放源代碼的軟件,由c語言編寫,提供高可用性、負載均衡以及基于TCP和HTTP的應用程序代理。它特別適用于負載特大的web站點,這些站點通常需要會話保持或七層處理。HAProxy運行在當前的硬件上,能夠支持數以萬計的并發連接。其運行模式使得它可以簡單安全地整合到您的架構中,同時保護您的web服務器不被暴露到網絡上。
HAProxy實現了一種事件驅動、單一進程模型,這種模型能夠支持非常大的并發連接數。多進程或多線程模型由于內存限制、系統調度器限制以及無處不在的鎖限制,很少能處理數千并發連接。事件驅動模型因為在有更好的資源和時間管理的用戶空間實現所有這些任務,所以沒有這些問題。然而,在多核系統上,這些程序的擴展性通常較差,因此必須進行優化,以使每個CPU時間片做更多的工作。
知名網站如GitHub、Bitbucket、Stack Overflow、Reddit、Tumblr、Twitter和Tuenti等都使用了HAProxy。此外,亞馬遜網絡服務系統的OpsWorks產品也使用了HAProxy。
安裝
tar zxvf haproxy-1.4.8.tar.gz
cd haproxy-1.4.8
uname -a //查看linux內核版本
make TARGET=linux26 PREFIX=/usr/local/haproxy
make install prefix=/usr/local/haproxy
配置
配置HAProxy Session親緣性的三種方式
haproxy負載均衡保持客戶端和服務器Session親緣性的三種方式:
1 用戶IP 識別
haproxy 將用戶IP經過hash計算后 指定到固定的真實服務器上(類似于Nginx 的IP hash 指令)
配置指令 balance source
2 曲奇 識別
haproxy 將WEB服務端發送給客戶端的cookie中插入(或添加前綴)haproxy定義的后端的服務器COOKIE ID。
配置指令例舉 cookie SESSION_COOKIE insert indirect nocache
用FireBug可以觀察到用戶的請求頭的cookie里 有類似" Cookie jsessionid=0bc588656ca05ecf7588c65f9be214f5; SESSION_COOKIE=app1" SESSION_COOKIE=app1就是haproxy添加的內容
3 session 識別
haproxy 將后端服務器產生的session和后端服務器標識存在haproxy中的一張表里。客戶端請求時先查詢這張表。
配置指令例舉 appsession JSESSIONID len 64 timeout 5h request-learn
配置舉例:
#vi /usr/local/haproxy/haproxy.cfg
mode http
cookie SESSION_COOKIE insert indirect nocache
server REALsrv_70 184.82.239.70:80 cookie 11 check inter 1500 rise 3 fall 3 weight 1
server REALsrv_120 220.162.237.120:80 cookie 12 check inter 1500 rise 3 fall 3 weight 1
backend SOURCE_SRV
mode http
balance source
backend APPSESSION_srv
mode http
appsession JSESSIONID len 64 timeout 5h request-learn
server REALsrv_70 184.82.239.70:80 cookie 11 check inter 1500 rise 3 fall 3 weight 1
server REALsrv_120 220.162.237.120:80 cookie 12 check inter 1500 rise 3 fall 3 weight 1
啟動
#啟動haproxy
/usr/local/haproxy/haproxy -f
#查看是否啟動
[zhangy@BlackGhost haproxy]$ ps -ef|grep haproxy
4859 ? 00:00:00 haproxy
4860 ? 00:00:00 haproxy
測試
[root@BlackGhost haproxy]# /usr/local/bin/webbench -c 100 -t 30 http://localhost:1080/phpinfoPHP
說明
HAProxy監聽的端口是1080,代理192.168.18.2:10000,127.0.0.1:10000
統計監聽的是8888端口 http://localhost:8888/haproxy-stats
版本發布
2012年12月28日 : HAproxy 1.5-dev17 發布。
2012年05月15日,HAproxy 1.5.0 dev10 發布。
2012年05月22日,HAproxy 1.4.21 發布,Web負載均衡。
2012年06月04日,HAproxy 1.5 dev11 發布,該版本修復了 dev8 的很多 bug ,合并和一些新特性,包括服務器的軟起動和停止,同時增加選項用于對整個 URI 進行哈希而不只是路徑,同時增加選項用于當主服務器恢復時停止備用服務器的功能等等,如果你正在使用 dev8 請立即升級。
2012年08月23日,HAproxy 1.4.22 發布,Web負載均衡。
2012年09月10日,HAproxy 1.5 dev12 發布。
2012年09月11日,HAproxy 1.5.0 dev12 發布,該版本最主要的是增加客戶端和服務器端的原生 SSL 支持,其他方面包括新的 ACL 和模式,支持老的 Linux 內核上的 IPv6 透明模式,可通過 nice 關鍵字來修改會話的調度優先級等等。
2012年11月22日,HAproxy 1.5.0 dev13 發布。
2012年12月24日,HAproxy 1.5.0 dev15 發布。
2012年12月28日,HAproxy 1.5.0 dev17 發布。
2019年04月25日,HAproxy 1.8-stable 發布。
2019年04月25日,HAproxy 1.9-stable 發布。
2019年03月26日,HAproxy 2.0-dev 發布。
參考資料 >