RabbitMQ集群方式说明

RabbitMQ集群方式说明
搭建集群的目的有两个:
1、高可用,在某些节点故障情况下,能够继续提供服务
2、横向扩展,可以通过增加集群节点,提高处理能力。

三种部署方式

1、单节点(这种部署方式不是集群)
2、普通集群
3、镜像集群

单节点不用多说,这里重点说一下普通集群和镜像集群。

普通模式

默认的集群模式,假设两个节点(rabbit01、rabbit02)。对于Queue来说,消息实体只存在于其中某一个节点,比如rabbit01(或者rabbit02),rabbit01和rabbit02两个节点仅有相同的元数据,即队列的结构。

当消息进入rabbit01节点的Queue后,consumer从rabbit02节点消费时,RabbitMQ会临时在rabbit01、rabbit02间进行消息传输,把A中的消息实体取出并经过B发送给consumer。所以consumer应尽量连接每一个节点,从中取消息。即对于同一个逻辑队列,要在多个节点建立物理Queue。否则无论consumer连rabbit01或rabbit02,出口总在rabbit01,会产生瓶颈。当rabbit01节点故障后,rabbit02节点无法取到rabbit01节点中还未消费的消息实体。
如果做了消息持久化,那么得等rabbit01节点恢复,然后才可被消费;如果没有持久化的话,就会产生消息丢失的现象。

镜像模式

将需要消费的队列变为镜像队列,存在于多个节点,即元数据与消息数据在集群各节点都存在,但消息只限于新增消息复制,增加节点不会将整个队列信息复制到新增节点。

这样就可以实现RabbitMQ的HA高可用性。作用就是消息实体会主动在镜像节点之间实现同步,而不是像普通模式那样,在consumer消费数据时临时读取。缺点就是,集群内部的同步通讯会占用大量的网络带宽。

镜像队列高可用策略
ha-modeha-params功能
all镜像队列将会在整个集群中复制。当一个新的节点加入后,也会在这 个节点上复制一份。
exactlycount镜像队列将会在集群上复制 count 份。如果集群数量少于 count 时候,队列会复制到所有节点上。如果大于 Count 集群,有一个节点 crash 后,新进入节点也不会做新的镜像。
nodesnode name镜像队列会在 node name 中复制。如果这个名称不是集群中的一个,这不会触发错误。如果在这个 node list 中没有一个节点在线,那么这个 queue 会被声明在 client 连接的节点。

三种集群配置方式

RabbitMQ可通过三种方式来部署分布式集群系统,
分别是:cluster,federation,shovel

cluster:
  • 不支持跨网段,用于同一个网段内的局域网

  • 可以随意的动态增加或者减少

  • 节点之间需要运行相同版本的RabbitMQ和Erlang

federation

应用于广域网,允许单台服务器上的交换机或队列接收发布到另一台服务器上交换机或队列的消息,可以是单独机器或集群。federation队列类似于单向点对点连接,消息会在联盟队列之间转发任意次,直到被消费者接受。通常使用federation来连接internet上的中间服务器,用作订阅分发消息或工作队列。

shovel

连接方式与federation的连接方式类似,但它工作在更低层次。可以应用于广域网。

高可用场景通常我们采用cluster。

两种节点类型

RAM node

内存节点将所有的队列、交换机、绑定、用户、权限和vhost的元数据定义存储在内存中,好处是可以使得像交换机和队列声明等操作更加的快速。

Disk node

将元数据存储在磁盘中,单节点系统只允许磁盘类型的节点,防止重启RabbitMQ的时候,丢失系统的配置信息。

Erlang Cookie

Erlang Cookie 是保证不同节点可以相互通信的密钥,要保证集群中的不同节点相互通信必须共享相同的 Erlang Cookie。具体的目录存放位置以centos为例:

/var/lib/rabbitmq/.erlang.cookie

注意点

RabbitMQ要求在集群中至少有一个磁盘节点,所有其他节点可以是内存节点,当节点加入或者离开集群时,必须要将该变更通知到至少一个磁盘节点。

这会带来一个问题:如果集群中唯一的一个磁盘节点崩溃的话,集群仍然可以保持运行,但是无法进行其他操作(增删改查),直到节点恢复。

解决方案:设置两个磁盘节点,至少有一个是可用的,可以保存元数据的更改。

最后

RabbitMQ作为一款开源的支持分布式、高并发,有着高性能的产品,并可结合keepalived或是haproxy对应用透明服务,自动故障转移。是消息队列场景一个不错的选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值