參考:
環境:
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 noderabbitmq-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...