rabbimq集群搭建报错:Error: unable TO perform an operation ON node 'rabbit@test3'. Please see diagnostics information AND suggestions below.
在搭建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