RabbitMq+Haproxy負載均衡


  HAProxy是一個使用C語言編寫的自由及開放源代碼軟件,其提供高可用性、負載均衡,以及基於TCP和HTTP的應用程序代理。
  HAProxy特別適用於那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。HAProxy運行在當前的硬件上,完全可以支持數以萬計的並發連接。並且它的運行模式使得它可以很簡單安全的整合進您當前的架構中, 同時可以保護你的web服務器不被暴露到網絡上。HAProxy實現了一種事件驅動, 單一進程模型並且提供高可用性、負載均衡以及基於TCP和HTTP應用的代理。根據官方數據,其最高極限支持10G的並發。HAProxy支持從4層至7層的網絡交換,即覆蓋所有的TCP協議。就是說,Haproxy 甚至還支持 Mysql 的均衡負載。
HAProxy的特點是:
  1、HAProxy是支持虛擬主機的,,並能支持上萬級別的連接;
  2、能夠補充Nginx的一些缺點比如Session的保持,cookie的引導等工作;
  3、支持url檢測后端的服務器出問題的檢測會有很好的幫助;
  4、它跟LVS一樣,本身僅僅就只是一款負載均衡軟件;單純從效率上來講HAProxy更會比Nginx有更出色的負載均衡速度,在並發處理上也是優於Nginx的;
  5、HAProxy可以對mysql讀進行負載均衡,對后端的MySQL節點進行檢測和負載均衡,不過在后端的MySQL slaves數量超過10台時性能不如LVS
  6、能夠提供4層,7層代理。HAProxy支持兩種主要的代理模式:"tcp"也即4層(大多用於郵件服務器、內部協議通信服務器等),和7層(HTTP)。在4層模式 下,HAProxy僅在客戶端和服務器之間轉發雙向流量,7層模式下,HAProxy會分析協議,並且能通過允許、拒絕、交換、增加、修改或者刪除請求 (request)或者回應(response)里指定內容來控制協議,這種操作要基於特定規則;
  7、HAProxy負載均衡算法具體有如下幾種:
     ①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請求。
實現Rabbitmq+haproxy負載均衡 需如下幾步:
一、安裝Rabbitmq服務
二、搭建Rabbitmq集群服務
三、安裝軟件負載均衡器
  windows下將haproxy文件復制在指定目錄下
  
安裝haproxy;
haproxy.exe -f haproxy.cfg -d  其中, -d會在窗口運行, -D則是后台程序,只能在任務管理器中看到
pidfile haproxy.pid   #相對路徑必須有此文件,否則啟動失敗 
重裝haproxy:
haproxy -f  D:\RabbitMQ\haproxy-1.7.8\haproxy.cfg
重啟haproxy
haproxy restart

四、配置負載均衡文件 目錄haproxy.cfg

global
log D://RabbitMQ//haproxy-1.7.8//log local0 info
log D://RabbitMQ//haproxy-1.7.8//log local1 notice
#chroot /var/lib/haproxy 改變當前工作目錄
#stats socket /run/haproxy/admin.sock mode 660 level admin # 創建監控所用的套接字
目錄
#pidfile /var/run/haproxy.pid # haproxy的pid存放路徑,啟動進程的用戶必須有權限訪問
此文件
maxconn 4000 # 最大連接數,默認4000
#user haproxy 默認用戶
#group haproxy 默認用戶組
daemon # 創建1個進程進入deamon模式運行。此參數要求將運行模
式設置為daemon
defaults
log global
mode tcp # 默認的模式mode { tcp|http|health },tcp是4層,http是7層
,health只會返回OK
option tcplog # 采用Tcp日志格式
option dontlognull # 啟用該項,日志中將不會記錄空連接。所謂空連接就是在上游的負載均
衡器
# 或者監控系統為了探測該 服務是否存活可用時,需要定期的連接或者
獲取某
# 一固定的組件或頁面,或者探測掃描端口是否在監聽或開放等動作被稱
為空連接;
# 官方文檔中標注,如果該服務上游沒有其他的負載均衡器的話,建議不
要使用
# 該參數,因為互聯網上的惡意掃描或其他動作就不會被記錄下來
retries 3 # 3次連接失敗就認為服務不可用,也可以通過后面設置
option abortonclose # 每次請求完畢后主動關閉通道
maxconn 4000
timeout connect 5000 # 連接超時時間(毫秒)
timeout client 3000 # 客戶端連接超時時間(毫秒)
timeout server 3000 # 服務器端連接超時時間(毫秒)
balance roundrobin #負載均衡算法(#banlance roundrobin 輪詢,balance source 保存
session值,支持static-rr,leastconn,first,uri等參數)
listen monitor:8000 #haproxy監控頁面配置
bind 192.168.1.62:8000
mode http
option httplog
stats refresh 5s #統計頁面自動刷新時間
stats uri /stats #統計頁面url
stats realm Haproxy #統計頁面密碼框上提示文本
stats auth admin:admin #統計頁面用戶名和密碼設置
listen rabbitmq_admin
bind 192.168.1.62:15672
server node1 192.168.1.62:15672
server node2 192.168.1.79:15672
listen rabbitmq_cluster
bind 192.168.1.62:5672
mode tcp
option tcplog
balance roundrobin  負載均衡算法
timeout client 3h
timeout server 3h
server node1 192.168.1.62:5672 check inter 2000 rise 2 fall 3 #check inter
2000 是檢測心跳頻率,rise 2是2次正確認為服務器可用,fall 3是3次失敗認為服務器不可用
server node2 192.168.1.79:5672 check inter 2000 rise 2 fall 3

實現配置如下:

五、重啟raproxy服務
haproxy restart

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com