如果没有该文件,手动创建/var/lib/rabbitmq/.erlang.cookie ,生成Cookie字符串,或者启动一次RabbitMQ自动生成该文件。生产中推荐使用第三方工具生成。
我们首先在node2上启动单机版RabbitMQ,以生成Cookie文件:
systemctl start rabbitmq-server
开始准备同步.erlang.cookie 文件。RabbitMQ的集群依赖Erlang的分布式特性,需要保持Erlang Cookie一致才能实现集群节点的认证和通信,我们直接使用scp命令从node1远程传输。
- scp /var/lib/rabbitmq/.erlang.cookie root@node3:/var/lib/rabbitmq/
- scp /var/lib/rabbitmq/.erlang.cookie root@node4:/var/lib/rabbitmq/
修改node3和node4上该文件的所有者为rabbitmq:rabbitmq:
chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
注意.erlang.cookie文件权限为400:

systemctl start rabbitmq-server
分别执行如下命令:
- # 停止Erlang VM上运行的RabbitMQ应用,保持Erlang VM的运行
- rabbitmqctl stop_app
-
- # 移除当前RabbitMQ虚拟主机中的所有数据:重置
- rabbitmqctl reset
-
- # 将当前RabbitMQ的主机加入到rabbit@node2这个虚拟主机的集群中。一个节点也是集群。
- rabbitmqctl join_cluster rabbit@node2
-
- # 启动当前Erlang VM上的RabbitMQ应用
- rabbitmqctl start_app
移出集群节点使用:
- # 将虚拟主机(RabbitMQ的节点)rabbit@node3从集群中移除,但是rabbit@node3还保留集群信息
- # 还是会尝试加入集群,但是会被拒绝。可以重置rabbit@node3节点。
- rabbitmqctl forget_cluster_node rabbit@node3
- #修改集群名称(任意节点执行都可以)
- rabbitmqctl set_cluster_name
-
- #查看集群状态(任意节点执行都可以)
- rabbitmqctl cluster_status


在三个RabbitMQ节点上的任意一个添加用户,设置用户权限,设置用户标签,即可
- rabbitmqctl add_user root 123456
- rabbitmqctl set_permissions --vhost "/" root ".*" ".*" ".*"
- rabbitmqctl set_user_tags --vhost "/" root administrator
可以到web控制台查看集群信息,如果要看到所有RabbitMQ节点上的运行情况,都需要启用rabbitmq_management 插件。
