在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

RabbitMQ消息隊列解決方案

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 2025-07-08 15:55 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1. 引言

在現(xiàn)代分布式系統(tǒng)架構(gòu)中,消息隊列作為核心組件,承擔(dān)著系統(tǒng)解耦、異步處理、流量削峰等重要職責(zé)。RabbitMQ作為一款成熟的消息隊列中間件,以其高可用性、高可靠性和豐富的特性,成為眾多企業(yè)的首選方案。本文將從運維工程師的角度,詳細(xì)闡述RabbitMQ從單機部署到集群搭建的完整實踐過程。

2. RabbitMQ消息隊列解決方案

2.1 核心特性

RabbitMQ基于AMQP協(xié)議,提供了多種消息傳遞模式,包括點對點、發(fā)布/訂閱、路由、主題等。其核心優(yōu)勢包括:

?高可用性:支持鏡像隊列和集群模式

?持久化:消息和隊列元數(shù)據(jù)可持久化到磁盤

?靈活路由:支持復(fù)雜的路由規(guī)則

?管理界面:提供Web管理控制臺

?插件系統(tǒng):豐富的插件生態(tài)

2.2 應(yīng)用場景

?異步處理:訂單處理、郵件發(fā)送、日志處理

?系統(tǒng)解耦:微服務(wù)間通信、模塊間解耦

?流量削峰:高并發(fā)場景下的緩沖處理

?數(shù)據(jù)分發(fā):實時數(shù)據(jù)同步、事件驅(qū)動架構(gòu)

3. Local部署

3.1 架構(gòu)圖

          ┌─────────────────────────────────────────┐
          │       RabbitMQ Server      │
          │                     │
          │ ┌─────────────┐ ┌─────────────────┐  │
          │ │  Exchange │ │   Queue    │  │
          │ │       │ │         │  │
          │ │ ┌─────────┐│ │ ┌─────────────┐ │  │
          │ │ │ Routing ││ │ │  Message  │ │  │
          │ │ │ Rules ││ │ │  Store  │ │  │
          │ │ └─────────┘│ │ └─────────────┘ │  │
          │ └─────────────┘ └─────────────────┘  │
          │                     │
          └─────────────────────────────────────────┘
                    │
          ┌───────────────────────────────────────────┐
          │                      │
       ┌─────────────┐           ┌─────────────┐
       │ Producer  │           │ Consumer  │
       │ Application │           │ Application │
       └─────────────┘           └─────────────┘

3.2 安裝部署

# CentOS/RHEL 系統(tǒng)安裝
sudoyum install -y epel-release
sudoyum install -y rabbitmq-server

# 啟動RabbitMQ服務(wù)
sudosystemctlenablerabbitmq-server
sudosystemctl start rabbitmq-server

# 啟用管理插件
sudorabbitmq-pluginsenablerabbitmq_management

# 創(chuàng)建管理用戶
sudorabbitmqctl add_user admin admin123
sudorabbitmqctl set_user_tags admin administrator
sudorabbitmqctl set_permissions -p / admin".*"".*"".*"

3.3 配置優(yōu)化

# 編輯配置文件 /etc/rabbitmq/rabbitmq.conf
vm_memory_high_watermark.relative = 0.6
disk_free_limit.relative = 2.0
log.file.level = info
collect_statistics_interval = 10000

# 環(huán)境變量配置
exportRABBITMQ_NODENAME=rabbit@localhost
exportRABBITMQ_NODE_PORT=5672
exportRABBITMQ_MANAGEMENT_PORT=15672

4. Cluster部署

4.1 架構(gòu)圖

               ┌─────────────────────────────────────────┐
               │      RabbitMQ Cluster       │
               │                     │
               │ ┌─────────────┐ ┌─────────────────┐  │
               │ │  Node 1  │ │   Node 2   │  │
               │ │(rabbit@mq1) │ │ (rabbit@mq2)  │  │
               │ │       │ │         │  │
               │ │ Exchange  │ │  Exchange   │  │
               │ │ Queue   │ │  Queue    │  │
               │ │       │ │         │  │
               │ └─────────────┘ └─────────────────┘  │
               │     │         │      │
               │     └──────────────────┘      │
               │                     │
               │ ┌─────────────────────────────────┐  │
               │ │      Node 3        │  │
               │ │    (rabbit@mq3)       │  │
               │ │                 │  │
               │ │     Exchange        │  │
               │ │     Queue          │  │
               │ │                 │  │
               │ └─────────────────────────────────┘  │
               └─────────────────────────────────────────┘
                         │
               ┌─────────────────────────────────────────┐
               │       Load Balancer       │
               │      (HAProxy/Nginx)       │
               └─────────────────────────────────────────┘
                         │
               ┌─────────────────────────────────────────┐
               │                     │
            ┌─────────────┐           ┌─────────────┐
            │ Producer  │           │ Consumer  │
            │ Application │           │ Application │
            └─────────────┘           └─────────────┘

