Rabbitmq集群与镜像队列

1、集群架构

1.1、普通集群(副本集群)

在这里插入图片描述
1、master主节点上的所有数据都会同步到Slave从节点上,但是有一个意外,就是队列,master主节点上的队列不会同步到其他从节点上,尽管其他从节点可以看到和访问这个队列,实际上这个队列只存在于主节点中。因此,该集群也叫主从复制集群。【注意:从节点上还是有队列的结构,只是消息实体只存在于主节点master上】

2、当消息进入主节点master时,消费者可能监听的是从节点,从节点是没有消息实体的,rabbitmq会在主节点和从节点之间进行临时的消息传输,把主节点中的消息实体取出,经过从节点,发送给消费者。因此,consumer应尽量连接每一个节点,从中取消息。

3、当主节点故障后,从节点无法取到主节点中还未消费的消息实体。如果做了消息持久化,那么等主节点恢复,然后才可被消费;如果没有持久化,就会产生消息丢失的现象。

4、核心解决的问题:当集群中某一时刻,master节点宕机,从节点能备份主节点的元数据信息【交换机,绑定关系,队列结构】等,但是没有存储消息实体。很鸡肋。

那如何实现高可用呢?
镜像集群。

1.2、普通集群搭建

镜像集群的搭建,是在普通集群的基础上的。
https://www.bilibili.com/video/BV1dE411K7MG?p=18

1.3、镜像集群

在这里插入图片描述
之前说了,消息实体只会存在于主节点的队列中,从节点只会存储主节点的元数据【交换机,绑定关系以及队列的结构】,不存储消息实体,因此,存在消息丢失的可能性。

解决方法:引入RabbitMQ的镜像队列机制,将队列镜像到集群中其他的节点之上。在该实现下,如果集群中的一个节点失效了,queue能自动地切换到镜像中的另一个节点以保证服务的可用性。

镜像机制:就是将队列在三个节点之间设置主从关系,消息会在三个节点之间进行自动同步,如果其中一个节点不可用,并不会导致消息丢失或服务不可用的情况,提升MQ整体高可用性。

1.4、 镜像集群怎么搭?

只需要在普通集群上做一些配置即可。

rabbitmqctl set_policy [-p Vhost] Name Pattern Definition [Priority]
[-p Vhost]-p表示给哪个虚拟主机做策略,可能很多应用都在用rabbitmq集群,
			每个应用都有自己的虚拟主机,针对不同的虚拟主机设置不同的策略
			也可以省略不写,不写就是对所有的虚拟主机做相同的策略
Name:策略名	
Pattern:队列的匹配模式(正则表达式)
Definition:镜像定义,包括三个部分ha-mode, ha-params, ha-sync-mode
	ha-mode:指明镜像队列的模式,有效值为 all/exactly/nodes
			    all:表示在集群中所有的节点上进行镜像【一般使用这个】
			    exactly:表示在指定个数的节点上进行镜像,节点的个数由ha-params指定
				nodes:表示在指定的节点上进行镜像,节点名称通过ha-params指定
	ha-params:ha-mode模式需要用到的参数
	ha-sync-mode:进行队列中消息的同步方式,有效值为automatic自动同步和manual手动同步,一般使用automatic,默认是手动同步
priority:可选参数,policy的优先级。比如:队列a,有ha1策略 2,ha2策略 1,数字越大,优先级越高。

如何把现有的普通集群做成一个镜像队列?
1、查看策略 rabbitmqctl list_policies

[root@localhost ~]# docker exec  -it rabbitmq  /bin/bash
root@ba18b874b305:/# rabbitmqctl list_policies
Listing policies for vhost "/" ...
表示'/'虚拟主机没有任何策略

2、添加策略示例
在这里插入图片描述
设置策略:

rabbitmqctl set_policy ha1 '^hello' '{"ha-mode":"all","ha-sync-mode":"automatic"}' 2
说明:ha1是策略名,^hello:匹配hello开头队列;  '^':表示对所有队列做镜像

在这里插入图片描述
如果主节点挂了,会从从节点中选一个做主节点,原先的主节点恢复后,成为从节点。

3、删除策略

rabbitmqctl clear_policy ha1
rabbitmqctl直接回车能查看更多的命令
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值