首页 > 其他分享 >5分钟带你了解RabbitMQ的(普通/镜像)集群

5分钟带你了解RabbitMQ的(普通/镜像)集群

时间:2024-06-14 09:33:04浏览次数:19  
标签:模式 集群 RabbitMQ 镜像 节点 消息

前言

让我们深入探讨RabbitMQ的集群配置,了解各种集群模式的利弊。本次讨论的重点是帮助您快速理解RabbitMQ集群的运作方式,以及选择最适合您需求的模式。好的,话不多说。在RabbitMQ中,即使只有一个节点,该节点的服务也会被作为一个集群来处理。这意味着单节点系统也遵循集群架构的规范,确保一致性和可扩展性。

而多节点的集群有两种方式:普通集群和镜像集群(也称主从集群)。

普通集群

这种模式充分利用了Erlang语言天生具备的集群能力。在这个集群模式中,各个节点共享相同的元数据,例如队列结构,但消息不会冗余存储,而是只存在于某一个节点中。当消费者需要消费消息时,如果请求的节点并不存储所需的数据,RabbitMQ会在节点之间临时传输消息,将数据从存储节点传输到消费节点。

显然,这种集群模式存在一定的消息可靠性问题。当某个节点宕机时,该节点上的数据将无法被消费,必须等待节点恢复后才能继续处理。这可能导致消费者端无法正确应答已经消费的消息,在服务恢复后可能导致消息被重复消费。此外,如果消息未经持久化,重启后消息将会丢失。

另外,这种集群模式不支持高可用性。当某个节点服务故障时,需要手动重启该服务才能确保该节点上的消息能够正常消费。因此,这种模式只适合一些对消息安全性要求不高的场景。在使用这种模式时,消费者应尽量连接到每一个节点,以减少消息在集群中的传输。

image

镜像集群

这种模式是RabbitMQ官方HA(高可用)方案,在普通集群模式的基础上进行了增强。在搭建普通集群之后,需要进行额外的配置和部署。其本质区别在于,这种模式会在镜像节点之间主动进行消息同步,而不是在客户端拉取消息时临时同步。

在这种模式下,集群内部会通过算法选举产生主节点(master)和从节点(slave)。一旦主节点失效,集群将自动选举出新的主节点,确保整个集群的高可用性。

image

优缺点

首先看下普通集群

  • 共享元数据:各节点间共享队列结构等元数据,但缺点也很明显消息仅存在于某一个节点
  • 消息在消费时会在节点间临时传输,增加了传输延迟和复杂性
  • 节点宕机时,该节点上的消息无法被消费,且可能导致重复消费,需要手动重启宕机节点以恢复消息消费

再看下镜像模式:

  • 主动消息同步:在镜像节点之间主动进行消息同步,确保每个节点上都存有完整的消息数据。消息的可靠性大大提高,即使单个节点宕机,也不会导致消息丢失。但是集群内部的网络带宽会被主动同步大量占用,可能导致网络拥塞,影响整个集群的性能。
  • 通过选举机制,当主节点故障时,自动选出新的主节点,保证服务的连续性和可用性。

因此,并没有一种万能解决方案,最终还是要根据各业务需求来确定集群方案。例如,在金融交易系统或实时数据处理系统中,建议采用高可用的镜像模式。但如果带宽有限制且没有实时性要求,那么使用默认的普通集群可能更合适。

总结

通过本文我们深入了解了RabbitMQ的集群模式及其优缺点。无论是普通集群还是镜像集群,都有其适用的场景和局限性。

普通集群利用Erlang语言的集群能力,但消息可靠性和高可用性方面存在一定挑战;而镜像集群通过主动消息同步提高了消息的可靠性和高可用性,但可能会占用大量网络带宽。

因此,在选择集群方案时,需要综合考虑业务需求、系统性能和资源限制等因素。唯有根据实际情况来灵活选择最适合的方案,以确保系统的稳定性和可靠性。

标签:模式,集群,RabbitMQ,镜像,节点,消息
From: https://www.cnblogs.com/guoxiaoyu/p/18240661