4.2 集群搭建

# 在所有節(jié)點上安裝RabbitMQ
sudoyum install -y rabbitmq-server

# 確保所有節(jié)點hostname解析正確
echo"192.168.1.10 mq1">> /etc/hosts
echo"192.168.1.11 mq2">> /etc/hosts
echo"192.168.1.12 mq3">> /etc/hosts

# 同步Erlang Cookie (在所有節(jié)點執(zhí)行)
sudosystemctl stop rabbitmq-server
sudoscp /var/lib/rabbitmq/.erlang.cookie mq2:/var/lib/rabbitmq/
sudoscp /var/lib/rabbitmq/.erlang.cookie mq3:/var/lib/rabbitmq/
sudochownrabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
sudochmod400 /var/lib/rabbitmq/.erlang.cookie

# 啟動服務(wù)
sudosystemctl start rabbitmq-server

# 在mq2和mq3節(jié)點上加入集群
sudorabbitmqctl stop_app
sudorabbitmqctl reset
sudorabbitmqctl join_cluster rabbit@mq1
sudorabbitmqctl start_app

# 查看集群狀態(tài)
sudorabbitmqctl cluster_status

4.3 鏡像隊列配置

# 設(shè)置鏡像隊列策略
sudorabbitmqctl set_policy ha-all"^ha."'{"ha-mode":"all","ha-sync-mode":"automatic"}'

# 設(shè)置高可用策略
sudorabbitmqctl set_policy ha-two"^two."'{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'

5. Admin工具

5.1 Web管理界面

Web管理界面是RabbitMQ最直觀的管理工具,提供了全面的監(jiān)控和管理功能:

?Overview頁面:顯示集群整體狀態(tài)、連接數(shù)、隊列數(shù)、消息速率等關(guān)鍵指標(biāo)

?Connections頁面:監(jiān)控客戶端連接狀態(tài),可強制關(guān)閉異常連接

?Channels頁面:管理通道狀態(tài),監(jiān)控消息傳輸情況

?Exchanges頁面:管理交換器,查看路由規(guī)則和綁定關(guān)系

?Queues頁面:監(jiān)控隊列狀態(tài),包括消息數(shù)量、消費者數(shù)量、內(nèi)存使用等

?Admin頁面:用戶權(quán)限管理、虛擬主機配置、策略設(shè)置

5.2 命令行工具

# 常用監(jiān)控命令
rabbitmqctl list_queues name messages consumers
rabbitmqctl list_exchanges nametype
rabbitmqctl list_connections name state
rabbitmqctl list_channels connection name

# 性能監(jiān)控
rabbitmqctleval'rabbit_vm:memory().'
rabbitmqctleval'rabbit_disk_monitor:get_disk_free_limit().'

5.3 監(jiān)控腳本

#!/bin/bash
# RabbitMQ監(jiān)控腳本
check_rabbitmq_status() {
 localnode=$1
 localresult=$(rabbitmqctl -n$nodenode_health_check 2>/dev/null)
 if[[ $? -eq 0 ]];then
   echo"Node$nodeis healthy"
 else
   echo"Node$nodeis unhealthy"
   # 發(fā)送告警
    send_alert"RabbitMQ node$nodeis down"
 fi
}

# 檢查所有節(jié)點
fornodeinrabbit@mq1 rabbit@mq2 rabbit@mq3;do
  check_rabbitmq_status$node
done

6. 主備自動切換

6.1 HAProxy配置

# /etc/haproxy/haproxy.cfg
global
  daemon
 log127.0.0.1:514 local0
 chroot/var/lib/haproxy
  user haproxy
  group haproxy

defaults
  mode tcp
 timeoutconnect 5000ms
 timeoutclient 50000ms
 timeoutserver 50000ms

listen rabbitmq_cluster
 bind0.0.0.0:5672
  option tcplog
  balance roundrobin
  server mq1 192.168.1.10:5672 check inter 2000 rise 2 fall 3
  server mq2 192.168.1.11:5672 check inter 2000 rise 2 fall 3
  server mq3 192.168.1.12:5672 check inter 2000 rise 2 fall 3

