目錄
- 1.背景
- 2.目的
- 3.HAProxy 簡介
- 4.HAProxy 優點
- 5. HAProxy配置說明
- 6. 部署腳本
- 參考資料
1.背景
在haproxy 2.0 版本之前,prometheus 提供了haproxy_exporter 來對HAProxy進行監控,haproxy 從 2.0 版本開始不再需要使用 haproxy_exporter 進行監控,因為 haproxy 提供了原生的 Prometheus 導出功能。也就是說,從 haproxy 2.0 版本開始,可以直接使用 Prometheus 監控 haproxy,而無需使用額外的 exporter 了。
2.目的
通過Docker 部署HAProxy v2.2.29 并開放指標接口,下面有一鍵部署腳本,供參考
3.HAProxy 簡介
haproxy提供高可用性、負載均衡以及基于TCP(第四層)和HTTP(第七層)應用的代理,支持虛擬主機,它是免費、快速并且可靠的一種解決方案。
haproxy特別適用于那些負載特別大的web站點,這些站點通常又需要會話保持或七層處理。haproxy運行在時下的硬件上,完全可以支持數以萬計的并發連接,并且它的運行模式使得它可以很簡單安全的整合進您當前的架構中,同時可以保護你的web服務器不被暴露到網絡上。
haproxy實現了一種事件驅動、單一進程模型,此模型支持非常大的并發連接數。多進程或多線程模型受內存限制、系統調度器限制以及無處不在的鎖限制,很少能處理數千并發連接。
事件驅動模型因為在有更好的資源和時間管理的用戶端(User-Space)實現所有這些任務,所以沒有這些問題。此模型的弊端是,在多核系統上,這些程序通常擴展性較差。這就是為什么他們必須進行優化以使每個CPU時間片(Cycle)做更多的工作
4.HAProxy 優點
1.免費開源,穩定性也是非常好。單haproxy也跑得不錯,穩定性可以與硬件級的F5相媲美。
2.根據官方文檔,haproxy可以跑滿10Gbps,這個數值作為軟件級負載均衡器是相當驚人的。
3.haproxy支持連接拒絕:因為維護一個連接的打開的開銷是很低的,有時我們很需要限制攻擊蠕蟲(attack bots),也就是說限制它們的連接打開從而限制它們的危害。這個已經為一個陷于小型DDoS攻擊的網站開發了而且已經拯救了很多站點,這個優點也是其它負載均衡器沒有的。
4.haproxy支持全透明代理(已具備硬件防火墻的典型特點):可以用客戶端IP地址或者任何其他地址來連接后端服務器。這個特性僅在Linux 2.4/2.6內核打了tcp proxy補丁后才可以使用。這個特性也使得為某特殊服務器處理部分流量同時又不修改服務器的地址成為可能。
5.haproxy現多用于線上的Mysql集群環境,我們常用于它作為MySQL(讀)負載均衡。
6.自帶強大的監控服務器狀態的頁面,實際環境中我們結合Nagios進行郵件或短信報警。
7.HAProxy支持虛擬主機。
5. HAProxy配置說明
1.global: (全局配置主要用于設定義全局參數,屬于進程級的配置,通常和操作系統配置有關)
2.default : (配置默認參數,這些參數可以被用到frontend,backend,Listen組件) 在此部分中設置的參數值,默認會自動引用到下面的frontend、backend、listen部分中,因引,某些參數屬于公用的配置,只需要在defaults部分添加一次即可。而如果frontend、backend、listen部分也配置了與defaults部分一樣的參數,Defaults部分參數對應的值自動被覆蓋。
3.frontend:( 接收請求的前端虛擬節點,Frontend可以更加規則直接指定具體使用后端的backend) frontend是在haproxy 1.3版本以后才引入的一個組件,同時引入的還有backend組件。通過引入這些組件,在很大程度上簡化了haproxy配置文件的復雜性。forntend可以根據ACL規則直接指定要使用的后端backend
4.backend : (后端服務集群的配置,真實服務器,一個Backend對應一個或者多個實體服務器) 在HAProxy1.3版本之前,HAProxy的所有配置選項都在這個部分中設置。為了保持兼容性,haproxy新的版本依然保留了listen組件配置項。兩種配置方式任選一中
5.Listen : (Fronted和backend的組合體) 比如haproxy實例狀態監控部分配置
6. 部署腳本
#!/bin/bash CONFIG_PATH=/home/zoms/haproxy/ sudo mkdir $CONFIG_PATH sudo cat > $CONFIG_PATH/haproxy.cfg << EOF global log 127.0.0.1 local0 info # 日志存儲到127.0.0.1,以local0輸入info級別 maxconn 4096 # 最大連接數,要考慮到ulimit -n的大小限制 daemon nbproc 2 # 進程數 defaults log global mode tcp # 使用tcp4層代理模式 option tcplog option dontlognull retries 3 # 在使用基于cookie定向時,一旦后端某一server宕機時,會將會話重新定向至某一上游服務器,必須使用的選項 option redispatch maxconn 4096 timeout connect 5s timeout client 60s #客戶端空閑超時時間 timeout server 15s #服務端超時時間 listen stats # 綁定Prometheus Exporter模塊 bind 0.0.0.0:9090 mode http option http-keep-alive option forwardfor http-request use-service prometheus-exporter if { path /metrics } EOF sudo docker stop haproxy;sudo docker rm haproxy;sudo docker run -d -p 9090:9090 -e HAPROXY_PROMETHEUS_EXPORTER=true --name haproxy -v $CONFIG_PATH/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro haproxy:2.2.29 ;sleep 3;sudo docker ps -a|grep haproxy curl localhost:9090/metrics
拓展了解可訪問參考HAProxy原理和概念以及HAProxy部署
參考資料
haproxy_exporter 監控HAProxy
HAProxy v2.x 官方配置文檔
HAProxy官網
HAProxy部署
HAProxy原理和基本概念