RabbitMQ 集群高可用部署詳細介紹

2022-01-02 Java後端

作者 | 張龍豪

連結 | cnblogs.com/knowledgesea/p/6535766.html

清風萬裡的季節,周末本該和親人朋友一起消遣這爛漫的花花草草,或是懶洋洋的曬個太陽聽聽風聲鳥鳴。無奈工作使然,理想使然,我回到啦公司,敲起啦鍵盤,擼起啦代碼,程序狗的世界一片黯然,一片黯然,願天下所有努力的程序狗都夢想成真吧!!

回到正題,為什麼搭建rabbitmq集群?rabbitmq集群有那些模式?如何搭建Rabbitmq集群?rabbitmq鏡像高可用策略有那些?

1、首先這款產品本身的優點眾多,大家最看好的便是他的異步化提高系統抗峰值能力,然後便是系統及功能結構解耦,那麼照此兩點來說,他的在整個系統中的作用還是至關重要的,那麼如此重要,當然要考慮他的高可用性,那麼便有啦第一個問題的解答。

2、rabbitmq有3種模式,但集群模式是2種。詳細如下:

單一模式:即單機情況不做集群,就單獨運行一個rabbitmq而已。普通模式:默認模式,以兩個節點(rabbit01、rabbit02)為例來進行說明。對於Queue來說,消息實體只存在於其中一個節點rabbit01(或者rabbit02),rabbit01和rabbit02兩個節點僅有相同的元數據,即隊列的結構。當消息進入rabbit01節點的Queue後,consumer從rabbit02節點消費時,RabbitMQ會臨時在rabbit01、rabbit02間進行消息傳輸,把A中的消息實體取出並經過B發送給consumer。所以consumer應儘量連接每一個節點,從中取消息。即對於同一個邏輯隊列,要在多個節點建立物理Queue。否則無論consumer連rabbit01或rabbit02,出口總在rabbit01,會產生瓶頸。當rabbit01節點故障後,rabbit02節點無法取到rabbit01節點中還未消費的消息實體。如果做了消息持久化,那麼得等rabbit01節點恢復,然後才可被消費;如果沒有持久化的話,就會產生消息丟失的現象。鏡像模式:把需要的隊列做成鏡像隊列,存在與多個節點屬於RabbitMQ的HA方案。該模式解決了普通模式中的問題,其實質和普通模式不同之處在於,消息實體會主動在鏡像節點間同步,而不是在客戶端取數據時臨時拉取。該模式帶來的副作用也很明顯,除了降低系統性能外,如果鏡像隊列數量過多,加之大量的消息進入,集群內部的網絡帶寬將會被這種同步通訊大大消耗掉。所以在對可靠性要求較高的場合中適用。1、兩臺Centos7的機器,hostname分別為:F , G .2、IP位址分別為:F—172.18.8.229 , G—172.18.8.224。3、修改hosts文件如下,下面是G這臺機器的hosts文件內容,F也需要如下配置:

[root@G bin]
127.0.0.1 G localhost localhost.localdomain localhost4 localhost4.localdomain4
::1       G localhost localhost.localdomain localhost6 localhost6.localdomain6

172.18.8.224 G
172.18.8.229 F

好啦,環境到此就就能滿足啦,接下來我們把rabbitmq裝在2臺機器上。學習不看官方文檔,那就別學啦,地址如下:http://www.rabbitmq.com/install-rpm.html安裝rabbitmq依賴erlang環境,所以我們要先安裝erlang環境。

安裝完成之後,下載rabbitmq的rpm包ivh即可。如果實在不會安裝,Linux系統(二)軟體的安裝與卸載 裡面有安裝rabbitmq的實例,看官笑納,實在不會裝那加入左上方群,或者點擊網頁右上方的X吧,一定要相信不是你的錯,是你與rabbitmq緣分不到。安裝啟動過程中如果出現error,那可參考下面幾個方案試試:vim /etc/rabbitmq/enable_plugins :刪除文件中的內容。查看hosts文件是否配置完善,相互是否可以ping通如果已經集群,那麼要查看所有集群中的/var/lib/rabbitmq/.erlang.cookie是否一致。如果不存在上述文件,echo $HOME ,打開此文件夾,查看cookie文件是否一致。

[root@G bin]
[root@G bin]
[root@G bin]
[root@G bin]
[root@G bin]
[root@G bin]

如果你看到如下操作,即表明啟動成功啦,並且web管理頁面的插件也啟動成功,如果下面的6為0,則需要啟動web管理插件