listen rabbitmq_admin
 bind0.0.0.0:15672
  balance roundrobin
  server mq1 192.168.1.10:15672 check inter 2000 rise 2 fall 3
  server mq2 192.168.1.11:15672 check inter 2000 rise 2 fall 3
  server mq3 192.168.1.12:15672 check inter 2000 rise 2 fall 3

6.2 Keepalived配置

# /etc/keepalived/keepalived.conf
vrrp_script chk_haproxy {
  script"/bin/bash -c 'ps -C haproxy --no-header |wc -l'"
  interval 2
  weight -2
  fall 3
  rise 2
}

vrrp_instance VI_1 {
  state MASTER
  interface eth0
  virtual_router_id 51
  priority 100
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass 1111
  }
  virtual_ipaddress {
    192.168.1.100
  }
  track_script {
    chk_haproxy
  }
}

7. 集群落地與實現(xiàn)

7.1 部署策略

在生產(chǎn)環(huán)境中,集群部署需要考慮多個維度:

硬件配置:建議每個節(jié)點配置至少4核CPU、8GB內(nèi)存、SSD存儲,確保足夠的I/O性能。

網(wǎng)絡(luò)架構(gòu):采用三層網(wǎng)絡(luò)架構(gòu),將RabbitMQ集群部署在內(nèi)網(wǎng),通過負(fù)載均衡器對外提供服務(wù)。

存儲規(guī)劃:消息持久化目錄建議使用獨立的高性能存儲,定期備份重要數(shù)據(jù)。

7.2 容量規(guī)劃

# 容量評估腳本
#!/bin/bash
calculate_capacity() {
 localmsg_size=$1   # 平均消息大小(bytes)
 localmsg_rate=$2   # 每秒消息數(shù)
 localretention_time=$3# 消息保留時間(seconds)
 
 localtotal_messages=$((msg_rate * retention_time))
 localstorage_needed=$((total_messages * msg_size))
 
 echo"預(yù)估存儲需求:$((storage_needed / 1024 / 1024))MB"
 echo"預(yù)估內(nèi)存需求:$((storage_needed / 10 / 1024 / 1024))MB"
}

# 示例計算
calculate_capacity 1024 1000 3600 # 1KB消息,1000條/秒,保留1小時

7.3 運維自動化

# 集群自動部署腳本
#!/bin/bash
deploy_rabbitmq_cluster() {
 localnodes=("mq1""mq2""mq3")
 localmaster_node=${nodes[0]}
 
 # 在所有節(jié)點安裝RabbitMQ
 fornodein"${nodes[@]}";do
    ssh$node"yum install -y rabbitmq-server"
    ssh$node"systemctl enable rabbitmq-server"
 done
 
 # 同步Erlang Cookie
 fornodein"${nodes[@]:1}";do
    scp$master_node:/var/lib/rabbitmq/.erlang.cookie$node:/var/lib/rabbitmq/
    ssh$node"chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie"
 done
 
 # 啟動服務(wù)并組建集群
 fornodein"${nodes[@]}";do
    ssh$node"systemctl start rabbitmq-server"
 done
 
 # 從節(jié)點加入集群
 fornodein"${nodes[@]:1}";do
    ssh$node"rabbitmqctl stop_app"
    ssh$node"rabbitmqctl join_cluster rabbit@$master_node"
    ssh$node"rabbitmqctl start_app"
 done
 
 echo"集群部署完成"
}

7.4 監(jiān)控告警

建立完善的監(jiān)控告警體系是集群運維的關(guān)鍵。需要監(jiān)控的關(guān)鍵指標(biāo)包括:

?節(jié)點狀態(tài):節(jié)點是否在線、內(nèi)存使用率、磁盤空間

?隊列狀態(tài):消息積壓、消費者數(shù)量、消息處理速率

?連接狀態(tài):客戶端連接數(shù)、通道使用情況

?集群狀態(tài):分區(qū)檢測、同步狀態(tài)、鏡像隊列狀態(tài)

8. 總結(jié)

RabbitMQ集群的成功實施需要綜合考慮架構(gòu)設(shè)計、部署策略、運維管理等多個方面。通過本文的實踐指導(dǎo),運維工程師可以建立起一套完整的RabbitMQ集群解決方案,確保消息隊列服務(wù)的高可用性和高性能。

