1. 程式人生 > >rabbitmq安裝及基本操作(含集群配置)

rabbitmq安裝及基本操作(含集群配置)

home 操作 14. 關系 裝包 del protocol otp examples

一、rabbitmq的安裝

因為rabbitmq是基於 erlang語言開發,所有要先安裝erlang

1、安裝erlang

這裏我下載的是19.2的版本,地址為https://www.erlang.org/downloads/19.2

下載編譯安裝包:

cd  /mnt
wget http://erlang.org/download/otp_src_19.2.tar.gz

解縮

tar  -zxvf otp_src_19.2.tar.gz

安裝編譯依賴

yum -y install gcc gcc-c++ autoconf automake  zlib zlib-devel openssl openssl-devel pcre-devel  ncurses-devel

編譯安裝

cd /mnt/otp_src_19.3 && ./configure  --prefix=/opt/er1ang && make  &&  make   install 

設置環境變量

修改 /etc/profile在最後添加如下代碼

ERLANG_HOME=/opt/erlang
export PATH=$PATH:$ERLANG_HOME/bin
export ERLANG_HOME 

source  /etc/profile

2、rabbitmq安裝

進入官網選擇下載的版本

http://www.rabbitmq.com/releases/rabbitmq-server/

我選擇的是3.6.10版本

cd /opt

wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.10/rabbitmq-server-generic-unix-3.6.10.tar.xz

xz -d
rabbitmq-server-generic-unix-3.6.10.tar.xz

tar -xvf rabbitmq-server-generic-unix-3.6.10.tar

mv rabbitmq-server-generic-unix-3.6.10 rabbitmq


設置環境變量

編輯/etc/profile文件,在最後添加如下代碼

export PATH
=$PATH:/opt/rabbitmq/sbin export RABBITMQ_HOME=/opt/rabbitmq source /etc/profile

運行rabbitmq

rabbitmq-server -detached

查看啟動狀態 rabbitmqctl status

[root@node-2 opt]# rabbitmqctl status
Status of node ‘rabbit@node-2‘
[{pid,27273},
{running_applications,
[{rabbit,"RabbitMQ","3.6.10"},
{mnesia,"MNESIA CXC 138 12","4.14.3"},
{ranch,"Socket acceptor pool for TCP protocols.","1.3.0"},
{ssl,"Erlang/OTP SSL application","8.1.1"},
{public_key,"Public key infrastructure","1.4"},
{crypto,"CRYPTO","3.7.3"},
{os_mon,"CPO CXC 138 46","2.4.2"},
{rabbit_common,
"Modules shared by rabbitmq-server and rabbitmq-erlang-client",
"3.6.10"},
{xmerl,"XML parser","1.3.13"},
{compiler,"ERTS CXC 138 10","7.0.4"},
{asn1,"The Erlang ASN1 compiler version 4.0.4","4.0.4"},
{syntax_tools,"Syntax tools","2.1.1"},
{sasl,"SASL CXC 138 11","3.0.3"},
{stdlib,"ERTS CXC 138 10","3.3"},
{kernel,"ERTS CXC 138 10","5.2"}]},
{os,{unix,linux}},
{erlang_version,
"Erlang/OTP 19 [erts-8.3] [source] [64-bit] [smp:2:2] [async-threads:64] [hipe] [kernel-poll:true]\n"},
{memory,
[{total,49620264},
{connection_readers,0},
{connection_writers,0},
{connection_channels,0},
{connection_other,0},
{queue_procs,2832},
{queue_slave_procs,0},
{plugins,0},
{other_proc,17182792},
{mnesia,61040},
{metrics,184080},
{mgmt_db,0},
{msg_index,43528},
{other_ets,2088952},
{binary,49848},
{code,21385570},
{atom,891849},
{other_system,7911021}]},
{alarms,[]},
{listeners,[{clustering,25672,"::"},{amqp,5672,"::"}]},
{vm_memory_high_watermark,0.4},
{vm_memory_limit,779028070},
{disk_free_limit,50000000},
{disk_free,45861027840},
{file_descriptors,
[{total_limit,924},{total_used,2},{sockets_limit,829},{sockets_used,0}]},
{processes,[{limit,1048576},{used,152}]},
{run_queue,0},
{uptime,5047},
{kernel,{net_ticktime,60}}]

二、rabbitmq管理

1、多租戶與權限

