RabbitMQ集群搭建

1.集群形式

RabbitMQ是用Erlag开发的,集群非常方便,因为Erlag天生就是一门分布式语言,但期本身就是分布式语言,但并不支持负载均衡(需要负载均衡的话弄一个nginx在实现)
RabbitMQ集群中节点包括内存节点(RAM)磁盘节点(Disk,消息持久化),集群中至少有一个Disk节点

  • 普通模式
    对于普通模式,集群中各个节点有相同的队列结构,但消息只会存在于集群中的一个几点,对于消费者来说,若消息进入A节点的Queue中当从B节点拉取是,RabbitMQ会将消息从A中取出,并经过B发送给消费者。
    应用场景:该模式适合于消息无需持久化的场合,如日志消息,当队列非持久化,且创建队列的节点宕机,客户端才可以重连集群其他节点,并重新创建队列,若持久化,只能等故障节点回复。

  • 镜像模式
    与普通模式不同之处的是消息实体会主动在镜像节点间同步,而不是在取数据时零时拉取,高可用,该模式下,mirror queue有一台选举算法,即一个master、n个slaver,生产者、消费者的请求都会转至master。
    应用场景:可靠性要求较高场合,如下单,库存队列。
    缺点:若镜像队列过多,且消息体量大,集群内部网络带宽会将此种同步通讯所消耗
    1.镜像集群也是基于普通集群,即只有先搭建普通集群,然后才能设置镜像队列
    2.若消费过程中,master挂掉,则选举新master,若未来得及确认,则可能重复消费。

2.集群搭建

1.启动RabbitMQ容器
主节点

docker run -d --hostname rabbitmq01 --name rabbitmq01 -v /home/rabbitmq/rabbitmq01:/var/lib/rabbitmq -p 15673:15672 -p 5673:5672 -e RABBITMQ_ERLANG_COOKIE='test' rabbitmq:management

从节点

docker run -d --hostname rabbitmq02 --name rabbitmq02 -v /home/rabbitmq/rabbitmq02:/var/lib/rabbitmq -p 15674:15672 -p 5674:5672 -e RABBITMQ_ERLANG_COOKIE='test' --link rabbitmq01:rabbitmq01 rabbitmq:management

docker run -d --hostname rabbitmq03 --name rabbitmq03 -v /home/rabbitmq/rabbitmq03:/var/lib/rabbitmq -p 15675:15672 -p 5675:5672 -e RABBITMQ_ERLANG_COOKIE='test' --link rabbitmq01:rabbitmq01 --link rabbitmq02:rabbitmq02 rabbitmq:management

2.进入容器修改配置
主节点

如果都是新创建的就不用下面的操作
停止当前RabbitMQ 
rabbitmqctl stop_app
重置rabbitmq
rabbitmqctl reset
重启rabbitMQ
rabbitmqctl start_app

从节点

如果都是新创建的就不用下面的操作,这里两个从节点都执行
停止当前RabbitMQ 
rabbitmqctl stop_app
重置rabbitmq
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbitmq01
重启rabbitMQ
rabbitmqctl start_app

3.查看效果
在这里插入图片描述
目前集群处于普通集群状态,普通集群容易出现单点故障,而且这里持久化数据只有rabbitmq01才有,只有它的info标识为dise

4.升级为镜像集群
进入任意集群容器内部

docker exec -it rabbitmq03 /bin/bash
rabbitmqctl set_policy -p / ha "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'

ha-mode:策略模式,all即复制到所有节点,包含新增节点
ha :策略名字
-p / 代表虚拟主机
“^": 策略正则表达式为“^"表示所有匹配所,表示匹配所有的队列,所有的队列都使用高可用策略
ha-sync-mode:同步模式automatic,rabbitmq自动同步

查看集群中虚拟主机为/的策略

rabbitmqctl list_policies -p /;

在这里插入图片描述

5.验证镜像模式
rabbitmq01创建hello队列
在这里插入图片描述
切换到rabbitmq02、rabbitmq03队列中查看

在这里插入图片描述
在这里插入图片描述
队列都是同步存在的!

在任意rabbitmq中发送一条消息
在这里插入图片描述
其他rabbitmq同步接收
在这里插入图片描述
在这里插入图片描述
任意rabbitmq接收消息,并ACK
在这里插入图片描述
其他rabbitmq中的消息也会被同时ACK签收
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员劝退师-TAO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值