1、在node2、node3、node4三台Linux虚拟机中安装RabbitMQ。
2、从node2拷贝.erlang.cookie到node3、node4的相应目录
如果没有该文件,手动创建/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:
3、使用下述命令启动node3和node4上的RabbitMQ:
systemctl start rabbitmq-server
4、将node3和node4这两个节点加入到集群中
分别执行如下命令:
# 停止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
- rabbit@node2 表示RabbitMQ节点名称,默认前缀就是rabbit , @ 之后是当前虚拟主机所在的物理主机hostname 。
- 注意检查下hostname要可以相互ping通
- join_cluster默认是使用disk模式,后面可以加入参数--ram启用内存模式
移出集群节点使用:
# 将虚拟主机(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 插件。