作者 | 張龍豪
連結 | 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
[root@G bin]
[root@G bin]
[root@G bin]
[root@G bin]
[root@G bin]
[root@G bin]
[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,[]}]}]
[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 最佳實踐
喜歡文章,點個在看