1 大纲
- RabbitMQ集群架构模式
- 构建高可靠的RabbitMQ集群
- 集群与运维
- 高级插件
2 RabbitMQ集群架构模式
2.1 主备模式(Warren)
实现RabbitMQ的高可用集群,一般在并发和数据量不高的情况下,这种模型非常的好用且简单.
主备模式:所谓的rabbitmq另外一种模式就是warren(兔子窝),就是一个主/备方案(主节点若宕机,从节点提供服务而已,和activemq利用zookeeper做主/备一样)
HaProxy配置
代码语言:javascript复制 listen rabbitmq_cluster
bind 0.0.0.0:5672
mode tcp #配置TCP模式
balance roundrobin #简单的轮询
server bhz76 192.168.11.12:5672 check inter 5000 rise 2 fall 2 #主节点
server bhz77 192.168.11.13:5672 backup check inter 5000 rise 2 fall 3 #备用节点
#inter 表示每隔5秒对集群做健康检查 2次正确证明服务器可用,2次失败证明服务器不可用,并且配置主备机制
2.2 远程模式(太复杂,不推荐)
远程模式:远距离通信和复制,Shovel就是我们可以把消息进行不同数据中心的复制工作,可以跨地域的让两个MQ集群互联.
- 架构模型
在使用了shovel插件后,模型变成了近端同步确认
,远端异步确认方式
,大大提高了订单确认速度,还能保证可靠性。
- Shovel集群的拓扑图
使用流程
- Shovel集群配置,首先启动rabbitmq插件
rabbitmq-plugins enable amqp_client
rabbitmq-plugins enable rabbitmq_shovel
- 创建
rabbitmq.conf
文件
touch /etc/rabbitmq/rabbitmq.config
- 添加配置项
rabbitmq.config
- 最后我们需要资源服务器和目的服务器都使用相同的配置文件(rabbitmq.config)
2.3 镜像模式(推荐)
集群模式,保证数据百分百不丢失。 集群实现简单,互联网都会构建该镜像集群模式。
Mirror镜像队列,为了保证RabbitMQ数据的高可靠的解决方案,主要为了实现数据的同步,一般2-3个节点实现数据同步(对于100%数据可靠性解决方案一般是3个节点)
- 集群架构图
2.5 多活模式(Federation)
也是实现异地数据复制的主流模式,因为Shovel模式配置较复杂,一般异地集群都使用双活或多活模式实现。
需要依赖RabbitMQ的federation插件,可实现继续的可靠AMQP数据通信,多活模式在实际配置与应用非常的简单。
RabbitMQ部署架构采用双中心模式(多中心),那么在两套(或多套)数据中心中各部署一套RabbitMQ集群套)数据中心中各部署一套RabbitMQ集群,各中心的RabbitMQ服务除了需要为业务提供正常的消息服务外,中心之间还需要实现部分队列消息共享。
- 多活集群架构
Federation插件
一个不需要构建Cluster,而在Brokers间传输消息的高性能插件。 可在Brokers或Cluster间传输消息,连接双方可使用不同的users/vistual hosts/RabbitMQ。
使用AMQP通信协议,可接收不连续的传输
Federation Exchanges
可以看成Downstream从Upstream主动拉取消息,但并不是拉取所有消息,必须是在Downstream上已经明确定义Bindings关系的Exchange,也就是有实际的物理Queue来接收消息,才会从Upstream拉取消息到Downstream。 使用AMQP协议实施代理间通信,Downstream会将绑定关系组合在一起,绑定/解绑命令将会发送到Upstream交换机。因此,FederationExchange只接收具有订阅的消息。
3 RabbitMQ集群镜像队列的构建
4 负载均衡基础组件 - HaProxy
4.1 简介
HAProxy是一款提供高可用性、负载均衡以及基于TCP (第四层)和HTTP (第七层)应用的代理软件,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于 那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在时下的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中同时可以保护你的web服务器不被暴露到网络上
4.2 特点
HAProxy借助于OS,上几种常见的技术来实现性能的最大化
- 单进程、事件驱动模型显著降低了上下文切换的开销及内存占用
- 在任何可用的情况下,单缓冲(single buffering)机制能以不复制任何数据的方式完成读写操作,这会节约大量的CPU时钟周期及内存带宽
- 借助于Linux 2.6 (>= 2.6.27.19) 上的splice()系统调用,HAProxy可以实现零复制转发(Zero-copy forwarding),在Linux 3.5及以上的OS中还可以实现零复制启动(zero-starting)
- 内存分配器在固定大小的内存池中可实现即时内存分配,这能够显著减少创建一个会话的时长
- 树型存储:侧重于使用作者多年前开发的弹性二叉树, 实现了以O(log(N))的低开销来保持计时器命令、保持运行队列命令及管理轮询及最少连接队列
参考
- RabbitMQ集群架构模式