相关文章

  • kubernetes-ingress-nginx-controller资源-用于管理和处理集群中的 Ingress 资源
    ingress-nginx-controller是一个常用的KubernetesIngress控制器,它基于NGINX实现,主要用于管理和处理集群中的Ingress资源。Ingress资源是Kubernetes中的一种网络入口资源,用于将外部流量路由到集群内部的服务ingress-nginx-controller的功能作用流量管理和路由#1、......
  • kubernetes-外部数据库服务映射至集群内-Service与Endpoints的关系
    创建yaml文件配置数据库信息kind:ServiceapiVersion:v1metadata:name:mysql-svcnamespace:ops-systemspec:type:ClusterIP #Kubernetes将为此服务随机分配一个集群内部的IP地址ClusterIP类型的服务只能在集群内部访问,提供了一个内部访问的固定IP地址,不对......
  • maven仓库jar包下载太慢 阿里镜像推荐
    maven仓库jar包下载太慢阿里镜像推荐一、仓库地址Maven仓库1:http://repo1.maven.org/maven2mavenmavenhttp://repo1.maven.org/maven2centralMaven仓库2:http://repo2.maven.org/maven2Maven中央仓库:https://mvnrepository.com阿里云云效果Maven(推荐):仓库服务淘......
  • kubernetes-ingress-nginx-rule的配置-将外部流量路由到集群内部的规则配置
    KubernetesIngress资源配置文件主要定义了如何通过NGINXIngress控制器来处理进入集群的HTTP/HTTPS流量apiVersion:networking.k8s.io/v1#表示这是一个Ingress资源,并使用了Kubernetes网络APIv1版本kind:Ingress#kind:定义了资源的类型。在这里是Ingr......
  • Docker镜像与容器的导入与导出
    参考chat-gpthttps://blog.csdn.net/qq_22211217/article/details/93936363https://blog.csdn.net/ncdx111/article/details/79878098https://www.runoob.com/docker/docker-import-command.htmlhttps://www.runoob.com/docker/docker-export-command.html环境环境版......
  • es 源码分析&集群原理
    主要分析几个问题:主分片如何确定的:比如3分片2副本,实际会有3*(2+1)=9个分片,主节点创建的时候会根据一定规则分到不同节点,比如同一分片ID不能在同一节点等规则。写入数据中如何进行数据同步:写到主分片所在的节点,主分片所在节点在同步到副本分片所在节点查询是如何进行的,多个......
  • kali更换apt镜像
    kali更换apt镜像vim/etc/apt/sources.list进来之后按i进入编辑模式,把其他的镜像#注释掉之后,加上新的镜像,然后esc退出编辑,按:输入wq保存并退出!上面的办法不知道为啥没用修改/etc/apt/sources.list文件,也即修改镜像源,能够加快在下载和更新相关软件数据;否则默认情况下使用的......
  • arm环境构建x86镜像
    1.依赖docker版本>19.03 2.配置扩展$vim/etc/docker/daemon.json{"experimental":true} #下载对应版本:https://github.com/docker/buildx/releases/tag/v0.15.0mkdir-p~/.docker/cli-pluginsmvbuildx-v0.15.0.linux-arm64~/.docker/cli-plugins/docker......
  • RabbitMQ
    RPCRPC(远程过程调用),简单来说,就是一个进程A向另外一个进程B请求服务。进程A调用进程B的服务,就好像在调用自己进程的服务方法一样,无需关心内部的实现细节。传统的进程之间通信,是由服务端监听在某个端口,客户端进程通过远程过程调用(RPC)方式和服务端进程进行通信,这种通信方式,当消......
  • crane 容器镜像管理工具
    https://github.com/google/go-containerregistry/releases/download/v0.19.1/go-containerregistry_Linux_x86_64.tar.gzcraneauth登录或访问凭证cranedelete从其注册表中删除一个镜像引用cranedigest获取一个镜像的摘要cranels列出repo中的标签cranemanifest......