RabbitMQ—HAProxy負載均衡

上篇文章:

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主節點故障時自動將流量轉移到備用節點。這也體現了分布式環境解決高可用的特點,就是增加機器用備用節點備份。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/916326.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/916326.shtml
英文地址,請注明出處:http://en.pswp.cn/news/916326.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

QT中啟用VIM后粘貼復制快捷鍵失效

當在QT中啟用FakeVim之后,Ctrl C 和 Ctrl V 快捷鍵就變成 Vim 的快捷鍵了,我希望它還是原來的復制粘貼功能,打開:編輯 > Preferences…,然后勾選 “Pass control keys”即可,如下:

TCP三次握手與四次揮手全解析

🌊 TCP三次握手與四次揮手全解析(含序列號動態追蹤)🔑 TCP 協議核心機制 序列號 (seq):數據字節流的唯一標識(32位循環計數器)確認號 (ack):期望接收的下一個序列號(ack …

7月26號打卡

作業:題目1:計算圓的面積 任務: 編寫一個名為 calculate_circle_area 的函數,該函數接收圓的半徑 radius 作為參數,并返回圓的面積。圓的面積 π * radius (可以使用 math.pi 作為 π 的值)要求:函數接收一…

C++/CLI與標準C++的語法差異(一)

🌌 C/CLI與標準C的語法差異(一)🔬 第一章:類型系統革命 - 徹底解構三語言范式 🧪 1.1 類型聲明語義差異矩陣 #mermaid-svg-L5kQ3iy05pKo4vIj {font-family:"trebuchet ms",verdana,arial,sans-se…

輸電線路微氣象在線監測裝置:保障電網安全的科技屏障

在電力傳輸網絡中,輸電線路微氣象在線監測裝置通過集成專業傳感器與智能分析技術,實現對線路周邊環境參數的實時采集與動態分析,為電網運行安全提供數據支撐。該設備針對輸電線路特殊工況設計,具備高適應性、高可靠性特點。工作原…

基于springboot的圖書借閱系統

用戶:借閱信息管理,續借信息管理,還書信息管理,圖書信息,系統公告,留言板,我的中心管理員:圖書信息管理,圖書類型管理,借閱信息管理,續借信息管理…

Xinference vs SGLang:詳細對比分析

概述對比特性XinferenceSGLang定位通用AI模型推理平臺高性能LLM服務框架專注領域多模態模型統一接口LLM推理性能優化設計理念易用性和兼容性性能和效率核心架構對比 Xinference 架構特點 Xinference 架構: ├── API層(REST/CLI/Python) ├─…

雙非上岸985!專業課140分經驗!信號與系統考研專業課140+上岸中南大學,通信考研小馬哥

一.經驗分享個人情況:初試總分377,政治59,英語二75、數學二103、專業課140。本科為湖南一所雙非一本,專業是電子信息工程,本科成績一般,無獎學金無評優無科研競賽,屬于三無人員&…

配置DNS正反向解析

服務端master配置:yum install bind -y配置靜態ip:修改配置文件:主:區域:正向解析:反向解析:開啟服務:客戶端node1配置:yum install nginx -y配置靜態ip:使用xftp將文…

MyBatis-Plus 通用 Service

引言 在開發 Java Web 應用程序時,我們經常需要進行大量的數據庫操作,如創建、讀取、更新和刪除(CRUD)。MyBatis-Plus 作為一個強大的 MyBatis 增強工具,為我們提供了通用 Service 接口,極大地簡化了這些操…

聚類-一種無監督分類算法

目錄 1、聚類任務 2、性能度量 (1)外部指標 (2)內部指標 3、具體聚類方法 (1)原型聚類 (2)密度聚類 (3)層次聚類 “無監督學習”(unsupervised learnin…

ES6 標簽模板:前端框架的靈活利器

ES6(ECMAScript 2015)引入的模板字符串(Template Literals)為 JavaScript 開發者提供了更簡潔的字符串處理方式,而模板字符串標簽(Tagged Template Literals)則進一步擴展了其功能性。通過標簽函…

解鎖編程核心能力:深入淺出數據結構和算法

——為什么它們是你代碼效率的終極武器? 🌟 引言:程序世界的基石 想象你正在建造摩天大樓:數據結構是鋼筋骨架,決定建筑的結構與承重能力;算法則是施工藍圖,指導如何高效完成建造。兩者結合&am…

Jenkins運行pytest時指令失效的原因以及解決辦法

錯誤收集 Started by user 偷走晚霞的人 Running as SYSTEM Building in workspace C:\Users\Administrator\.jenkins\workspace\TestAAA [TestAAA] $ cmd /c call C:\Users\Administrator\AppData\Local\Temp\jenkins5821160869728612887.bat C:\Users\Administrator\.jenkins…

MySQL數據庫本地遷移到云端完整教程

一、準備工作 安裝MySQL客戶端工具獲取云端數據庫連接信息: 主機地址端口號用戶名密碼數據庫名二、本地數據庫導出 mysqldump -h 127.0.0.1 -P 4406 -u root -p 數據庫名 > backup.sql執行后會提示輸入密碼,完成后會在當前目錄生成backup.sql文件 三、…

InvokeRepeating避免嵌套調用

InvokeRepeating嵌套這會導致指數級增長的重復調用堆疊。使用單一協程PeriodicActionRoutine替代所有InvokeRepeating避免方法間相互調用造成的堆疊如果需要多層級時間控制(如主循環子循環):IEnumerator MultiLevelTimer() {float mainInterv…

【工具】好用的瀏覽器AI助手

🧨 一、什么是 Sider? Sider 是一個 Chrome 瀏覽器插件,你可以把它看作一個「網頁邊上的 AI 小助手」。 🗣? 它就像你網頁旁邊的 AI 機器人,可以幫你回答問題、總結文章、翻譯、寫文案、改寫內容、甚至幫你學習英文&…

C++:list(2)list的模擬實現

list的模擬實現一.list與vector1.底層結構的本質區別2.模擬實現的核心差異2.1數據存儲的方式2.2 初始化的過程2.3 插入元素的操作2.4 刪除元素的操作2.5 訪問元素的效率3.總結二.頭文件list.h1. **命名空間與模板**2. **核心數據結構**3. **構造函數**4. **模板參數設計**5. **…

【595驅動8*8點陣】2022-9-11

緣由LED點陣屏只能一次亮一列-嵌入式-CSDN問答 #include "REG52.h" sbit dsP1^0;//數據線 595的14腳 sbit shP1^1;//數據輸入時鐘線 595的11腳 sbit stP1^2;//輸出存儲器鎖存時鐘線 595的12腳 void QuDong595(unsigned char sj) {unsigned char aa8;while(aa--){ds…

AI總結視頻以及谷歌瀏覽器插件安裝步驟

本篇介紹用AI一鍵總結全網視頻內容的獨家方法,支持B站、抖音、小紅書等任何平臺的視頻,提高學習效率,幫助一鍵提取視頻文案、劃分章節,還能生成雙語翻譯,這個方法直接在線總結所有視頻。 一.準備工作: 需要…