在搭建rabbitmq集群的時候,添加內存節點時,拋出異常:Error: unable TO perform an operation ON node 'rabbit@test3'. Please see diagnostics information AND suggestions below.
首先,假設當前服務器為A,我們在A服務器執行rabbitmqctl join_cluster rabbit@B --ram,就是說我們要將A服務器作為內存節點加入到B中,然后執行這個命令報了上述的錯誤
總結了一下,這個問題可按以下思路解決:
1、查看A,B兩台服務器中rabbitmq根目錄(rabbitmq安裝目錄)下的.erlang.cookie文件是否存在,且內容是否一樣(使用cat命令輸出),另外,可以的話,將用戶主目錄下的.erlang.cookie文件設置成和rabbitmq根目錄下的.erlang.cookie文件一致
注:這里說的是rabbitmq根目錄,准確說不是的,因為rabbitmq啟動需要設置HOME環境變量,一般在rabbitmq-env文件(在rabbitmq根目錄的bin目錄下)中添加HOME環境變量,如果不設置HOME變量,可能會拋出異常erlexec: HOME must be set
這里應該是查看A,B兩台服務器上rabbitmq-env中配置的HOME變量指定的目錄下.erlang.cookie是否存在且內容一致,而我們一般將這個HOME變量指向rabbitmq的根目錄
2、rabbitmqctl join_cluster rabbit@B --ram命令中的B貌似只能是host,不能是IP,因此需要在/etc/hosts中添加相應的IP--host映射,添加后,看能否ping通
3、重啟A,B服務器中的rabbitmq相關進程:
#查找rabbitmq相關進程 ps -ef | grep rabbitmq #殺掉,可以使用-9強制殺掉 sudo kill 5760 5761 5917 #啟動rabbitmq,命令后加個&表示在后台啟動 sudo rabbitmq-server &
4、先暫停A中的應用,再指定join_cluster,若執行成功,再啟動應用,在A中執行以下命令
# 停止應用 sudo rabbitmqctl stop_app #將A作為內存節點添加到B中去,--ram參數就是表示是內存節點,如果不帶這個參數,就是磁盤節點 sudo rabbitmqctl join_cluster rabbit@B --ram # 若上面命令執行成功,則啟動應用 sudo rabbitmqctl start_app