如何用HAProxy+Nginx實現負載均衡


一、什么是HAProxy

HAProxy提供高可用性、負載均衡以及基於TCP和HTTP應用的代理,支持虛擬主機,它是免費、快速並且可靠的一種解決方案。HAProxy特別適用於那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。HAProxy運行在當前的硬件上,完全可以支持數以萬計的並發連接。並且它的運行模式使得它可以很簡單安全的整合進您當前的架構中, 同時可以保護你的web服務器不被暴露到網絡上。

HAProxy實現了一種事件驅動, 單一進程模型,此模型支持非常大的並發連接數。多進程或多線程模型受內存限制 、系統調度器限制以及無處不在的鎖限制,很少能處理數千並發連接。事件驅動模型因為在有更好的資源和時間管理的用戶空間(User-Space) 實現所有這些任務,所以沒有這些問題。此模型的弊端是,在多核系統上,這些程序通常擴展性較差。這就是為什么他們必須進行優化以 使每個CPU時間片(Cycle)做更多的工作。

二、安裝HAProxy

wget http://www.haproxy.org/download/1.5/src/haproxy-1.5.14.tar.gz (在牆外)。
tar zxvf haproxy-1.5.14.tar.gz
uname -a # 查看linux內核版本
make TARGET=linux26 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy
啟動 haproxy [root@localhost sbin]# haproxy -f /etc/haproxy/haproxy.cfg

  • 配置文件 /etc/haproxy.cfg, haproxy的配置文件內容很多很靈活,以下只配置簡單的一些內容。
global
	log 127.0.0.1	local0
	log 127.0.0.1	local1 notice
	#log loghost	local0 info
	maxconn 4096
	chroot /var/haproxy
	uid 99
	gid 99
	daemon
        nbproc  1  
	#debug
	#quiet

defaults
	log	global
	mode	http
	option	httplog
	option	dontlognull
	retries	3
	option redispatch # 自動重定向到健康機器
	maxconn	2000
	timeout check 2000ms # 檢查超時
 	timeout connect 5000ms # 連接超時
 	timeout client 50000ms # 客戶端連接超時
 	timeout server 50000ms # 服務端連接超時


listen webinfo :1080  
       mode http  
       balance roundrobin  
       stats uri /ha_status
       option httpclose  
       option forwardfor  
	   server web1 192.168.163.34:80 check weight 1 minconn 1 maxconn 3 check inter 40000  
	   server web2 192.168.163.35:80 check weight 1 minconn 1 maxconn 3 check inter 40000

#配置控制台
listen stats :6553
       mode http
       transparent
       stats uri / haproxy-stats
       stats realm Haproxy \ statistic
       stats auth admin:admin

三、測試

這里共有3台機器,IP分別是192.168.163.33,192.168.163.34,192.168.163.35 。
33這台機器裝的是haproxy,34和35兩台機器裝的是nginx。
nginx的安裝參考前一篇nginx安裝

- 192.168.163.34:80測試

- 192.168.163.35:80測試

- 請求過來被輪詢分配到webinfo組的web1和web2,分別是

web1 192.168.163.34:80
web2 192.168.163.35:80

- 環境准備好了,測試192.168.163.33,將會輪訓到2台機器如下:

paproxy的控制台,參考haproxy.cfg里面的配置
http://192.168.163.33:6553/haproxy-stats

- 在ip為33這台機器,通過haproxy分配到2台nginx機器上,壓力測試

[root@localhost ~]# ab -c 1 -n 10000 http://192.168.163.33:1080/ 結果

- 在ip為33這台機器,測試ip為34的nginx機器

[root@localhost ~]# ab -c 1 -n 10000 http://192.168.163.34:80/index.html 結果

- 通過上面的是測試可見通過haproxy分流之后效率降低了。不如單台nginx。參考

現在HAProxy的算法也非常多,並不比專業的F5/LVS算法少,常用的算法有如下8種:
balance roundrobin,表示簡單的輪詢,建議關注;
balance static-rr,表示根據權重,建議關注;
balance leastconn,表示最少連接者先處理,建議關注;
balance source,表示根據請求源IP,跟Nginx的ip_hash算法相似,建議關注;
balance uri,表示根據請求的URI;
balance url_param,表示根據請求的URl參數;
balance hdr(name),表示根據HTTP請求頭來鎖定每一次HTTP請求;
balance rdp-cookie(name),表示根據據cookie(name)來鎖定並哈希每一次TCP請求。

參考文章

http://blog.haohtml.com/archives/7959
http://www.open-open.com/lib/view/open1388290883344.html
https://tyr.so/haproxy.html
http://www.haproxy.org

感謝

30多歲老程序員碼字不容易,且碼且珍惜。歡迎大家留言,亦師亦友共同交流。長按下方二維碼關注我的公眾號。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM