上篇文章:
RabbitMQ—仲裁隊列https://blog.csdn.net/sniper_fandc/article/details/149312579?fromshare=blogdetail&sharetype=blogdetail&sharerId=149312579&sharerefer=PC&sharesource=sniper_fandc&sharefrom=from_link
目錄
1 HAProxy安裝
1.1 安裝HAProxy
1.2 配置haproxy.cfg(配置負載均衡器監聽的服務器和管理界面)
1.3 啟動HAProxy
2 HAProxy使用
????????前面講到消息分發時可以對消費者進行負載均衡,當然面對多節點的RabbitMQ集群,也需要負載均衡。原因如下:
????????1.寫代碼時,我們訪問集群中任何一個節點都可以,但是如果我們訪問的節點宕機,雖然集群還可以正常工作,但是我們的生產者或消費者服務很可能因為無法訪問該節點就崩潰。因此,直接訪問某個節點不太好,需要訪問一個統一的入口,該入口來幫助負載均衡到不同的RabbitMQ節點。
????????2.如果都只訪問集群的某一個節點,容易導致該節點負載過大從而容易崩潰,而其它集群節點很可能比較空閑,因此需要把消息負載均衡到不同的RabbitMQ節點。
????????這里介紹使用其它軟件作為負載均衡器:
1 HAProxy安裝
????????HAProxy是一個開源的負載均衡器和TCP/HTTP應用程序的代理服務器,主要用來提供集群的高可用性、負載均衡和代理功能。HAProxy會把接受的請求分發到多個服務器,以提高網絡的可靠性和性能。
1.1 安裝HAProxy
????????命令:yum -y install haproxy
1.2 配置haproxy.cfg(配置負載均衡器監聽的服務器和管理界面)
????????命令:vim /etc/haproxy/haproxy.cfg
????????配置內容如下:
#haproxy監聽集群配置listen rabbitmq_local_cluster 0.0.0.0:5670 #集群前端IP,供producter和consumer來進行選擇,選擇一個沒有被占用的即可mode tcp #負載均衡選項balance roundrobin #輪詢算法將負載發給后臺服務器server rabbit1 127.0.0.1:5672 check inter 5000 rise 2 fall 3 #負載均衡器監聽的集群節點配置,rabbitmq節點名稱只在負載均衡器中使用(不一定和rabbitmq服務器名稱一樣),每5000秒一次健康檢查,連續3次檢查失敗就停用該服務器,連續2次檢查成功就恢復該服務器。server rabbit2?127.0.0.1:5673 check inter 5000 rise 2 fall 3server rabbit3?127.0.0.1:5674 check inter 5000 rise 2 fall 3#haproxy前端監控頁面配置listen private_monitoring :8100mode httpoption httplogstats enablestats uri /stats #haproxy 前端頁面stats refresh 60s # 60s刷新一次頁面stats auth admin:admin #用戶名和密碼
1.3 啟動HAProxy
????????命令:systemctl start haproxy
2 HAProxy使用
????????開啟HAProxy后,生產者需要把與RabbitMQ連接的ip和端口號改為HAProxy所在的ip和其開發的端口號:
spring:rabbitmq:addresses: amqp://admin:admin@192.168.159.150:5670/testVirtual
????????其它使用就和普通隊列的消息發送無異了:
????@Bean("haproxyQueue")public Queue haproxyQueue(){return QueueBuilder.durable("haproxy.queue").quorum().build();}@RequestMapping("haproxy")public String haproxy() {rabbitTemplate.convertAndSend("", "haproxy.queue", "Hello SpringBoot RabbitMQ");return "發送成功";}
????????運行結果如下:
????????如果讓其中一個節點宕機,生產者也不會出現連接異常,仍然可以發送消息:
????????恢復宕機的節點,由于仲裁隊列的同步能力,消息也同步到宕機節點上:
????????注意:由于增加了負載均衡器,如果Haproxy所在節點也發生宕機,對于客戶端來講就無法與RabbitMQ交互,因此通常會用Keepalived等高可用解決方案對haproxy做主備,在HAProxy主節點故障時自動將流量轉移到備用節點。這也體現了分布式環境解決高可用的特點,就是增加機器用備用節點備份。