首页 > 其他 > 详细

RabbitMQ (十五) 镜像集群

时间:2019-02-10 18:32:07      阅读:274      评论:0      收藏:0      [点我收藏+]

RabbitMQ 默认的集群模式,也就是普通模式,最大的问题就在于存储队列完整数据的节点一旦宕机,

如果是非持久化队列,则消息丢失;如果是持久化队列+持久化消息,则必须等该节点恢复.

所以后来 RabbitMQ 开始支持队列(完整数据)复制.比如在有5个节点的集群里,可以指定某个队列的完整数据在2个节点上进行存储,从而在性能与高可用之间取得一个平衡,这就是镜像模式,它属于 RabbitMQ 的HA方案.

镜像模式解决了普通模式的问题,消息实体会主动在镜像节点间同步,而不是在消费者获取数据的时候临时从其他节点拉取.当然,该模式的副作用也很明显:

  • 消息需要复制到每一个节点,对于持久化消息,网络和磁盘同步复制的开销都会明显增加;
  • 如果镜像队列数量过多,大量的消息进入,集群内部的网络带宽将会被这种同步通讯大大消耗掉.

所以镜像模式适合在对可靠性要求较高的场合中使用.

综上所述,镜像模式的实质是镜像队列,一个队列想做成镜像队列,需要先设置 policy,然后客户端创建队列的时候,RabbitMQ 集群根据“队列名称”自动设置是普通集群模式或镜像模式.

下面我们通过管理后台将前面搭建的单机集群模式修改成镜像模式.

第一步

技术分享图片

第二步

技术分享图片

 

  • Virtual host : 虚拟主机.
  • Name : 策略名称.
  • Pattern : ^ 表示匹配所有队列名称.
  • Apply to : 这里选择的是同时应用到交换机和队列.
  • ha-mode 和 ha-params 见下表(原贴:http://www.ywnds.com/?p=4741)

技术分享图片

  

然后我们可以看到,该虚拟主机下面的交换机和队列都被打上了 test_mirror 标签

技术分享图片

 

技术分享图片

 

+1 表示同步了1个节点.

进入该队列详情,可以清晰的看到 : 策略名称,队列所属节点以及镜像节点等.

技术分享图片

 

验证功能

将就上一篇普通集群的代码.

1.生产者连接到 node1 (5672) 发送消息,然后关闭 node1.

通过 node2 的管理后台可以看到队列依然在.

技术分享图片

但是有个细节,Node 从 rabbit1@node1 变成了 rabbit2@node2.

进入该队列详情,节点归属已经变成了 rabbit2@node2 , 而镜像节点是空.

技术分享图片

2.消费者连接到 node2 接收消息

一切正常.

3.重新启动 node1

技术分享图片

可以看到,队列的归属节点不会再还原回去了. 

参考:http://www.ywnds.com/?p=4741

RabbitMQ (十五) 镜像集群

原文:https://www.cnblogs.com/refuge/p/10359539.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!