RabbitMQ 集群高可用部署詳細(xì)介紹


鏈接:cnblogs.com/knowledgesea/p/6535766.html
清風(fēng)萬(wàn)里的季節(jié),周末本該和親人朋友一起消遣這爛漫的花花草草,或是懶洋洋的曬個(gè)太陽(yáng)聽聽風(fēng)聲鳥鳴。無(wú)奈工作使然,理想使然,我回到啦公司,敲起啦鍵盤,擼起啦代碼,程序狗的世界一片黯然,一片黯然,愿天下所有努力的程序狗都?jí)粝氤烧姘桑。?/span>回到正題,為什么搭建rabbitmq集群?rabbitmq集群有那些模式?如何搭建Rabbitmq集群?rabbitmq鏡像高可用策略有那些?
1、首先這款產(chǎn)品本身的優(yōu)點(diǎn)眾多,大家最看好的便是他的異步化提高系統(tǒng)抗峰值能力,然后便是系統(tǒng)及功能結(jié)構(gòu)解耦,那么照此兩點(diǎn)來(lái)說(shuō),他的在整個(gè)系統(tǒng)中的作用還是至關(guān)重要的,那么如此重要,當(dāng)然要考慮他的高可用性,那么便有啦第一個(gè)問(wèn)題的解答。
2、rabbitmq有3種模式,但集群模式是2種。詳細(xì)如下:
- 單一模式:即單機(jī)情況不做集群,就單獨(dú)運(yùn)行一個(gè)rabbitmq而已。
- 普通模式:默認(rèn)模式,以兩個(gè)節(jié)點(diǎn)(rabbit01、rabbit02)為例來(lái)進(jìn)行說(shuō)明。對(duì)于Queue來(lái)說(shuō),消息實(shí)體只存在于其中一個(gè)節(jié)點(diǎn)rabbit01(或者rabbit02),rabbit01和rabbit02兩個(gè)節(jié)點(diǎn)僅有相同的元數(shù)據(jù),即隊(duì)列的結(jié)構(gòu)。當(dāng)消息進(jìn)入rabbit01節(jié)點(diǎn)的Queue后,consumer從rabbit02節(jié)點(diǎn)消費(fèi)時(shí),RabbitMQ會(huì)臨時(shí)在rabbit01、rabbit02間進(jìn)行消息傳輸,把A中的消息實(shí)體取出并經(jīng)過(guò)B發(fā)送給consumer。所以consumer應(yīng)盡量連接每一個(gè)節(jié)點(diǎn),從中取消息。即對(duì)于同一個(gè)邏輯隊(duì)列,要在多個(gè)節(jié)點(diǎn)建立物理Queue。否則無(wú)論consumer連rabbit01或rabbit02,出口總在rabbit01,會(huì)產(chǎn)生瓶頸。當(dāng)rabbit01節(jié)點(diǎn)故障后,rabbit02節(jié)點(diǎn)無(wú)法取到rabbit01節(jié)點(diǎn)中還未消費(fèi)的消息實(shí)體。如果做了消息持久化,那么得等rabbit01節(jié)點(diǎn)恢復(fù),然后才可被消費(fèi);如果沒(méi)有持久化的話,就會(huì)產(chǎn)生消息丟失的現(xiàn)象。
- 鏡像模式:把需要的隊(duì)列做成鏡像隊(duì)列,存在與多個(gè)節(jié)點(diǎn)屬于RabbitMQ的HA方案。該模式解決了普通模式中的問(wèn)題,其實(shí)質(zhì)和普通模式不同之處在于,消息實(shí)體會(huì)主動(dòng)在鏡像節(jié)點(diǎn)間同步,而不是在客戶端取數(shù)據(jù)時(shí)臨時(shí)拉取。該模式帶來(lái)的副作用也很明顯,除了降低系統(tǒng)性能外,如果鏡像隊(duì)列數(shù)量過(guò)多,加之大量的消息進(jìn)入,集群內(nèi)部的網(wǎng)絡(luò)帶寬將會(huì)被這種同步通訊大大消耗掉。所以在對(duì)可靠性要求較高的場(chǎng)合中適用。
[root@G bin]# cat /etc/hosts
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?F4、保證兩臺(tái)機(jī)器都能夠相互ping通,如下圖:

- vim /etc/rabbitmq/enable_plugins :刪除文件中的內(nèi)容。
- 查看hosts文件是否配置完善,相互是否可以ping通
- 查看相關(guān)端口是否被占用,如若占用kill掉
- 如果已經(jīng)集群,那么要查看所有集群中的/var/lib/rabbitmq/.erlang.cookie是否一致。
- 如果不存在上述文件,echo $HOME ,打開此文件夾,查看cookie文件是否一致。
- 重啟電腦,防止緩存數(shù)據(jù)配置未更新過(guò)來(lái)。
[root@G bin]# ./rabbitmq-server -deched --后臺(tái)啟動(dòng)服務(wù)
[root@G bin]# ./rabbitmqctl start_app --啟動(dòng)服務(wù)
[root@G bin]# ./rabbitmqctl stop_app --關(guān)閉服務(wù)
[root@G bin]# ./rabbitmq-plugins enable rabbitmq_management --啟動(dòng)web管理插件
[root@G bin]# ./rabbitmqctl add_user zlh zlh --添加用戶,密碼
[root@G bin]# ./rabbitmqctl set_user_tags zlh administrator --設(shè)置zlh為administrator權(quán)限如果你看到如下操作,即表明啟動(dòng)成功啦,并且web管理頁(yè)面的插件也啟動(dòng)成功,如果下面的6為0,則需要啟動(dòng)web管理插件


[root@F ~]# chmod?600 .erlang.cookie2、查看集群狀態(tài),我的是已經(jīng)做好的。[root@F bin]# ./rabbitmqctl cluster_status
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,[]}]}]3、停止當(dāng)前機(jī)器中rabbitmq的服務(wù)[root@F bin]# ./rabbitmqctl stop_app4、把G中的rabbitmq加入到集群中來(lái)[root@F bin]# ./rabbitmqctl join_cluster --ram rabbit@G5、開啟當(dāng)前機(jī)器的rabbitmq服務(wù)[root@F bin]# ./rabbitmqctl start_app6、打開網(wǎng)頁(yè)管理頁(yè)面查看nodes
[root@G ~]# ./rabbitmqctl set_policy ha-all?"^"?'{"ha-mode":"all"}'參數(shù)意思為:ha-all:為策略名稱。^:為匹配符,只有一個(gè)^代表匹配所有,^zlh為匹配名稱為zlh的exchanges或者queue。ha-mode:為匹配類型,他分為3種模式:all-所有(所有的queue),exctly-部分(需配置ha-params參數(shù),此參數(shù)為int類型比如3,眾多集群中的隨機(jī)3臺(tái)機(jī)器),nodes-指定(需配置ha-params參數(shù),此參數(shù)為數(shù)組類型比如["3rabbit@F","rabbit@G"]這樣指定為F與G這2臺(tái)機(jī)器。)。參考示例如下


- End -

技術(shù)連載目錄(可點(diǎn)擊跳轉(zhuǎn)即可閱讀):
面試題系列教程??點(diǎn)擊-->?面試題技術(shù)干貨連載目錄?跳轉(zhuǎn)
Maven系列教程??點(diǎn)擊-->?Maven技術(shù)干貨連載目錄?跳轉(zhuǎn)
MyBatis系列教程??點(diǎn)擊-->?MyBatis技術(shù)干貨連載目錄?跳轉(zhuǎn)
JVM調(diào)優(yōu)總結(jié)系列教程??點(diǎn)擊-->?JVM調(diào)優(yōu)技術(shù)干貨連載目錄?跳轉(zhuǎn)
點(diǎn)擊在看,愿你我不再陌生?![]()
評(píng)論
圖片
表情