那具體rabbitmqctl 的命令詳細還要看官網文檔:http://www.rabbitmq.com/man/rabbitmqctl.1.man.html 在上述的兩臺機器上安裝rabbitmq完成之後,你可以看到你的機器中有如下1個文件。路徑在$HOME中或者在/var/lib/rabbitmq中,文件名稱為.erlang.cookie,他是一個隱藏文件。那麼這文件存儲的內容是什麼,是做什麼用的呢?這樣說吧:RabbitMQ的集群是依賴erlang集群,而erlang集群是通過這個cookie進行通信認證的,因此我們做集群的第一步就是幹cookie。怎麼幹?1、必須使集群中也就是F,G這兩臺機器的.erlang.cookie文件中cookie值一致,且權限為owner只讀。

[root@F ~]# chmod 600 .erlang.cookie

[root@F bin]
Cluster status of node rabbit@F ...
[{nodes,[{disc,[rabbit@G]},{ram,[rabbit@F]}]},
 {running_nodes,[rabbit@G,rabbit@F]},
 {cluster_name,<<"rabbit@F">>},
 {partitions,[]},
 {alarms,[{rabbit@G,[]},{rabbit@F,[]}]}]

如此便可以啦,你可以做下測試,驗證下我們序言中說的普通模式的說明,那必須是槓槓對的。寫到這裡,接下來,有朋友要請我吃飯啦,我就速戰速決赴會去啦,即便如此該有的也會都有的。go,go,go。這一節要參考的文檔是:http://www.rabbitmq.com/ha.html首先鏡像模式要依賴policy模塊,這個模塊是做什麼用的呢?policy中文來說是政策,策略的意思,那麼他就是要設置,那些Exchanges或者queue的數據需要複製,同步,如何複製同步?對就是做這些的。

[root@G ~]# ./rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

^:為匹配符,只有一個^代表匹配所有,^zlh為匹配名稱為zlh的exchanges或者queue。ha-mode:為匹配類型,他分為3種模式:all-所有(所有的queue),exctly-部分(需配置ha-params參數,此參數為int類型比如3,眾多集群中的隨機3臺機器),nodes-指定(需配置ha-params參數,此參數為數組類型比如["3rabbit@F","rabbit@G"]這樣指定為F與G這2臺機器。)。

配置完看隊列如下,其中表示ha-haall的說明用我的ha-haall策略啦,屬於鏡像模式,沒有表示的就是普通模式:

如果看到這裡,說明你喜歡這篇文章,請轉發、點讚。微信搜索「web_resource」,關注後回復「進群」或者掃描下方二維碼即可進入無廣告交流群。

5.  團隊開發中 Git 最佳實踐

在看 