每一個RabbitMQ 服務器都能創建虛擬的消息服務器,我們稱之為虛擬主機 (virtual host) , 簡稱為 vhost 。每一個 vhost 本質上是一個獨立的小型 RabbitMQ 服務器,擁有自己獨立的隊列、 交換器及綁定關系等,井且它擁有自己獨立的權限。 vhost 就像是虛擬機與物理服務器一樣,它 們在各個實例間提供邏輯上的分離,為不同程序安全保密地運行數據,它既能將同 一個 RabbitMQ 中的眾多客戶區分開,又可以避免隊列和交換器等命名沖突。 vhost 之間是絕對隔離 的,無法將 vhostl 中的交換器與 vhost2 中的隊列進行綁定,這樣既保證了安全性,又可以確保 可移植性。如果在使用 RabbitMQ 達到一定規模的時候,建議用戶對業務功能、場景進行歸類 區分,並為之分配獨立的 vhost。

vhost是AMQP 概念的基礎,客戶端在連接的時候必須制定一個 vhost. RabbitMQ 默認創 建的 vhost為 “/”, 如果不需要多個 vhost 或者對 vhost 的概念不是很理解,那麽用這個默認的 vhost 也是非常合理的,使用默認的用戶名 guest 和密碼 guest 就可以訪問它。但是為了安全和 方便,建議重新建立 個新的用戶來訪問它。

  可以使用 rabbitmqctl add vhost {vhost} 命令創建一個新的 vhost ,大括號裏的參 數表示 vhost 的名稱。

[root@node-2 opt]# rabbitmqctl  add_vhost  vhost
Creating vhost "vhost"

查看vhosts列表

[root@node-2 opt]# rabbitmqctl  list_vhosts
Listing vhosts
/
vhost

對應的刪除 vhost 的命令是: rabbitmqctl delete_vhost {vhost) ,其中大括號裏 面的參數表示 vhost 的名稱。刪除一個 vhost 同時也會刪除其下所有的隊列、交換器、綁定關系、 用戶權限、參數和策略等信息。

[root@node-2 opt]# rabbitmqctl  delete_vhost  vhost
Deleting vhost "vhost"
[root@node-2 opt]# 
[root@node-2 opt]# rabbitmqctl  list_vhosts
Listing vhosts
/

AMQP 協議中並沒有指定權限在 host 級別還是在服務器級別實現,由具體的應用自定義。 在RabbitMQ 中,權限控制則是以 host 為單位的 。當創建一個用戶時,用戶通常會被指派給至少一個 vhost ,並且只能訪問被指派的 vhost 內的隊列、交換器和綁定關系等。因此, RabbitMQ 中的授予權限是指在 vhost 級別對用戶而言的權限授予。

相關的授予權限命令為: rabbitmqctl set permissions [-p vhost] {user) {conf) {write) {read) 。其 中各個參數的含義如下所述。 ~ vhost 授予用戶訪問權限的 host 名稱,可以設置為默認值,即vhosts為 “/”

user:可以訪問指定 vhost 的用戶名。

conf: 一個用於匹配用戶在哪些資源上擁有可配置權限的正則表達式。

write:一個用於匹配用戶在哪些資源上擁有可寫權限的正則表達式。

read:一個用於匹配用戶在哪些資源上擁有可讀權限的正則表達式

技術分享圖片

授予root用戶可以訪問虛擬主機vhost,並且在所有資源上都具備可配置、可讀、可寫的權限,代碼如下:

[root@node-1 ~]# rabbitmqctl set_permissions -p vhost root ".*" ".*" ".*"
Setting permissions for user "root" in vhost "vhost"

授予root用戶可訪問虛擬主機vhost2,在以“queue”開頭的資源上具備可配置權限,並且在所有資源上擁有可寫、可讀權限

[root@node-1 ~]# rabbitmqctl  set_permissions  -p vhost2 root "^queue.*" ".*" ".*"
Setting permissions for user "root" in vhost "vhost2"

在 RabbitMQ 中有兩個 Shell 命令可以列舉權限信息。第一個命令是 rabbitmqctl list permissions [-p vhost) ,用來顯示虛擬主機上的權限;第二個命令是 rabbitmqctl list user permissions {username) ,用來顯示用戶的權限。

技術分享圖片,

