RabbitMQ 集群和镜像队列

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 【1月更文挑战第11天】一、clustering(集群)1、使用集群的原因2、搭建步骤2.1、拉取镜像2.2、创建三个RabbitMQ容器节点2.3、集群搭建二、镜像队列1、使用镜像的原因2、搭建步骤

文章目录

一、clustering(集群)

1、使用集群的原因

2、搭建步骤

2.1、拉取镜像

2.2、创建三个RabbitMQ容器节点

2.3、集群搭建

二、镜像队列

1、使用镜像的原因

2、搭建步骤

总结


一、clustering(集群)

1、使用集群的原因

如果 RabbitMQ 服务器遇到内存崩溃、机器掉电或者主板故障等情况,该怎么办?单台 RabbitMQ服务器可以满足每秒 1000 条消息的吞吐量,那么如果应用需要 RabbitMQ 服务满足每秒 10 万条消息的吞吐量呢?购买昂贵的服务器来增强单机 RabbitMQ 务的性能显得捉襟见肘,搭建一个 RabbitMQ 集群才是解决实际问题的关键。

2、搭建步骤

2.1、拉取镜像

博主这里早已经拉取过了,没有拉取的记得拉取一下。

docker pull rabbitmq:3.12-management

2.2、创建三个RabbitMQ容器节点

创建三个节点命令:

sudo docker run -d--hostname rabbitmq01 --name rabbitmqCluster01 -p6002:15672 -p5674:5672 -eRABBITMQ_ERLANG_COOKIE='rabbitmqCookie' rabbitmq:3.12-management
sudo docker run -d--hostname rabbitmq02 --name rabbitmqCluster02 -p7002:15672 -p5675:5672 -eRABBITMQ_ERLANG_COOKIE='rabbitmqCookie'--link rabbitmqCluster01:rabbitmq01 rabbitmq:3.12-management
sudo docker run -d--hostname rabbitmq03 --name rabbitmqCluster03 -p8002:15672 -p5676:5672 -eRABBITMQ_ERLANG_COOKIE='rabbitmqCookie'--link rabbitmqCluster01:rabbitmq01 --link rabbitmqCluster02:rabbitmq02 rabbitmq:3.12-management
  • -d 后台运行容器;
  • –name 指定容器名;
  • -p 指定服务运行的端口(6002:应用访问端口;15672:控制台Web端口号),控制台端口用于管理rabbitmq,应用访问端口号为rabbitclient等应用访问。;
  • –hostname 主机名(RabbitMQ的一个重要注意事项是它根据所谓的 “节点名称” 存储数据,默认为主机名);
  • -e 指定环境变量;(RABBITMQ_DEFAULT_VHOST:默认虚拟机名;RABBITMQ_DEFAULT_USER:默认的用户名;RABBITMQ_DEFAULT_PASS:默认用户名的密码,RABBITMQ_ERLANG_COOKIE 节点认证作用,部署集成时 需要同步该值)
  • –link 用于容器的链接

查看容器运行如何:

sudo docker ps

2.3、集群搭建

将rabbitmqCluster02 节点和 rabbitmqCluster03 节点加入 rabbitmqCluster01 创建集群

进入 rabbitmqCluster02 节点

sudo docker exec -it rabbitmqCluster02 /bin/bash

输入以下命令

rabbitmqctl stop_app
rabbitmqctl reset
#rabbitmq01为rabbitmqCluster01容器中的hostnamerabbitmqctl join_cluster --ram rabbit@rabbitmq01
rabbitmqctl start_app

进入 rabbitmqCluster03 节点

sudo docker exec -it rabbitmqCluster03 /bin/bash

输入以下命令

rabbitmqctl stop_app
rabbitmqctl reset
#rabbitmq01为rabbitmqCluster01容器中的hostnamerabbitmqctl join_cluster --ram rabbit@rabbitmq01
rabbitmqctl start_app

执行完后在任意节点(博主这里选用三号节点)

