Docker部署RabbitMQ集群(镜像模式+Haproxy)
一、镜像模式
概念介绍
镜像模式:集群模式非常经典的就是Mirror镜像模式,保证100%数据不丢失,在实际工作中也是用的最多的。并且实现集群非常的单间,一般互联网大厂都会构建这种集群模式;
Mirror镜像队列,目的是为了保证rabbitmq数据的高可靠性解决方法,主要就是实现数据的同步,一般来是2-3个节点实现数据同步(对以100%数据可靠性解决方案一般是3个节点)集群架构如下:

我是在windows上使用docker单机部署的;
RabbitMQ 集群环境说明:
| 服务器IP | 容器名称 | 节点说明 | 端口 | 管控台地址 |
|---|---|---|---|---|
| 192.168.1.105 | master72 | rabbitmq master | 5672 | http://192.168.1.105:15672 |
| 192.168.1.105 | slave73 | rabbitmq slave | 5673 | http://192.168.1.105:15673 |
| 192.168.1.105 | slave74 | rabbitmq slave | 5674 | http://192.168.1.105:15674 |
| 192.168.1.105 | rabbitmq-haproxy8100 | haproxy | 8100 | http://192.168.1.105:8100/rabbitmq-stats |
| 192.168.1.105 | rabbitmq-haproxy8101 | haproxy | 8101 | http://192.168.1.105:8101/rabbitmq-stats |
部署步骤
1、下载windows版本的docker参考https://www.runoob.com/docker/windows-docker-install.html
2、创建一个桥接网络
docker network create rabbtimanet
查看网络:docker network ls

3、拉取最新rabbitmq和haproxy 最新镜像
docker pull rabbitmq
docker pull haproxy
查看镜像:docker images

4、启动并创建容器master72、slave73、slave74
docker run -d --name=master72 -p 5672:5672 -p 15672:15672 -e RABBITMQ_NODENAME=master72 -e RABBITMQ_ERLANG_COOKIE=‘JIANGZHONGJIE’ -h master72 --net=rabbtimanet rabbitmq:latestdocker run -d --name=slave73 -p 5673:5672 -p 15673:15672 -e RABBITMQ_NODENAME=slave73 -e RABBITMQ_ERLANG_COOKIE=‘JIANGZHONGJIE’ -h slave73 --net=rabbtimanet rabbitmq:latestdocker run -d --name=slave74 -p 5674:5672 -p 15674:15672 -e RABBITMQ_NODENAME=slave74 -e RABBITMQ_ERLANG_COOKIE=‘JIANGZHONGJIE’ -h slave74 --net=rabbtimanet rabbitmq:latest
RABBITMQ_ERLANG_COOKIE:通过Erlang Cookie,相当于共享秘钥的概念,长度任意,只要所有容器都一致即可。
-h: 设置容器hostname名称
–net: 设置所属网络
分别进入master72、slave73、slave74 容器(docker exec -it 容器id /bin/bash),执行一下:
//图形化界面安装
rabbitmq-plugins enable rabbitmq_management
可以访问以下地址进行测试:
http://localhost:15672/#/
http://localhost:15673/#/
http://localhost:15674/#/
5、salve加入集群操作(注意做这个步骤的时候:需要配置/etc/hosts必须相互能够寻地到 我们已通过-h指定hostname)
分别进入slave73、slave73容器(docker exec -it 容器id /bin/bash),执行一下:
rabbitmqctl stop_app
rabbitmqctl join_cluster --ram master72@master72
//(--ram:内存存储方式,默认磁盘存储)
rabbitmqctl start_app
访问任意管控台http://localhost:15674/#/ 如下图:

//其他基本操作
// 在另外其他节点上操作要移除的集群节点
rabbitmqctl forget_cluster_node master73@master73
//集群名称(默认为第一个node名称)修改(任意节点):
rabbitmqctl set_cluster_name rabbitmq_cluster1
//查看集群状态(任意节点)
rabbitmqctl cluster_status
6、配置镜像队列
//设置镜像队列策略(在任意一个节点上执行)
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
*将所有队列设置为镜像队列,即队列会被同步复制到各个节点,RabbitMQ高可用集群就已经搭建好了,我们可以重启服务,查看队列是否在从节点同步。
二、HaProxy
概念介绍
HaProxy是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HaProxy特别适用于负载特大的web站点,这些站点通常又需要会话保持或七层处理。HaProxy运行在时下的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以简单安全整合进您当前框架中,同时可以保护你的web服务器不被暴露到网络上
部署步骤
我们将创建两个容器分别为:rabbitmq-haproxy8100、rabbitmq-haproxy8101
1、创建容器rabbitmq-haproxy8100挂载的配置文件haproxy.cfg
#logging options
globallog 127.0.0.1 local0 infomaxconn 5120chroot /usr/local/etc/haproxyuid 99gid 99daemonquietnbproc 20pidfile /var/run/haproxy.piddefaultslog global#使用4层代理模式,”mode http”为7层代理模式mode tcp#if you set mode to tcp,then you nust change tcplog into httplogoption tcplogoption dontlognullretries 3option redispatchmaxconn 2000timeout connect 5s#客户端空闲超时时间为 60秒 则HA 发起重连机制timeout client 60s#服务器端链接超时时间为 15秒 则HA 发起重连机制timeout server 15s
#front-end IP for consumers and producterslisten rabbitmq_clusterbind 0.0.0.0:5677#配置TCP模式mode tcp#balance url_param userid#balance url_param session_id check_post 64#balance hdr(User-Agent)#balance hdr(host)#balance hdr(Host) use_domain_only#balance rdp-cookie#balance leastconn#balance source //ip#简单的轮询balance roundrobin#rabbitmq集群节点配置 #inter 每隔五秒对mq集群做健康检查, 2次正确证明服务器可用,2次失败证明服务器不可用,并且配置主备机制server master72 192.168.1.105:5672 check inter 5000 rise 2 fall 2server slave73 192.168.1.105:5673 check inter 5000 rise 2 fall 2server slave74 192.168.1.105:5674 check inter 5000 rise 2 fall 2
#配置haproxy web监控,查看统计信息
listen statsbind 0.0.0.0:8100mode httpoption httplogstats enable#设置haproxy监控地址为http://localhost:8100/rabbitmq-statsstats uri /rabbitmq-statsstats refresh 5sstats auth admin:123456
listen rabbitmq_admin #监听8000端口转发到rabbitmq的客户端bind 0.0.0.0:8000server master72 192.168.1.105:15672 check inter 5000 rise 2 fall 2server slave73 192.168.1.105:15673 check inter 5000 rise 2 fall 2server slave74 192.168.1.105:15674 check inter 5000 rise 2 fall 2
2、创建容器rabbitmq-haproxy8101挂载的配置文件haproxy.cfg
复制上面内容把5677、8100、8000端口改成5678、8101、8001即可
3、分别创建并且运行容器
docker run --name rabbitmq-haproxy8100 -p 5677:5677 -p 8100:8100 -p 8000:8000 --net=rabbtimanet -v H:\haproxy\8100\haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro haproxy:latest
docker run --name rabbitmq-haproxy8101 -p 5678:5678 -p 8101:8101 -p 8001:8001 --net=rabbtimanet -v H:\haproxy\8101\haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro haproxy:latest
容器启动成功后访问:
http://localhost:8100/rabbitmq-stats
http://localhost:8101/rabbitmq-stats

访问地址查看RabbitMQ的3个节点为绿色,表示正常;
访问以下地址转发到RabbitMQ客户端:
http://localhost:8000
http://localhost:8001
本文参考教学视频:https://www.bilibili.com/video/av71666962
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