清除也是在vhost級別對用戶而言的,清除權限的命令為clear_permissions [-p <vhost>] <username> 其中vhost用於設置禁止用戶訪問的虛擬主機名稱,默認為“/”, username為禁止訪問虛擬主機的用戶名

[root@node-1 ~]# rabbitmqctl clear_permissions -p vhost root 
Clearing permissions for user "root" in vhost "vhost"

2、用戶管理

在RabbitMQ 中,用 戶是訪問控制 (Access Control)的基本單元,且單個用戶可以跨越 vhost 進行授權。針對一至多個 vhost ,用戶可以被賦予不同級別的訪問權限,並使用標準的 用戶名和密碼來認證用戶。

創建用戶的命令為 rabbitmqctl add user {username} {password} ,username表示創建的用戶,password表示為創建用戶的登錄密碼

創建一個用戶為root,密碼為root的用戶

rabbitmqct1 add_user root root

可以通過 rabbitmqctl change_password {username} {newpassword} 命令來更 改指定用戶的密碼 其中 username 表示要變更密碼的用戶名稱, newpassword 表示要變更的新的密碼。

技術分享圖片

同樣可以清除密碼,這樣用戶就不能使用密碼登錄了,對應的操作命令為 rabbitmqctl clear_password {username} ,其中 username 表示要清除密碼的用戶名稱。

使用 rabbitmqctl authentiçate_user {userηame} {password} 可以通過密碼來驗證用戶,其中 username 表示需要被驗證的用戶名稱, password 表示密碼

下面示例中分別采用root123和root321來驗證root用戶

[root@node-1 ~]# rabbitmqctl  authenticate_user   root root321
Authenticating user "root"
Error: failed to authenticate user "root"
[root@node-1 ~]# 
[root@node-1 ~]# rabbitmqctl  authenticate_user   root root123
Authenticating user "root"
Success

刪除用戶命令為 rabbitmqctl delete_user <username>

刪除root用戶

[root@node-1 ~]# rabbitmqctl delete_user root
Deleting user "root"

羅列所有用戶

[root@node-1 ~]# rabbitmqctl   list_users
Listing users
guest    [administrator]

用戶的角色分為 5種類型。

none:無任何角色。新創建的用戶的角色默認為none

management:可以訪問 Web 管理頁面。

policymaker:包含 management 的所有權限。

monitoring:包含 management 的所有權限,並且可以看到所有連接、信道及節點相關的信息。

administartor:包含 monitoring 的所有權限,井且可以管理用戶、 機、 權限、策略、參數等。 administator 代表了最高的權限。

用戶的角色可以通過rabbitmqctl set_user_tags <username> <tag> 設置,其中 username 參數表示需要設置角色的用戶名稱;tag 參數用於設置 0個、1 個或者多個的角色,設置之後任何之前現有的身份都會被刪除。

[root@node-1 ~]# rabbitmqctl  list_users
Listing users
guest    [administrator]
root    []
[root@node-1 ~]# rabbitmqctl  set_user_tags  root monitoring
Setting tags for user "root" to [monitoring]
[root@node-1 ~]# rabbitmqctl   list_users -q
guest    [administrator]
root    [monitoring]
[root@node-1 ~]# rabbitmqctl  set_user_tags  root  policymaker,management
Setting tags for user "root" to [policymaker,management]
[root@node-1 ~]# 
[root@node-1 ~]# rabbitmqctl   list_users -q
guest    [administrator]
root    [policymaker,management]

3、web端管理

  前面講述的都是使用 rabbitmqctl 工具來管理 RabbitMQ,有些時候是否會覺得這種方式是不是不太友好?而且為了能夠運行 rabbitmqctl 工具,當前的用戶需要擁有訪問 Erlang cookie 的權限,由於服務器可能是 guest 或者 root 用戶身份來運行的,因此你需要獲得這些文件的訪問權限 ,這樣就引申出來 些權限管理的問題。

  RabbitMQ開發團隊也考慮到了這種情況,並且開發了 RabbitMQ management 插件 RabbitMQ management 插件同樣是由 Erlang 語言編寫 的,並且和 RabbitMQ 服務運行在同一個 Erlang 虛擬機中。

為root用戶設置所有權限

  RabbitMQ management 插件可以提供 Web 管理界面用來管理如前面所述的虛擬主機、用 戶等,也可以用來管理隊列、交換器 、綁定關系、策略、 參數等 ,還可以用來監控 RabbitMQ 服務的狀態及一些數據統計類信息,可謂是功能強大,基本上能夠涵蓋所有 RabbitMQ 管理的 功能。

  在使用 Web 管理界面之前需要先啟用 RabbitMQ management 插件, RabbitMQ 提供了很多 的插件,默認存放在 $RABBITMQ_HOME /plugins 目錄下,如下所示

