RabbitMQ—運維篇

RabbitMQ安裝

  • RabbitMQ需要依賴erlang,如果普通安裝需要安裝erlang并保證二者兼容,因此選擇較為簡單的docker安裝方式

1.獲取rabbitmq鏡像

docker pull rabbitmq:3.11.19-management #rabbitmq-management表示帶有客戶端(控制臺)
docker pull rabbitmq:3.11.19 #如果只要服務端

2.啟動rabbitmq容器

docker run \
-d \
--name rabbitmq \
--hostname=rabbitmqNode1 \ #設置hostname,后續做集群時方便管理,這里將rabbitmq設為節點1
-v rabbitmq-plugins:/plugins \ #將rabbitmq的plugin目錄進行掛載,以便后續進行安裝rabbitmq插件
-v rabbitmq:/var/lib/rabbitmq \
-e RABBITMQ_DEFAULT_USER=admin \ #設置rabbitmq管理賬戶為admin、密碼為admin
-e RABBITMQ_DEFAULT_PASS=admin \
-e RABBITMQ_ERLANG_COOKIE='rabbitcookie' \ #集群部署時,Erlang Cookie 值必須都相同
-p 15672:15672 \ #15672是客戶端的端口,5672是服務端的端口
-p 5672:5672 \
--restart=always \
rabbitmq:3.11.19-management

3.開啟防火墻

firewall-cmd --zone=public --add-port=5672/tcp --permanent
firewall-cmd --zone=public --add-port=15672/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-all # 查看已經開放的端口號

3.測試rabbitmq是否安裝完成

  • 訪問部署IP:15672,觀察rabbitmq是否正常部署

RabbitMQ集群

  • RabbitMQ集群部署時,必須保證Erlang Cookie相同

普通集群模式

  • 目的:提高MQ的吞吐量

  • 原理:普通集群模式下,broker之間復制元數據

    1. 生產者給一個broker發送消息,消費者連接的是另一個broker
    2. 生產者連接的broker會將消息轉發給消費者的broker,這樣就實現了分離消費端和生產端
  • 普通集群模式進一步提高了MQ效率,但不保證高可用,如果一個節點宕機仍然會丟失消息

#如果要再加第三個節點就再--link
docker run -d --name rabbitmqCluster02 --hostname=node2 -v rabbitmqCluster02.plugins:/plugins -v rabbitmqCluster02:/var/lib/rabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' -p 15673:15672 -p 5673:5672 --link rabbitmqCluster01:node1 rabbitmq:3.11.19-management
#節點2,進入容器,開啟集群
rabbitmqctl stop_apprabbitmqctl resetrabbitmqctl join_cluster  rabbit@node1rabbitmqctl start_app#節點1,進入容器,重載配置
rabbitmqctl stop_apprabbitmqctl resetrabbitmqctl start_app
#這里加了一個--add-host,即將集群中其他的節點加入,這樣才能相互通信
#這里演示一主一從,創建node1節點時就將node2節點也加入,如果如果需要多個就增加幾個add-host參數即可
docker run \
-d \
--name rabbitmq \
-v rabbitmq-plugins:/plugins \
-v rabbitmq:/var/lib/rabbitmq \
--hostname=node1 \
--add-host=node2:192.168.1.43 \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=admin \
-e RABBITMQ_ERLANG_COOKIE='rabbitcookie' \
-p 4369:4369 \
-p 25672:25672 \
-p 15672:15672 \
-p 5672:5672 \
--restart=always \
rabbitmq:3.11.19-managementdocker run \
-d \
--name rabbitmq \
-v rabbitmq-plugins:/plugins \
-v rabbitmq:/var/lib/rabbitmq \
--hostname=node2 \
--add-host=node1:192.168.1.35 \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=admin \
-e RABBITMQ_ERLANG_COOKIE='rabbitcookie' \
-p 4369:4369 \
-p 25672:25672 \
-p 15672:15672 \
-p 5672:5672 \
--restart=always \
rabbitmq:3.11.19-management

鏡像隊列

  • 目的:解決普通集群環境下高可用的問題

  • 原理

    • 隊列內容通過主從復制同步到多個節點,主節點處理讀寫請求,從節點實時同步數據
    • 主節點故障時,從節點通過選舉機制自動接管,服務無感知切換
  • 鏡像隊列雖然實現了高可用,但消息在節點間同步時出現宕機,仍有可能丟失消息

  • 加入集群

    # Node2/Node3執行
    rabbitmqctl stop_app
    rabbitmqctl reset
    rabbitmqctl join_cluster --ram rabbit@rabbit1  # Node1為磁盤節點,其他可設為內存節點
    rabbitmqctl start_app
    
  • 驗證集群狀態

    rabbitmqctl cluster_status
    # 輸出應包含所有節點,且running_nodes列表完整
    
  • 創建鏡像策略

    # 將所有隊列設置為鏡像隊列(全量同步)
    rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'# 或指定隊列前綴(如以"mirror_"開頭的隊列)
    rabbitmqctl set_policy ha-mirror "^mirror_" '{"ha-mode":"exactly","ha-params":2}'
    

