rabbitmq配置叢集和鏡像隊列

來源:互聯網
上載者:User

首先先安裝rabbitmq,然後在繼續往下看

文章標題:《rabbitmq單機安裝小記》

文章地址:http://www.bbtang.info/591.html

 

還需要修改host檔案 1 127.0.0.1   rabbitmq1 localhost.localdomain localhost4 localhost4.localdomain4 2 ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6 3 192.168.1.254   rabbitmq1 4 192.168.1.22    rabbitmq2

每台機子除了自己的127.0.0.1的host不同外,下邊的都相同.

PS:我們使用rabbitmq1做主服務,rabbitmq2做節點服務

同時自己的機器的主機名稱務必要給成和你的這個是一樣的,不然機器重啟後,不是這個主機名稱,加入到叢集中會出現問題的. 

可以通過修改vim /etc/sysconfig/network中的HOSTNAME選項來修改,同時hostname rabbitmq1 也是可以臨時修改的.

 

注意要在安裝完成的時候啟動rabbitmq哦~ 1 ./rabbitmq-server start

  說明

Rabbitmq的叢集是依附於erlang的叢集來工作的,所以必須先構建起erlang的叢集景象。Erlang的叢集中各節點是經由過程一個magic cookie來實現的,這個cookie存放在 $home/.erlang.cookie 中(像我的root使用者安裝的就是放在我的root/.erlang.cookie中),檔案是400的許可權。所以必須包管各節點cookie對峙一致,不然節點之間就無法通訊。 複製cookie內容

開啟檔案然後需要先把其中的一台伺服器的.erlang.cookie中的內容複寫到別的機器上,最好是複製內容,因為檔案許可權不對的話會出現問題,在最後退出儲存的時候使用wq!用!來進行強制儲存即可. 普通叢集

對於Queue來說,訊息實體只存在於其中一個節點,A、B兩個節點僅有相同的中繼資料,即隊列結構。

當訊息進入A節點的Queue中後,consumer從B節點拉取時,RabbitMQ會臨時在A、B間進行訊息傳輸,把A中的訊息實體取出並經過B發送給consumer。

所以consumer應盡量串連每一個節點,從中取訊息。即對於同一個邏輯隊列,要在多個節點建立物理Queue。否則無論consumer連A或B,出口總在A,會產生瓶頸。

該模式存在一個問題就是當A節點故障後,B節點無法取到A節點中還未消費的訊息實體。

如果做了訊息持久化,那麼得等A節點恢複,然後才可被消費;如果沒有持久化的話,然後就沒有然後了……

 

叢集配置

主服務配置指令碼 1 ./rabbitmqctl stop_app 2 ./rabbitmqctl reset 3 ./rabbitmqctl start_app

這個是用來在rabbitmq1上執行的,這個也可以不執行,直接在節點伺服器執行下邊的指令碼,不過得保證這個rabbitmq服務是正常啟動的.

節點服務配置指令碼 1 ./rabbitmqctl stop_app 2 ./rabbitmqctl reset 3 ./rabbitmqctl join_cluster --ram rabbit@rabbitmq1 4 ./rabbitmqctl start_app

和主服務配置指令碼的唯一區別是多了第三行的內容,其中–ram指的是作為記憶體節點,要是想做為磁碟節點的話,就不用加–ram這個參數了,把第3行寫成這樣就好了 1 ./rabbitmqctl join_cluster --ram rabbit@rabbitmq1

PS:只要在節點列表裡包含了本身,它就成為一個磁碟節點。在RabbitMQ叢集裡,必須至少有一個磁碟節點存在。

現在先執行主節點上的指令碼,等待執行完成之後再執行服務節點的指令碼,順序不要錯了哦~

執行完之後分別在每台機器上查看節點狀態 1 ./rabbitmqctl cluster_status

你會分別看到如下的內容