技術分享圖片

上面以.ez結尾的都是rabbitmq的插件,其中rabbitmq_management-3.6.10.ez就是rabbitmq management插件,啟動插件的命令是rabbitmq-plugins,其語法格式為

rabbitmq-plugins [-n <node>] <command> [<command options>] 啟動插件是使用rabbitmq-plugins enable [plugin-name] 關閉插件的命令是 rabbitmq-plugins disable [plugin-name]

執行rabbitmq-plugins enable rabbitmq_management來啟動rabbitmq management插件

[root@node-1 plugins]# rabbitmq-plugins enable rabbitmq_management
The following plugins have been enabled:
  amqp_client
  cowlib
  cowboy
  rabbitmq_web_dispatch
  rabbitmq_management_agent
  rabbitmq_management

Applying plugin configuration to rabbit@node-1... started 6 plugins.

可以通過 rabbitmq-plugins list 命令來查看當前插件的使用情況 如下所示。其中 標記為 [E*]的為顯式啟動,而 [e*] 為隱式啟動, 如顯式啟動 rabbitmq_management 插件 ,會同時隱式啟動 amqp_client 、cowboy、 cowlib rabbitmq_management_age、rabbitmq_web_dispatch 等另外 5個插件。

[root@node-1 plugins]# rabbitmq-plugins list 
 Configured: E = explicitly enabled; e = implicitly enabled
 | Status:   * = running on rabbit@node-1
 |/
[e*] amqp_client                       3.6.10
[e*] cowboy                            1.0.4
[e*] cowlib                            1.0.2
[  ] rabbitmq_amqp1_0                  3.6.10
[  ] rabbitmq_auth_backend_ldap        3.6.10
[  ] rabbitmq_auth_mechanism_ssl       3.6.10
[  ] rabbitmq_consistent_hash_exchange 3.6.10
[  ] rabbitmq_event_exchange           3.6.10
[  ] rabbitmq_federation               3.6.10
[  ] rabbitmq_federation_management    3.6.10
[  ] rabbitmq_jms_topic_exchange       3.6.10
[E*] rabbitmq_management               3.6.10
[e*] rabbitmq_management_agent         3.6.10
[  ] rabbitmq_management_visualiser    3.6.10
[  ] rabbitmq_mqtt                     3.6.10
[  ] rabbitmq_recent_history_exchange  3.6.10
[  ] rabbitmq_sharding                 3.6.10
[  ] rabbitmq_shovel                   3.6.10
[  ] rabbitmq_shovel_management        3.6.10
[  ] rabbitmq_stomp                    3.6.10
[  ] rabbitmq_top                      3.6.10
[  ] rabbitmq_tracing                  3.6.10
[  ] rabbitmq_trust_store              3.6.10
[e*] rabbitmq_web_dispatch             3.6.10
[  ] rabbitmq_web_mqtt                 3.6.10
[  ] rabbitmq_web_mqtt_examples        3.6.10
[  ] rabbitmq_web_stomp                3.6.10
[  ] rabbitmq_web_stomp_examples       3.6.10
[  ] sockjs                            0.3.4
[root@node-1 plugins]# 

默認guest用戶只能在本機上訪問進入管理頁面,其他用戶需設置

[root@node-1 plugins]# rabbitmqctl set_user_tags  root  administrator
Setting tags for user "root" to [administrator]
[root@node-1 plugins]# 
[root@node-1 plugins]# rabbitmqctl   list_users
Listing users
guest    [administrator]
root    [administrator]
[root@node-1 plugins]# 

瀏覽器中輸入http://192.168.10.129:15672

輸入root的用戶名和密碼成功登錄

技術分享圖片

三、rabbitmq集群搭建

這裏演示為三臺服務器搭建的一個集群環境,每臺服務器上都安裝rabbitmq

1、綁定hosts(三臺都綁定)

vi /etc/hosts

192.168.10.129 node-1
192.168.10.130 node-2
192.168.10.131 node-3

2、修改每臺服務器上的.erlang.cookie

以節點 node-1的.erlang.cookie為目標,修改node2和node3上的.erlang.cookie