在實際生產(chǎn)環(huán)境中,還需要根據(jù)具體業(yè)務(wù)需求進行調(diào)優(yōu),建立完善的監(jiān)控體系,制定應(yīng)急預(yù)案,確保集群穩(wěn)定運行。隨著業(yè)務(wù)的發(fā)展,還需要考慮橫向擴展、性能優(yōu)化等高級話題,持續(xù)完善消息隊列基礎(chǔ)設(shè)施。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 集群
    +關(guān)注

    關(guān)注

    0

    文章

    107

    瀏覽量

    17424
  • 消息隊列
    +關(guān)注

    關(guān)注

    0

    文章

    34

    瀏覽量

    3119
  • rabbitmq
    +關(guān)注

    關(guān)注

    0

    文章

    20

    瀏覽量

    1149

原文標(biāo)題:RabbitMQ消息隊列解決方案:從單機到集群的完整運維實踐

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    RabbitMQ中的發(fā)布訂閱模型

    上一篇文章中,簡單的介紹了一下RabbitMQ的work模型。這篇文章來學(xué)習(xí)一下RabbitMQ中的發(fā)布訂閱模型。 發(fā)布訂閱模型(Publish/Subscribe):簡單的說就是隊列里面的消息會被
    的頭像 發(fā)表于 09-25 14:30 ?798次閱讀
    <b class='flag-5'>RabbitMQ</b>中的發(fā)布訂閱模型

    RabbitMQ通信模型中的work模型

    上一篇文章中,簡單的介紹了一下RabbitMQ,以及安裝和hello world。 有的小伙伴留言說看不懂其中的方法參數(shù),這里先解釋一下幾個基本的方法參數(shù)。 // 聲明隊列方法
    的頭像 發(fā)表于 09-25 14:34 ?802次閱讀
    <b class='flag-5'>RabbitMQ</b>通信模型中的work模型

    RabbitMQ是什么

    在工作中經(jīng)常會用到消息隊列處理各種問題,今天指北君帶領(lǐng)大家來學(xué)一個很常用到的技術(shù)-RabbitMQ;接下來還會有關(guān)于RabbitMQ的系列教程,對你有幫助的話記得關(guān)注哦~ RabbitMQ
    的頭像 發(fā)表于 09-25 14:36 ?1199次閱讀
    <b class='flag-5'>RabbitMQ</b>是什么

    RabbitMq入門教程

    RabbitMQ是一個開源的,在AMQP基礎(chǔ)上完整的,可復(fù)用的企業(yè)消息系統(tǒng)。
    的頭像 發(fā)表于 12-04 11:10 ?872次閱讀
    <b class='flag-5'>RabbitMq</b>入門教程

    基于Docker Compose部署RabbitMQ的經(jīng)驗分享

    RabbitMQ 是一個功能強大的開源消息隊列系統(tǒng),它實現(xiàn)了高效的消息通信和異步處理。
    的頭像 發(fā)表于 01-03 10:22 ?2517次閱讀
    基于Docker Compose部署<b class='flag-5'>RabbitMQ</b>的經(jīng)驗分享

    【飛凌嵌入式 RK3399 開發(fā)板性能試用體驗】(安裝RabbitMQ消息隊列服務(wù))

    說明relang安裝成功安裝RabbitMQServer消息隊列服務(wù)apt-get install rabbitmq-server #安裝成功自動啟動查看RabbitMQServer安裝狀態(tài)
    發(fā)表于 10-28 17:03

    Redis 延時隊列,一次性搞明白

    ,對于專業(yè)的消息隊列中間件,如Kafka和RabbitMQ,消費者在消費消息之前要進行一系列的繁瑣過程。 如RabbitMQ發(fā)消息之前要創(chuàng)建 Exchange,再創(chuàng)建 Queue,還要將 Queue 和 Exchange 通過某
    的頭像 發(fā)表于 10-30 16:34 ?2338次閱讀
    Redis 延時<b class='flag-5'>隊列</b>,一次性搞明白

    消息隊列經(jīng)典十連問

    我們通常說的消息隊列,簡稱MQ(Message Queue),它其實就指消息中間件,當(dāng)前業(yè)界比較流行的開源消息中間件包括:RabbitMQ、RocketMQ、Kafka。
    的頭像 發(fā)表于 03-22 10:08 ?1518次閱讀

    RabbitMQ-CN RabbitMQ中文文檔

    RabbitMQ_into_Chinese.zip
    發(fā)表于 04-19 10:51 ?0次下載
    <b class='flag-5'>RabbitMQ</b>-CN <b class='flag-5'>RabbitMQ</b>中文文檔

    如何用Redis實現(xiàn)延遲隊列呢?

    前段時間有個小項目需要使用延遲任務(wù),談到延遲任務(wù),我腦子第一時間一閃而過的就是使用消息隊列來做,比如RabbitMQ的死信隊列又或者RocketMQ的延遲隊列
    的頭像 發(fā)表于 03-16 14:28 ?945次閱讀

    rabbitmq是什么?rabbitmq安裝、原理、部署

    rabbitmq是什么? MQ的全稱是Messagee Queue,因為消息的隊列隊列,所以遵循FIFO 先進先出的原則是上下游傳遞信息的跨過程通信機制。 RabbitMQ是一套開源
    的頭像 發(fā)表于 07-19 13:50 ?1305次閱讀

    RocketMQ和RabbitMQ的區(qū)別

    RocketMQ和RabbitMQ的區(qū)別: 架構(gòu)設(shè)計:RocketMQ是基于主題(Topic)的發(fā)布/訂閱模式,而RabbitMQ則是基于隊列(Queue)的消息代理系統(tǒng)。 語言支持
    的頭像 發(fā)表于 07-24 13:39 ?1.5w次閱讀

    RabbitMQ中的路由模型(direct)

    路由模型 RabbitMQ 提供了五種不同的通信模型,上一篇文章中,簡單的介紹了一下RabbitMQ的發(fā)布訂閱模型模型。這篇文章來學(xué)習(xí)一下RabbitMQ中的路由模型(direct)。 路由模型
    的頭像 發(fā)表于 09-25 11:32 ?744次閱讀

    redis和rabbitMQ的區(qū)別

    Redis和RabbitMQ之間的區(qū)別。 架構(gòu)設(shè)計: Redis是一個內(nèi)存存儲系統(tǒng),它將數(shù)據(jù)存儲在內(nèi)存中,以提供快速的讀寫訪問。因此,Redis的存儲能力受到內(nèi)存大小的限制。它使用發(fā)布/訂閱模式來處理消息隊列,發(fā)布者將消息發(fā)送到頻道,訂閱者從頻道接收消息。
    的頭像 發(fā)表于 12-04 14:48 ?2092次閱讀

    rabbitmq高可用集群搭建

    在進行RabbitMQ搭建時,我們基于現(xiàn)有的連接數(shù)據(jù)和業(yè)務(wù)需求進行了深入分析。目前的統(tǒng)計數(shù)據(jù)顯示,連接數(shù)為631,隊列數(shù)為80418。為了確保業(yè)務(wù)需求的順利滿足,我們需要在云產(chǎn)品和自建RabbitMQ消息
    的頭像 發(fā)表于 03-12 14:29 ?475次閱讀
    <b class='flag-5'>rabbitmq</b>高可用集群搭建
    主站蜘蛛池模板: 狠狠的干狠狠的操 | 欧美在线成人午夜影视 | 国产区一区二区三 | 免费在线观看视频 | 亚色图| 色多多在线看 | 午夜性影院 | 嗯!啊!使劲用力在线观看 | 色综合天天综合网亚洲影院 | 99久久成人国产精品免费 | 色偷偷91久久综合噜噜噜噜 | 91福利视频免费 | 黄 色 录像成 人播放免费99网 | 天天视频色版 | 手机看片国产免费现在观看 | 1515hh四虎免费观com | 国产一区二区三区不卡观 | 四虎最新免费网址 | 中文字幕一区视频 | 亚洲国内精品久久 | 国产特黄1级毛片 | 黄色三级网站免费 | 一本大道加勒比久久综合 | 年下系列高h文 | 午夜大片男女免费观看爽爽爽尤物 | 天天摸天天操免费播放小视频 | xxx色xxx性| 五月婷婷色播 | 永久免费视频网站在线观看 | 亚洲国产色婷婷精品综合在线观看 | 亚洲欧美日韩国产一区二区三区精品 | 午夜视频网址 | 亚洲欧美日韩国产一区二区三区精品 | 亚洲男人的天堂在线播放 | 日本免费网站在线观看 | 国产人免费人成免费视频 | 亚洲人成电影 | 国产伦精品一区二区三区免 | 欲妇放荡叫床很浪的小说 | 亚洲乱淫 | 五月婷婷综合色 |