rabbitmq 同步策略_RabbitMQ 高可用之镜像队列

如果RabbitMQ集群只有一个broker节点,那么该节点的失效将导致整个服务临时性的不可用,并且可能会导致message的丢失(尤其是在非持久化message存储于非持久化queue中的时候)。可以将所有message都设置为持久化,并且使用持久化的queue,但是这样仍然无法避免由于缓存导致的问题:因为message在发送之后和被写入磁盘并执行fsync之间存在一个虽然短暂但是会产生问题的时间窗。通过publisher的confirm机制能够确保客户端知道哪些message已经存入磁盘,尽管如此,一般不希望遇到因单点故障导致服务不可用。

如果RabbitMQ集群是由多个broker节点构成的,那么从服务的整体可用性上来讲,该集群对于单点失效是有弹性的,但是同时也需要注意:尽管exchange和binding能够在单点失效问题上幸免于难,但是queue和其上持有的message却不行,这是因为queue及其内容仅仅存储于单个节点之上,所以一个节点的失效表现为其对应的queue不可用。

举例说明一下,如果一个MQ集群由三个节点组成(MQ集群节点的模式也是有讲究的,一般三个节点会有一个RAM,两个DISK),exchange、bindings 等元数据会在三个节点之间同步,但queue上的消息是不会同步的,且不特殊设置的情况下,Queue只会在一个节点存在。可能有的同学会提另一个问题,我从三个MQ几点的监控面板,都可以看到这个Queue?这个是对的,这是由于Queue的元数据也是在三个节点之间同步,但Queue的实际存储只会在一个节点。我们发送消息到指定Queue,其实是发送消息到指定节点下的Queue。如下图所示,消息发送至队列testQueue,无论发送者通过哪个MQ节点执行发送,其最终的执行都会是在MQ03节点执行消息的存储。

2b46a72ee9db5b534e2e94eafd5a3263.png

说到这儿,可能有的小伙伴就要问了?说好的,RabbitMQ集群提供高可用性呢。

分析一下,RabbitMQ集群搭建完成后,如果不进行任何高可用配置,会有哪些问题呢?

  1. 单点故障会导致消息丢失:如果MQ03节点故障,那么MQ03 中的消息就会丢失
  2. 无法最大化的利用MQ提供,提升执行效率:既然每次发送到队列testQ
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值