註意:如不能保存,先chmod 600 .erlang.cookie 修改後在改回400權限chmod 400 .erlang.cookie

3、首先啟動 node-l node-2 node-3 節點 的rabbitmq服務

[root@node-1 sbin]# rabbitmq-server -detached
[root@node-2 sbin]# rabbitmq-server -detached
[root@node-3 sbin]# rabbitmq-server -detached

4、集群加入

接下來為了將每個節點組成一個集群,需要以 node-l 節點為基準,將 node-2 、node-3 節點 加入 node-l 節點的集群中。這3 個節點是平等的,如果想調換彼此的加入順序也未嘗不可。首 先將 node2 節點加入 nodel 節點的集群中,需要執行如下4 個命令步驟。

[root@node-2 sbin]# rabbitmqctl stop_app 
Stopping rabbit application on node rabbit@node-2
[root@node-2 sbin]# 
[root@node-2 sbin]# rabbitmqctl reset 
Resetting node rabbit@node-2
[root@node-2 sbin]# rabbitmqctl join_cluster rabbit@node-1
Clustering node rabbit@node-2 with rabbit@node-1
[root@node-2 sbin]# 
[root@node-2 sbin]# rabbitmqctl start_app
Starting node rabbit@node-2
[root@node-2 sbin]# 
[root@node-2 sbin]# rabbitmqctl cluster_status
Cluster status of node rabbit@node-2
[{nodes,[{disc,[rabbit@node-1,rabbit@node-2]}]},
 {running_nodes,[rabbit@node-1,rabbit@node-2]},
 {cluster_name,<<"rabbit@node-1">>},
 {partitions,[]},
 {alarms,[{rabbit@node-1,[]},{rabbit@node-2,[]}]}]
[root@node-2 sbin]# 
[root@node-2 sbin]# 

最後將 node-3 節點也加入 node-l 節點所在的集群中,這3 個節點組成了一個完整的集群。 在任意一個節點中都可以看到如下的集群狀態。