仲裁隊列

  • 目的:類似于redis的哨兵機制,進一步減小了消息丟失的風險

  • 原理

    1. 多數派確認:消息需被超過半數節點(如3節點集群需2個確認)持久化后才返回成功響應,確保數據安全
    2. 選舉機制:若Leader宕機,Followers通過Raft協議發起選舉,新Leader需獲多數節點投票,避免腦裂
  • 隊列聲明與配置

Map<String, Object> arguments = new HashMap<>();
arguments.put("x-queue-type", "quorum");  // 聲明為Quorum隊列
channel.queueDeclare("test-quorum-queue", true, false, false, arguments);

Streams隊列

  • 目的:數據分片,進一步提高了傳輸性能

  • 隊列聲明與配置

Map<String, Object> args = new HashMap<>();
args.put("x-queue-type", "stream");       // 必須設置為stream
args.put("x-max-length-bytes", 20_000_000_000L); // 最大20GB
args.put("x-stream-max-segment-size-bytes", 100_000_000); // 每段100MB
channel.queueDeclare("my-stream", true, false, false, args);

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

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

相關文章

【學習K230-例程21】GT6700-UDP-Client

B站視頻 UDP 簡介 UDP 是 User Datagram Protocol 的簡稱&#xff0c;中文名是用戶數據報協議&#xff0c;是 OSI&#xff08;Open SystemInterconnection&#xff0c;開放式系統互聯&#xff09;參考模型中一種無連接的傳輸層協議&#xff0c;提供面向事務的簡單不可靠信息傳送…

LazyLLM教程 | 第9講:微調實踐:讓大模型和向量模型更懂你的領域

前面教程中&#xff0c;我們通過優化檢索策略、召回重排略以及基于大模型的查詢重寫策略來提升了RAG系統的檢索精度&#xff0c;但最終回復的結果還需要經過大模型的融合和處理&#xff0c;模型能力的強弱直接影響到最終的結果。這就好比一道好的菜不僅需要有高質量的食材&…

六、vue3后臺項目系列——頁面自適應設計+pinia,vuex的使用

前言&#xff1a;在頁面加入自適應是提高用戶體驗的一種形式&#xff0c;甚至有時候是手機用戶&#xff0c;我們就需要做一個自適應處理&#xff0c;其中肯定會涉及一些狀態條件的判斷&#xff0c;而這些關鍵的條件就是我們用來切換樣式的關鍵&#xff0c;所以我們需要使用狀態…

視頻講解|Python用ResNet殘差神經網絡在大腦出血CT圖像描數據預測應用

全文鏈接&#xff1a;https://tecdat.cn/?p43843 原文出處&#xff1a;拓端抖音號拓端tecdat 分析師&#xff1a;Zikun Zhang 視頻講解Python用ResNet殘差神經網絡在大腦出血CT圖像描數據預測在臨床醫療影像診斷中&#xff0c;大腦出血的快速準確識別直接關系到患者的救治效率…

Mysql中有那些鎖

按照鎖的力度分&#xff1a;1.行級鎖2.表級鎖3.全局鎖4.頁級鎖innodb不支持頁鎖全局鎖全局鎖指的是對整個數據庫實例加鎖&#xff0c;一般用于數據庫的表級鎖表鎖 是對整張表進行加鎖。表級鎖還有以下幾種&#xff1a;意向鎖&#xff1a;意向鎖是指&#xff0c;我們在事務請求表…

基于 CoT 思維鏈協調多 MCP 工具:依托亞馬遜云科技服務打造全流程智能的 Amazon Redshift 運維體系

基于 CoT 思維鏈協調多 MCP 工具&#xff1a;依托亞馬遜云科技服務打造全流程智能的 Amazon Redshift 運維體系 新用戶可獲得高達 200 美元的服務抵扣金 亞馬遜云科技新用戶可以免費使用亞馬遜云科技免費套餐&#xff08;Amazon Free Tier&#xff09;。注冊即可獲得 100 美元的…

手機群控平臺的智能管控技術深度解析

手機群控平臺作為數字化運營的核心工具&#xff0c;正在重塑移動設備管理的技術邊界。其核心價值在于通過集中化控制實現批量化操作&#xff0c;同時借助智能化算法提升管控效率。本文將深入探討其技術架構與實現方案。平臺架構與核心技術手機群控平臺采用分布式架構設計&#…

Spring Boot 生命周期與核心擴展點全解析(含實操案例)

在Spring Boot開發中,理解應用的生命周期是實現優雅啟動、資源管理與故障處理的關鍵。不同于傳統Spring框架需要繁瑣的XML配置,Spring Boot通過自動配置簡化了開發流程,但其生命周期的底層邏輯仍延續并增強了Spring的核心機制。本文將從“生命周期階段劃分”“核心擴展點原理…

69-SQLite應用

