rabbitmq 集群配置

2022-06-10 21:27:09 字數 4564 閱讀 6533

參考:

環境:

centos7

這裡使用兩台,生產環境建議使用三颱

ip主機名

安裝軟降

192.168.137.126

node01

erlang、rabbitmq,jdk

192.168.137.125

node02

erlang、rabbitmq,jdk

修改主機名並寫入hosts檔案

vim /etc/hosts

192.168.137.126 node01

192.168.137.125 node02

hostnamectl set-hostname node01	#修改主機名
後台啟動rabbit node
rabbitmq-server -detached	#啟動erlang node和rabbit應用

rabbitmqctl stop #停止mq跟erlang節點

並且開啟相關外掛程式(方便以後使用)
rabbitmq-plugins enable rabbitmq_management rabbitmq_web_stomp rabbitmq_stomp rabbitmq_web_stomp_examples	#重啟後生效
重新開啟並確認服務狀態
rabbitmqctl -detached

rabbitmq的集群是依賴erlang集群,而erlang集群是通過這個cookie進行通訊認證的,將一台主機上的.erlang.cookie檔案拷貝到其他兩台主機上。該 cookie 檔案相當於金鑰令牌,集群中的 rabbitmq 節點需要通過交換金鑰令牌以獲得相互認證,因此處於同一集群的所有節點需要具有相同的金鑰令牌,否則在搭建過程中會出現 authentication fail 錯誤。

一般這個檔案在 $home/.erlang.cookie ,也可能在/var/lib/rabbitmq/.erlang.cookie下視安裝方式而定

/var/lib/rabbitmq/.erlang.cookie

或 $home/.erlang.cookie

複製前需要停止所有節點的mq跟erlang節點
rabbitmqctl stop
複製cookie檔案
cd

scp .erlang.cookie root@node02:/root/

chmod 600 .erlang.cookie #這步可以省略

啟動所有節點
rabbitmqctl -detached
以node01為 『主節點』 ,將node02加入到集群中,node2上操作如下

rabbitmqctl reset #重置狀態

rabbitmqctl join_cluster rabbit@node01 #加入集群

join_cluster命令有乙個可選的引數--ram,該引數代表新加入的節點是記憶體節點,預設是磁碟節點。

如果是記憶體節點,則所有的佇列、交換器、繫結關係、使用者、訪問許可權和 vhost 的元資料都將儲存在記憶體中,如果是磁碟節點,則儲存在磁碟中。

記憶體節點可以有更高的效能,但其重啟後所有配置資訊都會丟失,因此rabbitmq 要求在集群中至少有乙個磁碟節點,其他節點可以是記憶體節點。

當記憶體節點離開集群時,它可以將變更通知到至少乙個磁碟節點;然後在其重啟時,再連線到磁碟節點上獲取元資料資訊。

除非是將 rabbitmq 用於 rpc 這種需要超低延遲的場景,否則在大多數情況下,rabbitmq 的效能都是夠用的,可以採用預設的磁碟節點的形式。

另外,如果節點以磁碟節點的形式加入,則需要先使用reset命令進行重置,然後才能加入現有群集,重置節點會刪除該節點上存在的所有的歷史資源和資料。

採用記憶體節點的形式加入時可以略過reset這一步,因為記憶體上的資料本身就不是持久化的。

在node01上確認集群資訊

建立管理使用者

rabbitmqctl add_user admin password

rabbitmqctl add_vhos admin

rabbitmqctl set_user_tags admin administrator

rabbitmq set_permissions -p admin admin ".*" ".*" ".*"

瀏覽器登入並檢視集群狀態

沒有乙個直接的命令可以關閉整個集群,需要逐一進行關閉。但是需要保證在重啟時,最後關閉的節點最先被啟動。

如果第乙個啟動的不是最後關閉的節點,那麼這個節點會等待最後關閉的那個節點啟動,預設進行 10 次連線嘗試,超時時間為 30 秒,如果依然沒有等到,則該節點啟動失敗。

這帶來的乙個問題是,假設在乙個三節點的集群當中,關閉的順序為 node01,node02,node03,如果 node1 因為故障暫時沒法恢復,此時 node2 和 node3 就無法啟動。

想要解決這個問題,可以先將 node1 節點進行剔除,命令如下:

rabbitmqctl forget_cluster_node rabbit@node01 -offline
此時需要加上-offline引數,它允許節點在自身沒有啟動的情況下將其他節點剔除。

方法一:

可以先使用rabbitmqctl stop停止該節點上的服務,然後在其他任意乙個節點上執行forget_cluster_node命令。這裡以剔除 node02上的服務為例,此時可以在 node01上執行下面的命令:

rabbitmqctl forget_cluster_node rabbit@node02	#要記得先停止node02節點上的服務
方法二:

先使用rabbitmqctl stop停止該節點上的服務,然後再執行rabbitmqctl reset這會清空該節點上所有歷史資料,並主動通知集群中其它節點它將要離開集群。

rabbitmqctl set_policy [-p vhost] name pattern definition [priority]
-p vhost: 可選引數,針對指定vhost下的queue進行設定

name: policy的名稱

pattern: queue的匹配模式(正規表示式)

definition:映象定義,包括三個部分ha-mode, ha-params, ha-sync-mode

ha-mode:指明映象佇列的模式,有效值為 all/exactly/nodes

all:表示在集群中所有的節點上進行映象

exactly:表示在指定個數的節點上進行映象,節點的個數由ha-params指定

nodes:表示在指定的節點上進行映象,節點名稱通過ha-params指定

ha-params:ha-mode模式需要用到的引數

ha-sync-mode:進行佇列中訊息的同步方式,有效值為automatic和manual

priority:可選引數,policy的優先順序

示例:

rabbitmq集群配置

rabbitmq是乙個輕量級的訊息服務系統,切記它只是乙個類似信件郵遞員的功能,而不是快遞,不用把它當成redis在用。一 rabbitmq軟體安裝 1.erlang安裝 安裝erlang,載入官方提供的yum源,然後直接安裝。最新版本的rabbitmq直接依賴erlang,安裝esl erlang...

RabbitMQ集群配置

前面配置了rabbitmq在本地的部署,現在來嘗試集群配置 集群的配置比較簡單,但是有乙個要求就是必須在同一網段內 假設有兩台機器,rabbit0和rabbit1做集群 首先將2臺機器的.erlang.cookie統一,任選一台為標準就可以 sudo vim var lib rabbitmq erl...

RabbitMQ 集群配置參考

rabbitmq version rabbitmq 3.7.11 erlang version erlang otp 21 system windows 10 homebasic a ip 192.168.6.49 node rabbit laptop 7bvtruru b ip 192.168.6...