[root@node-3 ~]# rabbitmqctl stop_app 
Stopping rabbit application on node rabbit@node-3
[root@node-3 ~]# 
[root@node-3 ~]# rabbitmqctl reset
Resetting node rabbit@node-3
[root@node-3 ~]# rabbitmqctl join_cluster rabbit@node-1
Clustering node rabbit@node-3 with rabbit@node-1
[root@node-3 ~]# rabbitmqctl start_app
Starting node rabbit@node-3
[root@node-3 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@node-3
[{nodes,[{disc,[rabbit@node-1,rabbit@node-2,rabbit@node-3]}]},
 {running_nodes,[rabbit@node-1,rabbit@node-2,rabbit@node-3]},
 {cluster_name,<<"rabbit@node-1">>},
 {partitions,[]},
 {alarms,[{rabbit@node-1,[]},{rabbit@node-2,[]},{rabbit@node-3,[]}]}]
[root@node-3 ~]# 
[root@node-3 ~]# 

如果在node-2上用命令rabbitmqctl stop_app關閉一個節點,在node-1和node-3上查看集群節點信息

node-2上關閉

[root@node-2 sbin]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@node-2
[root@node-2 sbin]# 

node-1上查看集群情況

[root@node-1 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@node-1
[{nodes,[{disc,[rabbit@node-1,rabbit@node-2,rabbit@node-3]}]},
 {running_nodes,[rabbit@node-3,rabbit@node-1]},
 {cluster_name,<<"rabbit@node-1">>},
 {partitions,[]},
 {alarms,[{rabbit@node-3,[]},{rabbit@node-1,[]}]}]

node-3上查看集群情況

[root@node-3 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@node-1
[{nodes,[{disc,[rabbit@node-1,rabbit@node-2,rabbit@node-3]}]},
 {running_nodes,[rabbit@node-3,rabbit@node-1]},
 {cluster_name,<<"rabbit@node-1">>},
 {partitions,[]},
 {alarms,[{rabbit@node-3,[]},{rabbit@node-1,[]}]}]

如果關閉了集群中的所有節點,必須保證最後關閉的節點第一個啟動,如,我按照先後順序關閉了node-1、node-2、node-3 也就是node-3是最後一個關閉的。那麽在啟動是先啟動node-3節點,node-1和node-2誰先啟動都可以

否則機會啟動失敗(10次30秒的等待時間)

如果最後一個關閉的節點最終由於某些異常而無法啟動,則可以通過 rabbitrnqctl forget_cluster_node 命令來將此節點剔出當前集群。如果集 群中的所有節點由於某些非正常因素,比如斷電而關閉,那麽集群中的節點都會認為還有其他 節點在它後面關閉,

此時需要調用 rabbitrnqctl force_boot 命令來啟動一個節點,之後 集群才能正常啟動。

四、集群節點類型

  在使用 rabbitrnqctl cluster_status 命令來查看集群狀態時會有 {nodes [{disc , [rabbit@node-l , rabbit@node-2 , rabbit@node-3] 這一項信息,其中的 disc 標註了 RabbitMQ 節點的類型。 RabbitMQ 中的每一個節點,不管是單一節點系統或者是集群中的一部分 要麽是內存節點,要麽是磁盤節點。 內存節點將所有的隊列、 交換器、綁定關系、用戶、權限和 host 的元數據定義都存儲在內存中,而磁盤節點則將這些信息存儲到磁盤中。單節點的集群中必然只有 磁盤類型的節點,否則當重啟 RabbitMQ之後,所有關於系統的配置信息都會丟失。不過在集群中, 可以選擇配置部分節點為內存節點,這樣可以獲得更高的性能。

比如將 node-2 節點加入 nod 節點的時候可以指定 node-2節點的類型為內存節點。

[root@node-2 /] rabbitmqctl join_cluster rabbit@node-l --ram 

這樣在以 node-l和 node-2 組成的集群中就會有一個磁盤節點和一個內存節點,默認不添加 "-ram"參數則表示此節點為磁盤節點。

如果集群已經搭建好了,那麽也可以使用 rabbitmqctl change_cluster_node_type {disc ,ram} 命令來切換節點的類型,其中 disc 表示磁盤節點,而 ram 表示內存節點。舉例, 這裏將上面 node-2 節點由磁盤節點轉變為內存節點。

[root@node-2 /]# rabbitmqctl stop_app
Stopping rabbit application on node ‘rabbit@node-2‘ [root@node
-2 /]# rabbitmqctl change_cluster_node_type ram Turning rabbit@node-2 into a ram node [root@node-2 /]# [root@node-2 /]# rabbitmqctl start_app Starting node rabbit@node-2 [root@node-2 /]# rabbitmqctl cluster_status Cluster status of node rabbit@node-2 [{nodes,[{disc,[rabbit@node-3,rabbit@node-1]},{ram,[rabbit@node-2]}]}, {running_nodes,[rabbit@node-1,rabbit@node-3,rabbit@node-2]}, {cluster_name,<<"rabbit@node-1">>}, {partitions,[]}, {alarms,[{rabbit@node-1,[]},{rabbit@node-3,[]},{rabbit@node-2,[]}]}]

五、從集群中剔除單個節點

有兩種方式將一個節點從集群中剔除,比如將node-2從集群中踢出。

1、第一種方法

在node-2上關閉服務rabbitmqctl stop_app,在node-1或者node-3上執行

[root@node-3 ~]# rabbitmqctl forget_cluster_node rabbit@node-2
Removing node rabbit@node-2 from cluster
[root@node-3 ~]# 
[root@node-3 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@node-3
[{nodes,[{disc,[rabbit@node-1,rabbit@node-3]}]},
 {running_nodes,[rabbit@node-1,rabbit@node-3]},
 {cluster_name,<<"rabbit@node-1">>},
 {partitions,[]},
 {alarms,[{rabbit@node-1,[]},{rabbit@node-3,[]}]}]

2、第二種方法(推薦此方法)

直接在node-2節點上執行

[root@node-2 /]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@node-2
[root@node-2 /]# rabbitmqctl reset
Resetting node rabbit@node-2
[root@node-2 /]# 
[root@node-2 /]# rabbitmqctl start_app
Starting node rabbit@node-2
[root@node-2 /]# 
[root@node-2 /]# rabbitmqctl cluster_status
Cluster status of node rabbit@node-2
[{nodes,[{disc,[rabbit@node-2]}]},
 {running_nodes,[rabbit@node-2]},
 {cluster_name,<<"rabbit@node-2">>},
 {partitions,[]},
 {alarms,[{rabbit@node-2,[]}]}]
[root@node-2 /]# 

rabbitmq安裝及基本操作(含集群配置)