Docker部署RabbitMQ集群(镜像模式+Haproxy)

一、镜像模式

概念介绍

镜像模式:集群模式非常经典的就是Mirror镜像模式,保证100%数据不丢失,在实际工作中也是用的最多的。并且实现集群非常的单间,一般互联网大厂都会构建这种集群模式;

Mirror镜像队列,目的是为了保证rabbitmq数据的高可靠性解决方法,主要就是实现数据的同步,一般来是2-3个节点实现数据同步(对以100%数据可靠性解决方案一般是3个节点)集群架构如下:
Docker部署RabbitMQ集群(镜像模式+Haproxy)_第1张图片
我是在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
Docker部署RabbitMQ集群(镜像模式+Haproxy)_第2张图片

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:latest

docker run -d --name=slave73 -p 5673:5672 -p 15673:15672 -e RABBITMQ_NODENAME=slave73 -e RABBITMQ_ERLANG_COOKIE=‘JIANGZHONGJIE’ -h slave73 --net=rabbtimanet rabbitmq:latest

docker 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/#/ 如下图:
Docker部署RabbitMQ集群(镜像模式+Haproxy)_第3张图片

//其他基本操作
// 在另外其他节点上操作要移除的集群节点
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
global
	log 127.0.0.1 local0 info
	maxconn 5120
	chroot /usr/local/etc/haproxy
	uid 99
	gid 99
	daemon
	quiet
	nbproc 20
	pidfile /var/run/haproxy.pid

defaults
	log global
	#使用4层代理模式,”mode http”为7层代理模式
	mode tcp
	#if you set mode to tcp,then you nust change tcplog into httplog
	option tcplog
	option dontlognull
	retries 3
	option redispatch
	maxconn 2000
	timeout connect 5s
    #客户端空闲超时时间为 60秒 则HA 发起重连机制
    timeout client 60s
    #服务器端链接超时时间为 15秒 则HA 发起重连机制
    timeout server 15s
#front-end IP for consumers and producters

listen rabbitmq_cluster
	bind 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 2
    server slave73 192.168.1.105:5673 check inter 5000 rise 2 fall 2
    server slave74 192.168.1.105:5674 check inter 5000 rise 2 fall 2
#配置haproxy web监控,查看统计信息
listen stats
	bind 0.0.0.0:8100
	mode http
	option httplog
	stats enable
	#设置haproxy监控地址为http://localhost:8100/rabbitmq-stats
	stats uri /rabbitmq-stats
	stats refresh 5s
	stats auth admin:123456
listen rabbitmq_admin #监听8000端口转发到rabbitmq的客户端
    bind 0.0.0.0:8000
    server master72 192.168.1.105:15672 check inter 5000 rise 2 fall 2
    server slave73 192.168.1.105:15673 check inter 5000 rise 2 fall 2
    server 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
Docker部署RabbitMQ集群(镜像模式+Haproxy)_第4张图片
访问地址查看RabbitMQ的3个节点为绿色,表示正常;

访问以下地址转发到RabbitMQ客户端:
http://localhost:8000
http://localhost:8001

本文参考教学视频:https://www.bilibili.com/video/av71666962

你可能感兴趣的:(RabbitMQ)