您的位置:首頁>正文

Rabbitmq集群高可用部署詳細

序言

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

回到正題, 為什麼搭建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方案

準備集群環境安裝RabbitMQ

我的環境如下:

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]# 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

4、保證兩台機器都能夠相互ping通, 如下圖:

好啦, 環境到此就就能滿足啦, 接下來我們把rabbitmq裝在2台機器上。

學習不看官方文檔, 那就別學啦, 地址如下:http://www.rabbitmq.com/install-rpm.html

安裝rabbitmq依賴erlang環境, 所以我們要先安裝erlang環境。

安裝啟動過程中如果出現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。 怎麼幹?

1、必須使集群中也就是F, G這兩台機器的.erlang.cookie文件中cookie值一致, 且許可權為owner唯讀。

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

修改檔許可權如下:

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

2、查看集群狀態, 我的是已經做好的。

[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,>}, {partitions,}, {alarms,[{rabbit@G,[]},{rabbit@F,}]}]

3、停止當前機器中rabbitmq的服務

[root@F bin]# ./rabbitmqctl stop_app

4、把G中的rabbitmq加入到集群中來

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

5、開啟當前機器的rabbitmq服務

[root@F bin]# ./rabbitmqctl start_app

6、打開網頁管理頁面查看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策略啦,屬於鏡像模式,沒有表示的就是普通模式:

總結 只有一個^代表匹配所有,^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策略啦,屬於鏡像模式,沒有表示的就是普通模式:

總結

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示