1. SQLite操作 1.1了解數據庫1.2 操作數據庫步驟# -*- coding: utf-8 -*- """ Project : 01-python-learn File : 03_SQLite3添加數據.py IDE : PyCharm Author : 劉慶東 Date : 2025/9/15 14:05 """ # 1. 導入模塊 import sqlite3 …

Nginx - 正向vs反向代理

參考: https://blog.csdn.net/william_n/article/details/127387009 AI問答?? Nginx 正向代理 vs 反向代理詳解?? ??1. 正向代理&#xff08;Forward Proxy&#xff09;?? ??定義?? ??客戶端主動配置??的代理服務器&#xff0c;代表客戶端向外部服務器發送請…

裝飾器模式在Spring中的案例

設計模式-裝飾器模式 裝飾器模式所解決的問題是&#xff0c;在不改變原來方法代碼的情況下對方法進行修飾&#xff0c;從而豐富方法功能。 Spring架構中的裝飾器模式 在Spring架構中&#xff0c;以線程池進行舉例。 線程池 線程池是一個對線程集中管理的對象&#xff0c;集中管…

云原生與 AI 驅動下的數據工程新圖景——解讀 DZone 2025 數據工程趨勢報告【附報告下載】

在 AI 技術從“實驗性”走向“企業級落地”的關鍵階段&#xff0c;數據工程作為底層支撐的重要性愈發凸顯。近日&#xff0c;DZone 發布的《2025 數據工程趨勢報告》&#xff08;Scaling Intelligence with the Modern Data Stack&#xff09;通過對全球 123 位 IT 專業人士的調…

9.5 機器翻譯與數據集

語言模型是自然語言處理的關鍵&#xff0c;而機器翻譯是語言模型最成功的基準測試&#xff0c;因為機器翻譯正是將輸入序列轉換成輸出序列的序列轉換模型的核心問題。序列轉碼模型在各類現代人工智能應用中國呢發揮著至關重要的作用&#xff0c;因此我們將其作為本章剩余部分和…

Linux 內核鏡像與啟動組件全解析:從 vmlinux 到 extlinux.conf

&#x1f9e0; Linux 內核鏡像與啟動組件全解析&#xff1a;從 vmlinux 到 extlinux.conf 在嵌入式 Linux 系統中&#xff0c;啟動流程涉及多個關鍵文件和機制。不同的鏡像格式和配置文件承擔著不同的職責&#xff0c;從內核編譯到 bootloader 加載&#xff0c;再到系統啟動。本…

【系統分析師】2024年下半年真題:論文及解題思路

更多內容請見: 備考系統分析師-專欄介紹和目錄 文章目錄 試題一:論devops在企業信息系統開發中的應用 試題二:論系統業務流程分析方法及應用 試題三:論軟件測試方法及應用 試題四:論信息系統運維管理 試題一:論devops在企業信息系統開發中的應用 1、概要敘述你參與管理和…

AI GEO 實戰:借百度文小言優化,讓企業名稱成搜索熱詞

在當今數字化浪潮中&#xff0c;企業的線上曝光度和搜索可見性至關重要。百度作為國內占據主導地位的搜索引擎&#xff0c;其推出的大模型文小言蘊含著巨大的潛力。通過巧妙運用 AI GEO&#xff08;生成式引擎優化&#xff09;策略&#xff0c;企業完全有可能讓自己的公司名稱成…

文件操作知識點總結

目錄 1.為什么使用文件 2.什么是文件&#xff1f; 2.1 程序文件 2.2 數據文件 2.3 文件名 3.二進制文件和文本文件 4.文件的打開和關閉 4.1 流和標準流 4.1.1 流 4.1.2 標準流 4.2 文件指針 4.3 文件的打開和關閉 4.3.1 fopen函數 4.3.2 fclose函數 5.文件的順序…

oracle認證有哪幾種?如何選擇

Oracle&#xff08;甲骨文&#xff09;不僅是全球領先的數據庫軟件巨頭&#xff0c;更是企業級數據管理的代名詞&#xff0c;獲得Oracle認證&#xff0c;證明可從事Oracle數據庫服務器的數據操作和管理等工作。下面給大家詳細其主要認證類型及其在職業發展中的含金量&#xff0…

AppTest邀請測試測試流程

相比AppGallery邀請測試&#xff0c;AppTest邀請測試具備以下全新能力&#xff1a;若您同時發布了多個測試版本&#xff0c;AppTest支持測試版本自動升級到最新的測試版本。您可以選擇將當前最新在架版本的應用介紹截圖展示給測試人員&#xff0c;視覺效果更好&#xff0c;提升…

硬件 - oring多電源切換

目錄 一、ORing電路 1.1 ORING 電路 1.2 ORING 電路關鍵部分 二、多電源切換 2.1 主要思路 2.2 適用場景 一、ORing電路 1.1 ORING 電路 中文常稱 “或環電路” 或 “并聯冗余電路”是一種電源并聯冗余拓撲結構 核心功能&#xff1a;將多路獨立電源的輸出 “并聯整合”&a…