RabbitMQ 集群和镜像队列

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
性能测试 PTS,5000VUM额度
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 【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版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
2月前
|
消息中间件 存储 监控
RabbitMQ 队列之战:Classic 和 Quorum 的性能洞察
RabbitMQ 是一个功能强大的消息代理,用于分布式应用程序间的通信。它通过队列临时存储消息,支持异步通信和解耦。经典队列适合高吞吐量和低延迟场景,而仲裁队列则提供高可用性和容错能力,适用于关键任务系统。选择哪种队列取决于性能、持久性和容错性的需求。
156 6
|
3月前
|
消息中间件 JSON Java
|
4月前
|
消息中间件 存储 负载均衡
|
3月前
|
消息中间件
rabbitmq,&队列
rabbitmq,&队列
|
3月前
|
消息中间件 JSON Java
玩转RabbitMQ声明队列交换机、消息转换器
玩转RabbitMQ声明队列交换机、消息转换器
93 0
|
4月前
|
消息中间件 存储 NoSQL
MQ的顺序性保证:顺序队列、消息编号、分布式锁,一文全掌握!
【8月更文挑战第24天】消息队列(MQ)是分布式系统的关键组件,用于实现系统解耦、提升可扩展性和可用性。保证消息顺序性是其重要挑战之一。本文介绍三种常用策略:顺序队列、消息编号与分布式锁,通过示例展示如何确保消息按需排序。这些方法各有优势,可根据实际场景灵活选用。提供的Java示例有助于加深理解与实践应用。
109 2
|
4月前
|
消息中间件 存储 负载均衡
"RabbitMQ集群大揭秘!让你的消息传递系统秒变超级英雄,轻松应对亿级并发挑战!"
【8月更文挑战第24天】RabbitMQ是一款基于AMQP的开源消息中间件,以其高可靠性、扩展性和易用性闻名。面对高并发和大数据挑战时,可通过构建集群提升性能。本文深入探讨RabbitMQ集群配置、工作原理,并提供示例代码。集群由多个通过网络连接的节点组成,共享消息队列,确保高可用性和负载均衡。搭建集群需准备多台服务器,安装Erlang和RabbitMQ,并确保节点间通信顺畅。核心步骤包括配置.erlang.cookie文件、使用rabbitmqctl命令加入集群。消息发布至任一节点时,通过集群机制同步至其他节点;消费者可从任一节点获取消息。
49 2
|
4月前
|
存储 C# 关系型数据库
“云端融合:WPF应用无缝对接Azure与AWS——从Blob存储到RDS数据库,全面解析跨平台云服务集成的最佳实践”
【8月更文挑战第31天】本文探讨了如何将Windows Presentation Foundation(WPF)应用与Microsoft Azure和Amazon Web Services(AWS)两大主流云平台无缝集成。通过具体示例代码展示了如何利用Azure Blob Storage存储非结构化数据、Azure Cosmos DB进行分布式数据库操作;同时介绍了如何借助Amazon S3实现大规模数据存储及通过Amazon RDS简化数据库管理。这不仅提升了WPF应用的可扩展性和可用性,还降低了基础设施成本。
90 0
|
4月前
|
消息中间件 应用服务中间件 网络安全
rabbitMQ镜像模式搭建
rabbitMQ镜像模式搭建
|
5月前
|
消息中间件 Prometheus 监控
消息队列 MQ使用问题之如何将旧集群的store目录迁移到新集群
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。

相关产品

  • 云消息队列 MQ