- 清理单机和网络开发
- 关闭原先的单节点
- 阿里网络安全组开放对应的端口
- 防火墙一定要关闭
- 准备3个节点安装好rabbitmq,形成集群 (记得每个节点间隔几十秒再启动,如果失败删除宿主机文件重新搭建)
#节点一,主节点,创建-v映射目录 docker run -d --hostname rabbit_host1 --name rabbitmq1 -p 15672:15672 -p 5672:5672 -e RABBITMQ_NODENAME=rabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=xdclass.net168 -e RABBITMQ_ERLANG_COOKIE='rabbitmq_cookie_xdclass' --privileged=true -v /usr/local/rabbitmq/1/lib:/var/lib/rabbitmq -v /usr/local/rabbitmq/1/log:/var/log/rabbitmq rabbitmq:management #节点二,创建-v映射目录 docker run -d --hostname rabbit_host2 --name rabbitmq2 -p 15673:15672 -p 5673:5672 --link rabbitmq1:rabbit_host1 -e RABBITMQ_NODENAME=rabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=xdclass.net168 -e RABBITMQ_ERLANG_COOKIE='rabbitmq_cookie_xdclass' --privileged=true -v /usr/local/rabbitmq/2/lib:/var/lib/rabbitmq -v /usr/local/rabbitmq/2/log:/var/log/rabbitmq rabbitmq:management #节点三,创建-v映射目录 docker run -d --hostname rabbit_host3 --name rabbitmq3 -p 15674:15672 -p 5674:5672 --link rabbitmq1:rabbit_host1 --link rabbitmq2:rabbit_host2 -e RABBITMQ_NODENAME=rabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=xdclass.net168 -e RABBITMQ_ERLANG_COOKIE='rabbitmq_cookie_xdclass' --privileged=true -v /usr/local/rabbitmq/3/lib:/var/lib/rabbitmq -v /usr/local/rabbitmq/3/log:/var/log/rabbitmq rabbitmq:management
- 参数说明
--hostname 自定义Docker容器的 hostname --link 容器之间连接,link不可或缺,使得三个容器能互相通信 --privileged=true 使用该参数,container内的root拥有真正的root权限,否则容器出现permission denied -v 宿主机和容器路径映射 参数 RABBITMQ_NODENAME,缺省 Unix*: rabbit@$HOSTNAME 参数 RABBITMQ_DEFAULT_USER=admin 参数 RABBITMQ_DEFAULT_PASS=xdclass.net168 Erlang Cookie 值必须相同,也就是一个集群内 RABBITMQ_ERLANG_COOKIE 参数的值必须相同, 相当于不同节点之间通讯的密钥,erlang.cookie是erlang的分布式token文件,集群内各个节点的erlang.cookie需要相同,才可以互相通信
配置集群
节点一配置集群 docker exec -it rabbitmq1 bash rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl start_app exit 节点二加入集群,--ram是以内存方式加入,忽略该参数默认为磁盘节点。 docker exec -it rabbitmq2 bash rabbitmqctl stop_app rabbitmqctl join_cluster --ram rabbit@rabbit_host1 rabbitmqctl start_app exit 节点三加入集群,--ram是以内存方式加入,忽略该参数默认为磁盘节点。 docker exec -it rabbitmq3 bash rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl join_cluster --ram rabbit@rabbit_host1 rabbitmqctl start_app exit #查看集群节点状态,配置启动了3个节点,1个磁盘节点和2个内存节点 rabbitmqctl cluster_status
到此为止,我们已经完成了RabbitMQ普通模式集群的建立,启动了3个节点,1个磁盘节点和2个内存节点
测试
node1 主节点创建队列,发送消息 (可以选择消息是否持久化)
node2和node3通过节点自身的web管控台可以看到队列和消息
问题:如果把node1节点停止,node2和node3会收不到消息
备注:如果是在非主节点(非磁盘节点)创建队列和发送消息,则其他队列可以显示
本文作者为DBC,转载请注明。