RabbitMQ 集群及调优

RabbitMQ 集群

主备模式 也称为Warren(兔子窝)模式

一主一备或者一主多备

Haproxy配置
isten rabbitmq_cluster

bind 0.0.0.0:567 # 配置 tcp 模式
mode tcp # 简单的轮询
balance roundrobin # 主节点 roundrobin 随机
server 你的76机器 hostname 192.168.11.76:5672 check inter 5000 rise 2 fall 2
server 你的77机器 hostname 192.168.11.77:5672 backup check inter 5000 rise 2 fall 2 # 备用节点
注意了,上面的 rabbitMQ 集群节点配置 # inter 每隔 5 秒对 mq 集群做健康检查, 2 次正确证明服务可用,2 次失败证明服务器不可用,并且配置主备机制

在这里插入图片描述

远程模式

远程模式可以实现双活的一种模式,简称 shovel 模式,所谓的 shovel 就是把消息进行不同数据中心的复制工作,可以跨地域的让两个 MQ 集群互联,远距离通信和复制。
Shovel 就是我们可以把消息进行数据中心的复制工作,我们可以跨地域的让两个 MQ 集群互联。
在这里插入图片描述
如图所示,有两个异地的 MQ 集群(可以是更多的集群),当用户在地区 1 这里下单了,系统发消息到 1 区的 MQ 服务器,发现 MQ 服务已超过设定的阈值,负载过高,这条消息就会被转到 地区 2 的 MQ 服务器上,由 2 区的去执行后面的业务逻辑,相当于分摊我们的服务压力。

在使用了 shovel 插件后,模型变成了近端同步确认,远端异步确认的方式,大大提高了订单确认速度,并且还能保证可靠性。

如上图所示,当我们的消息到达 exchange,它会判断当前的负载情况以及设定的阈值,如果负载不高就把消息放到我们正常的 warehouse_goleta 队列中,如果负载过高了,就会放到 backup_orders 队列中。backup_orders 队列通过 shovel 插件与另外的 MQ 集群进行同步数据,把消息发到第二个 MQ 集群上。

这是 rabbitMQ 比较早期的架构模型了,现在很少使用了。

镜像模式

非常经典的 mirror 镜像模式,保证 100% 数据不丢失。在实际工作中也是用得最多的,并且实现非常的简单,一般互联网大厂都会构建这种镜像集群模式。
mirror 镜像队列,目的是为了保证 rabbitMQ 数据的高可靠性解决方案,主要就是实现数据的同步,一般来讲是 2 - 3 个节点实现数据同步。对于 100% 数据可靠性解决方案,一般是采用 3 个节点。

在这里插入图片描述如上图所示,用 KeepAlived 做了 HA-Proxy 的高可用,然后有 3 个节点的 MQ 服务,消息发送到主节点上,主节点通过 mirror 队列把数据同步到其他的 MQ 节点,这样来实现其高可靠。

多活模式

也是实现异地数据复制的主流模式,因为 shovel 模式配置比较复杂,所以一般来说,实现异地集群的都是采用这种双活 或者 多活模型来实现的。这种模式需要依赖 rabbitMQ 的 federation 插件,可以实现持续的,可靠的 AMQP 数据通信,多活模式在实际配置与应用非常的简单。
rabbitMQ 部署架构采用双中心模式(多中心),那么在两套(或多套)数据中心各部署一套 rabbitMQ 集群,各中心的rabbitMQ 服务除了需要为业务提供正常的消息服务外,中心之间还需要实现部分队列消息共享。

多活集群架构如下:

在这里插入图片描述
federation 插件是一个不需要构建 cluster ,而在 brokers 之间传输消息的高性能插件,federation 插件可以在 brokers 或者 cluster 之间传输消息,连接的双方可以使用不同的 users 和 virtual hosts,双方也可以使用不同版本的 rabbitMQ 和 erlang。federation 插件使用 AMQP 协议通信,可以接受不连续的传输。federation 不是建立在集群上的,而是建立在单个节点上的,如图上黄色的 rabbit node 3 可以与绿色的 node1、node2、node3 中的任意一个利用 federation 插件进行数据同步。

在这里插入图片描述
如上图所示,federation exchanges 可以看成 downstream 从 upstream 主动拉取消息,但是并不是拉取所有消息,必须是在 downstream 上已经明确定义 Bingdings 关系的 exchange,也就是有实际的物理 queue 来接收消息,才会从 upstream 拉取消息到 downstream 。
它使用 AMQP 协议实现代理间通信,downstream 会将绑定关系组合在一起,绑定/解绑命令将发送到 upstream 交换机。因此,federation exchange 只接收具有订阅的消息。

构建一个高可用的RabbitMQ集群

集群的配置文件与集群运维故障、失败转移讲解

高级插件的使用

参考

RabbitMQ 的4种集群架构

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于OpenStack中的RabbitMQ参数调优,以下是一些建议: 1. 内存设置:RabbitMQ使用内存作为缓存,可以通过修改RabbitMQ配置文件(通常位于/etc/rabbitmq/rabbitmq.conf)来调整内存限制。可以根据系统资源和需要进行调整,确保分配足够的内存给RabbitMQ进程。 2. 磁盘设置:RabbitMQ使用磁盘来存储消息和元数据。为了提高性能,建议将RabbitMQ的数据目录放置在高性能磁盘上,并保证有足够的可用磁盘空间。可以通过修改RabbitMQ配置文件来指定数据目录的位置。 3. 连接数设置:RabbitMQ默认限制连接数和每个连接的并发数。如果系统中有大量的客户端连接或者消息处理需求很高,可以通过修改RabbitMQ配置文件来增加连接数和并发数的限制,以满足高并发的需求。 4. 消息确认方式设置:RabbitMQ提供了多种消息确认方式,包括ack、nack和reject。根据具体的业务需求,可以选择合适的消息确认方式。例如,对于性能要求较高的场景,可以选择批量确认方式。 5. 长连接设置:RabbitMQ默认采用长连接方式,即客户端和RabbitMQ之间保持持久化的TCP连接。对于高负载场景,可以考虑使用连接池技术来管理连接,从而减少连接的创建和销毁开销。 6. 高可用设置:如果需要提高RabbitMQ的可用性和容错性,可以考虑使用RabbitMQ集群和镜像队列功能。集群可以将消息分布在多个节点上,提供更高的可用性;镜像队列可以将消息复制到多个节点上,提供更高的数据冗余和容错性。 以上是一些常见的RabbitMQ参数调优建议,具体的调优策略还需要根据实际情况进行调整和优化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值