[Erlang 0091] 另辟蹊径构建RabbitMQ集群

简介:

  除了内置的RabbitMQ集群方案,还可以通过其它一些软件或者插件来构建RabbitMQ集群.这些方案可以解决一些让我们头痛不已的问题,当然它们也不是银弹,也有使用场景的限制.事实上,对于各种集群方案我们都不能假设太多,每当连入一个节点,我们都要把这个节点当成一个全新的节点来处理,首先要完成各种声明工作.

 

  下面的方式都没有实践过,暂且记录一笔,留点印象,后面实践之后丰富.下面的截图来自"RabbitMQ in Action"

 

HAProxy

 

  开源项目HAProxy 的定位是:The Reliable, High Performance TCP/HTTP Load Balancer.官网地址 http://haproxy.1wt.eu/我们可以把独立的RabbitMQ节点隐藏在HAProxy后面,HAProxy完成了下面的职责:

 

[1] 负载均衡 帮助我们进行节点选择 HAProxy 实现了一些经典的负载均衡算法 比如:roundrobin leastconn 完整的列表请查看 http://cbonte.github.com/haproxy-dconv/configuration-1.5.html#4-balance

 

[2] 异常节点检测 

 

  使用HAProxy可以不同策略来构建RabbitMQ集群,最典型的用法是:在一组Rabbit节点前端放置HAProxy做负载均衡,看下面的图:

 

  使用这种方式构建集群,和我们做WebServer集群一样,把一批功能相同的Web Server隐藏在HAProxy后面.如果节点宕掉如何处理?这种情况,应用程序并不知道自己实际连接的是哪个节点, cancellation notification消息可以显示得到连接到的节点已经宕掉.

 

Warrens 替补队员

 

  之前提到过使用built-in方式构建集群环境durable queue的问题:队列只有元数据会在集群的所有节点同步,但是队列中的数据只会存在于一个节点;这不免让人失望:数据没有冗余容易丢数据甚至在durable的情况下,如果所在的节点当掉就要等待节点恢复.

  使用HAProxy添加backup节点的方式可以在当前活跃节点宕掉之后尽快启用备用节点,恢复正常服务.

 

  backup节点在没有投入使用的时候都处于静默状态,并不从活跃节点同步消息.活跃节点在崩溃之前积压没有处理的消息只有等待其重启恢复之后才能启用.还有一个方法是让active和backup节点共享存储文件,这里有两个问题:1.共享存储 之前造成active node崩掉的数据可能继续让backup崩掉 2.要共享存储要求节点名完全一致,换句话说两个节点不可能同时启动,这就达不到我们的目的了

 

 

Shovel:WAN环境使用Cluster

 

   Erlang OTP对网络延迟敏感,所以RabbitMQ一样不建议在WAN环境使用集群.在WAN环境可以使用Shovel 实现跨地域数据同步.

 

 

 

最后小图一张:

相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
3月前
|
消息中间件 负载均衡 监控
【面试问题】RabbitMQ 的集群
【1月更文挑战第27天】【面试问题】RabbitMQ 的集群
|
6月前
|
消息中间件 存储 Kubernetes
k8s1.20版本部署RabbitMQ集群(持久化)——2023.05
k8s1.20版本部署RabbitMQ集群(持久化)——2023.05
266 1
|
6月前
|
消息中间件 存储 监控
消息中间件第八讲:消息队列 RocketMQ 版实战、集群及原理
消息中间件第八讲:消息队列 RocketMQ 版实战、集群及原理
100 0
|
2月前
|
消息中间件 运维 应用服务中间件
容器化运维:构建高可用RabbitMQ集群的Docker Compose指南
容器化运维:构建高可用RabbitMQ集群的Docker Compose指南
178 0
|
2月前
|
消息中间件 Docker 容器
docker构建rabbitmq并配置延迟队列插件
docker构建rabbitmq并配置延迟队列插件
35 0
|
3月前
|
消息中间件 存储 缓存
RabbitMQ 集群和镜像队列
【1月更文挑战第11天】 一、clustering(集群) 1、使用集群的原因 2、搭建步骤 2.1、拉取镜像 2.2、创建三个RabbitMQ容器节点 2.3、集群搭建 二、镜像队列 1、使用镜像的原因 2、搭建步骤
241 6
|
5月前
|
消息中间件 测试技术
|
5月前
|
消息中间件 存储 容器
|
5月前
|
消息中间件 存储 物联网
Apache RocketMQ,构建云原生统一消息引擎
Apache RocketMQ,构建云原生统一消息引擎
75005 69
|
5月前
|
消息中间件 Java Spring
搭建高可用rabbitmq集群及spring boot实现集群配置
搭建高可用rabbitmq集群及spring boot实现集群配置

热门文章

最新文章