sudo docker exec -it rabbitmqCluster03 /bin/bash

查看集群状态:

rabbitmqctl cluster_status

此时可以在Web页面看到主从信息

从机也能看到主从信息

二、镜像队列

1、使用镜像的原因

如果 RabbitMQ 集群中只有一个 Broker 节点,那么该节点的失效将导致整体服务的临时性不可用,并且也可能会导致消息的丢失。可以将所有消息都设置为持久化,并且对应队列的durable属性也设置为true,但是这样仍然无法避免由于缓存导致的问题:因为消息在发送之后和被写入磁盘井执行刷盘动作之间存在一个短暂却会产生问题的时间窗。通过 publisherconfirm 机制能够确保客户端知道哪些消息己经存入磁盘,尽管如此,一般不希望遇到因单点故障导致的服务不可用。

引入镜像队列(Mirror Queue)的机制,可以将队列镜像到集群中的其他 Broker 节点之上,如果集群中的一个节点失效了,队列能自动地切换到镜像中的另一个节点上以保证服务的可用性。

2、搭建步骤

1.启动三台集群节点

2.随便找一个节点添加 policy

参数解释:

  • Name: policy的名称,用户自定义。
  • Pattern: queue的匹配模式(正则表达式)。^表示所有队列都是镜像队列。
  • Definition: 镜像定义,包括三个部分ha-sync-mode、ha-mode、ha-params。
  • ha-mode: 指明镜像队列的模式,有效取值范围为all/exactly/nodes。
  • all:表示在集群所有的代理上进行镜像。
  • exactly:表示在指定个数的代理上进行镜像,代理的个数由ha-params指定。
  • nodes:表示在指定的代理上进行镜像,代理名称通过ha-params指定。
  • ha-params: ha-mode模式需要用到的参数。
  • ha-sync-mode: 表示镜像队列中消息的同步方式,有效取值范围为:automatic,manually。
  • automatic:表示自动向master同步数据。
  • manually:表示手动向master同步数据。
  • Priority: 可选参数, policy的优先级。

3.在 node1 上创建一个队列发送一条消息,队列存在镜像队列

4.停掉 node1 之后发现 node2 成为镜像队列

5.就算整个集群只剩下一台机器了 依然能消费队列里面的消息说明队列里面的消息被镜像队列传递到相应机器里面了。


总结

以上就是RabbitMQ 集群和镜像队列的相关知识点,希望对你有所帮助。

相关实践学习
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
相关文章
|
4月前
|
消息中间件 负载均衡 监控
【面试问题】RabbitMQ 的集群
【1月更文挑战第27天】【面试问题】RabbitMQ 的集群
|
7月前
|
消息中间件 存储 Kubernetes
k8s1.20版本部署RabbitMQ集群(持久化)——2023.05
k8s1.20版本部署RabbitMQ集群(持久化)——2023.05
294 1
|
23小时前
|
消息中间件
rabbitMQ集群
rabbitMQ集群
5 0
|
7月前
|
消息中间件 存储 监控
消息中间件第八讲:消息队列 RocketMQ 版实战、集群及原理
消息中间件第八讲:消息队列 RocketMQ 版实战、集群及原理
111 0
|
3月前
|
消息中间件 运维 应用服务中间件
容器化运维:构建高可用RabbitMQ集群的Docker Compose指南
容器化运维:构建高可用RabbitMQ集群的Docker Compose指南
225 0
|
6月前
|
消息中间件 测试技术
|
6月前
|
消息中间件 存储 容器
|
6月前
|
消息中间件 Java Spring
搭建高可用rabbitmq集群及spring boot实现集群配置
搭建高可用rabbitmq集群及spring boot实现集群配置
|
8月前
|
消息中间件 存储 监控
RocketMQ集群搭建
RocketMQ集群搭建
174 1
|
8月前
|
消息中间件 负载均衡 监控
RabbitMQ集群搭建
RabbitMQ集群搭建
107 0

相关产品

  • 云消息队列 MQ