rabbitmq1查看的叢集狀態結果 1 [root@rabbitmq1 sbin]# ./rabbitmqctl cluster_status 2 Cluster status of node rabbit@rabbitmq1 ... 3 [{nodes,[{disc,[rabbit@rabbitmq1]},{ram,[rabbit@rabbitmq2]}]}, 4  {running_nodes,[rabbit@rabbitmq2,rabbit@rabbitmq1]}, 5  {partitions,[]}] 6 ...done.

rabbitmq2查看的叢集狀態結果 1 [root@rabbitmq2 sbin]# ./rabbitmqctl cluster_status 2 Cluster status of node rabbit@rabbitmq2 ... 3 [{nodes,[{disc,[rabbit@rabbitmq1]},{ram,[rabbit@rabbitmq2]}]}, 4  {running_nodes,[rabbit@rabbitmq1,rabbit@rabbitmq2]}, 5  {partitions,[]}] 6 ...done.

兩台機器的內容幾乎是一樣的,這樣的話你的叢集就建立成功了.

普通的叢集模式已經建立完成了.

  鏡像隊列

上述配置的RabbitMQ預設叢集模式,但並不包管隊列的高可用性,儘管互換機、綁定這些可以複製到叢集裡的任何一個節點,然則隊列內容不會複製,固然該模式解決一項目組節點壓力,但隊列節點宕機直接導致該隊列無法應用,只能守候重啟,所以要想在隊列節點宕機或故障也能正常應用,就要複製隊列內容到叢集裡的每個節點,須要建立鏡像隊列。

鏡像隊列是基於普通的叢集模式的,所以你還是得先配置普通叢集,然後才能設定鏡像隊列.

我是通過網頁的管理端來設定的鏡像隊列,也可以通過命令,官方有例子. http://www.rabbitmq.com/ha.html 開啟之後翻到最下邊有兩個例子,可以參考看看,這裡只說其中的網頁設定的 1 >1.點擊admin菜單-->右側的Policies選項-->左側最下下邊的Add / update a policy 2   3 >2.按照圖中的內容根據自己的需求填寫 4   5 >3.點擊Add policy添加策略

此時你就會來你的兩台rabbitmq伺服器的網頁管理端amind菜單下看見剛才建立的隊列了.

 

下面我們來添加一個queues隊列來看看效果,這裡只是測試結果,其它的先不填寫

 

注意紅框中的 x-ha-policy = all 這個,網上說沒有這個不會進行複製,但是我測試的時候好像可以複製的,至少queues隊列是可以的,先添上吧.

在這裡邊添加的時候你是可以指定Node選項也就是把這個queues放在哪個node節點上,不過做鏡像的時候就沒有必要了,呵呵

添加完成後你會看到這個效果

簡要說明一下

aa這個是剛才添加的 Arguments 參數指定了 x-ha-policy = all

ab這個是沒有指定Arguments參數的,這個可以看出差距的

ba和bb是為了做示範效果對比的,這兩個是沒有符合約步策略的,所以Node後邊沒有+1的標識,你把滑鼠放在+1的標識上就能看到他在另一台機器上也有一個.

Q:你說要是我重啟rabbitmq2的話會出現什麼效果….

A:aa和ab的+1標識消失,啟動後重新恢複.

Q:要是重啟rabbitmq1的話出現什麼效果….

A:在rabbitmq2上aa和ab的+1標識消失且Node選項中的rabbit@rabbitmq1變成rabbit@rabbitmq2,同時ba和bb消失,重啟後依舊消失,哈哈,因為這兩個沒做鏡像哦~

 

這裡的鏡像隊列的叢集介紹就到這裡,要想做到高可用,需要HA軟體的配合哦~   這裡先不做贅述,下篇文章再說吧….

  報錯處理

要是錯誤資訊中提示有主節點衝突的話,可以進入到一下目錄修改相應的檔案 1 cd /usr/local/rabbitmq_server-3.1.3/var/lib/rabbitmq/mnesia 2 vim rabbit\@rabbitmq2/cluster_nodes.config

或者直接將這個目錄裡的檔案全都刪除,這個是叢集的設定檔和持久化的資料存放區位置,能改則改實在是迫不得已再刪除

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.