相關焦點

  • 消息中間件—RabbitMQ(集群原理與搭建篇)
    本篇主要介紹RabbitMQ集群方案的原理,如何搭建具備負載均衡能力的中小規模RabbitMQ集群,並最後給出生產環境構建一個能夠具備高可用、高可靠和高吞吐量的中小規模RabbitMQ集群設計方案。.tar.gz (200MB+)c.RabbitMq的Server組件,這裡用的rabbitmq-server-generic-unix-3.6.10.tar.gz關於如何安裝上述三個組件的具體步驟,已經有不少博文對此進行了非常詳細的描述,那麼本文就不再贅述了。
  • 小兔子 RabbitMQ 養成攻略!
    RabbitMQ 作為一款非常流行的消息中間件,其有著非常豐富的特性和優勢:高可靠性、路由靈活、集群擴張性高、高可用、支持多種協議、支持多種客戶端和有著豐富的插件系統。RabbitMQ目前被廣泛應用於交易、充值、流計算、消息推送、日誌流式處理、binglog分發等場景。
  • 想了解 Kafka, RabbitMQ, ZeroMQ, RocketMQ, ActiveMQ 之間的差異?這一篇文章就夠了!
    rabbitmq:多。有一些不錯的書,網上資料多。zeromq:少。沒有專門寫zeromq的書,網上的資料多是一些代碼的實現和簡單介紹。rocketmq:少。沒有專門寫rocketmq的書,網上的資料良莠不齊,官方文檔很簡潔,但是對技術細節沒有過多的描述。activemq:多。沒有專門寫activemq的書,網上資料多。
  • 在K8S上部署rabbitmq集群-有狀態服務
    二、rabbitmq集群部署1、版本說明:因為考慮到較早版本rabbitmq在k8s上的集群部署是使用autocluster插件去調用kubernetes apiserver來獲取rabbitmq服務的endpoints,進而獲取node節點信息,並自動加入集群,但是現在
  • rabbitmq功能介紹
    一個producer發布任務,一堆consumers接收到任務後進行處理。這種模式極為好用,但其結構卻很簡單。只要兩個信息:1)connection uri,2)queue的名字,然後啟動生產者和消費者就可以工作。 但是,本文想聊一聊的是rabbitmq所提供的更多功能。可以用它們來實現更多的模式,完成更複雜的功能。 首先,需要把rabbitmq的幾個基本概念說明一下。
  • 想了解Kafka,RabbitMQ,ZeroMQ,RocketMQ,ActiveMQ之間的差異?這一篇文章就夠了!
    rabbitmq:多。有一些不錯的書,網上資料多。zeromq:少。沒有專門寫zeromq的書,網上的資料多是一些代碼的實現和簡單介紹。rocketmq:少。沒有專門寫rocketmq的書,網上的資料良莠不齊,官方文檔很簡潔,但是對技術細節沒有過多的描述。activemq:多。沒有專門寫activemq的書,網上資料多。
  • 必須要掌握的 RabbitMQ 操作命令
    該如何理解一文中介紹過幾個 RabbitMQ 管理命令。使用 REST API 操作 RabbitMQ一文中介紹過一些相關的 REST API,在方便發送 HTTP 請求的地方調用這些 REST API,還是非常方便的。但是,在一些不方便發送 HTTP 請求的地方,這些 REST API 用著並不太方便,那麼今天松哥就給大家再來介紹 RabbitMQ 的另一種玩法---rabbitmqadmin。
  • 阿里P8精心整理MongoDB+RabbitMQ+Memcached面試題,100%拿offer
    集群元數據:保存集群及其節點相關信息,存儲在集群的每一個節點中disc節點ram節點二.memcached1.緩存型中間件,通過解耦,減輕資料庫的負擔2.優勢:開源,高性能,分布式,在內存中以鍵值方式存在
  • 高可用PgSQL集群架構設計與落地
    今天我們就來介紹一下典型的高可用PgSQL集群架構及其 落地方式。本文將以 Pigsty v0.8 為例,介紹高可用集群的設計與部署。「 Pigsty針對大規模資料庫集群監控與管理而設計,提供業界頂尖的PostgreSQL監控系統與開箱即用的高可用資料庫供給方案,為用戶帶來極致的可觀測性與絲滑的資料庫使用體驗。
  • 《RabbitMQ》如何保證消息的可靠性
    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory){ return new RabbitTemplate(connectionFactory); }}修改ymlspring: rabbitmq
  • 如何利用Node.js 構建分布式集群
    本文為UCloud 公司高級工程師文天樂在深JS大會上發表的演講內容,主要介紹了UCloud內部如何利用Node.js 構建分布式集群,並分享了實踐過程中走過的坑,希望對正在使用Node.js或是即將使用Node.js的朋友有一些幫助。
  • RabbitMQ 3.0.3 發布,高級消息隊列服務
    完全改進:Release: RabbitMQ 3.0.3server-bug fixes25457 fix connection failure to start reading again in rare circumstances when coming out of flow control25419 ensure invocation of "rabbitmqctl
  • 除了HAProxy,RabbitMQ集群還可以這樣用
    -1.el7.noarch.rpmsudo yum install rabbitmq-server-3.7.26-1.el7.noarch.rpmsudo service rabbitmq-server start配置用戶rabbitmqctl
  • SpringBoot+RabbitMQ (保證消息100%投遞成功並被消費)
    # rabbitmqspring.rabbitmq.host=localhostspring.rabbitmq.port=5672spring.rabbitmq.username=guestspring.rabbitmq.password=guest# 開啟confirms回調 P -> Exchangespring.rabbitmq.publisher-confirms
  • RabbitMQ學習:RabbitMQ的六種工作模式終結篇(四)
    >import com.rabbitmq.client.BuiltinExchangeType;import com.rabbitmq.client.Channel;import com.rabbitmq.client.Connection;import com.rabbitmq.client.ConnectionFactory;public class
  • 實戰|SpringBoot+RabbitMQ,保證消息100%投遞成功並被消費
    <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>3、rabbitmq
  • mac如何安裝和啟動RabbitMQ
    1.通過brew指令執行安裝rabbitmq的命令,如下:brew install rabbitmq【小知識】Brew又叫Homebrew,是MAC中的一款軟體包管理工具,通過brew可以很方便的在MAC中安裝軟體或者是卸載軟體。
  • RabbitMQ 消費端限流、TTL、死信隊列
    注意:prefetchSize 和 global 這兩項,rabbitmq 沒有實現,暫且不研究。特別注意一點,prefetchCount 在 no_ask=false 的情況下才生效,即在自動應答的情況下這兩個值是不生效的。
  • RabbitMQ 3.7.8-rc.4 發布,多協議消息代理
    Priority queues no longer fail with an exception when used together with other rabbit_backing_queue behaviour implementations.
  • RabbitMQ 簡介
    概述RabbitMQ 是基於 AMQP 實現的一個開源消息組件,主要用於在分布式系統中存儲轉發消息,由因高性能、高可用以及高擴展而出名的 Erlang