Rabbitmq集羣高可用部署詳細

序言

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

回到正題,爲何搭建rabbitmq集羣?rabbitmq集羣有那些模式?如何搭建Rabbitmq集羣?rabbitmq鏡像高可用策略有那些?node

一、首先這款產品自己的優勢衆多,你們最看好的即是他的異步化提升系統抗峯值能力,而後即是系統及功能結構解耦,那麼照此兩點來講,他的在整個系統中的做用仍是相當重要的,那麼如此重要,固然要考慮他的高可用性,那麼便有啦第一個問題的解答。web

二、rabbitmq有3種模式,但集羣模式是2種。詳細以下:vim

  • 單一模式:即單機狀況不作集羣,就單獨運行一個rabbitmq而已。
  • 普通模式:默認模式,以兩個節點(rabbit0一、rabbit02)爲例來進行說明。對於Queue來講,消息實體只存在於其中一個節點rabbit01(或者rabbit02),rabbit01和rabbit02兩個節點僅有相同的元數據,即隊列的結構。當消息進入rabbit01節點的Queue後,consumer從rabbit02節點消費時,RabbitMQ會臨時在rabbit0一、rabbit02間進行消息傳輸,把A中的消息實體取出並通過B發送給consumer。因此consumer應儘可能鏈接每個節點,從中取消息。即對於同一個邏輯隊列,要在多個節點創建物理Queue。不然不管consumer連rabbit01或rabbit02,出口總在rabbit01,會產生瓶頸。當rabbit01節點故障後,rabbit02節點沒法取到rabbit01節點中還未消費的消息實體。若是作了消息持久化,那麼得等rabbit01節點恢復,而後纔可被消費;若是沒有持久化的話,就會產生消息丟失的現象。
  • 鏡像模式:把須要的隊列作成鏡像隊列,存在與多個節點屬於RabbitMQ的HA方案該模式解決了普通模式中的問題,其實質和普通模式不一樣之處在於,消息實體會主動在鏡像節點間同步,而不是在客戶端取數據時臨時拉取。該模式帶來的反作用也很明顯,除了下降系統性能外,若是鏡像隊列數量過多,加之大量的消息進入,集羣內部的網絡帶寬將會被這種同步通信大大消耗掉。因此在對可靠性要求較高的場合中適用。

準備集羣環境安裝RabbitMQ

個人環境以下:數組

一、兩臺Centos7的機器,hostname分別爲:F , G .緩存

二、IP地址分別爲:F—172.18.8.229 , G—172.18.8.224。cookie

三、修改hosts文件以下,下面是G這臺機器的hosts文件內容,F也須要以下配置:網絡

[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 F

四、保證兩臺機器都可以相互ping通,以下圖:app

好啦,環境到此就就能知足啦,接下來咱們把rabbitmq裝在2臺機器上。dom

學習不看官方文檔,那就別學啦,地址以下: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通
  • 查看相關端口是否被佔用,如若佔用kill掉
  • 若是已經集羣,那麼要查看全部集羣中的/var/lib/rabbitmq/.erlang.cookie是否一致。
  • 若是不存在上述文件,echo $HOME ,打開此文件夾,查看cookie文件是否一致。
  • 重啓電腦,防止緩存數據配置未更新過來。

這裏安裝啓動成功以後,來幾個經常使用的操做。

[root@G bin]# ./rabbitmq-server -deched  --後臺啓動服務
[root@G bin]# ./rabbitmqctl start_app  --啓動服務
[root@G bin]# ./rabbitmqctl stop_app  --關閉服務
[root@G bin]# ./rabbitmq-plugins enable rabbitmq_management --啓動web管理插件
[root@G bin]# ./rabbitmqctl add_user zlh zlh  --添加用戶,密碼
[root@G bin]# ./rabbitmqctl set_user_tags zlh administrator --設置zlh爲administrator權限

若是你看到以下操做,即代表啓動成功啦,而且web管理頁面的插件也啓動成功,若是下面的6爲0,則須要啓動web管理插件

那具體rabbitmqctl 的命令詳細還要看官網文檔:http://www.rabbitmq.com/man/rabbitmqctl.1.man.html

搭建rabbitmq的通常模式集羣

 在上述的兩臺機器上安裝rabbitmq完成以後,你能夠看到你的機器中有以下1個文件。路徑在$HOME中或者在/var/lib/rabbitmq中,文件名稱爲.erlang.cookie,他是一個隱藏文件。那麼這文件存儲的內容是什麼,是作什麼用的呢?

這樣說吧:RabbitMQ的集羣是依賴erlang集羣,而erlang集羣是經過這個cookie進行通訊認證的,所以咱們作集羣的第一步就是幹cookie。怎麼幹?

一、必須使集羣中也就是F,G這兩臺機器的.erlang.cookie文件中cookie值一致,且權限爲owner只讀。

機器G中的Cookie: 機器F中的Cookie:

修改文件權限以下:

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

二、查看集羣狀態,個人是已經作好的。

[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,[]}]}]

三、中止當前機器中rabbitmq的服務

[root@F bin]# ./rabbitmqctl stop_app

四、把G中的rabbitmq加入到集羣中來

[root@F bin]# ./rabbitmqctl join_cluster --ram rabbit@G

五、開啓當前機器的rabbitmq服務

[root@F bin]# ./rabbitmqctl start_app

六、打開網頁管理頁面查看nodes

如此即可以啦,你能夠作下測試,驗證下咱們序言中說的普通模式的說明,那必須是槓槓對的。

搭建rabbitmq的鏡像高可用模式集羣

寫到這裏,接下來,有朋友要請我吃飯啦,我就速戰速決赴會去啦,即使如此該有的也會都有的。go,go,go。

這一節要參考的文檔是:http://www.rabbitmq.com/ha.html

首先鏡像模式要依賴policy模塊,這個模塊是作什麼用的呢?

policy中文來講是政策,策略的意思,那麼他就是要設置,那些Exchanges或者queue的數據須要複製,同步,如何複製同步?對就是作這些的。

這裏有點內容的,我先上例子慢慢說:

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

參數意思爲:

ha-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臺機器。)。

參考示例以下

固然在web管理界面也能配置:

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

 

總結

接下來是你們最喜歡的總結內容啦,內容有二,以下:

一、但願能關注我其餘的文章。

二、博客裏面有沒有很清楚的說明白,或者你有更好的方式,那麼歡迎加入左上方的2個交流羣,咱們一塊兒學習探討。

相關文章
相關標籤/搜索