RabbitMQ 集群和镜像队列

文章目录

  • 一、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 -p 6002:15672 -p 5674:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitmqCookie' rabbitmq:3.12-managementsudo docker run -d --hostname rabbitmq02 --name rabbitmqCluster02 -p 7002:15672 -p 5675:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitmqCookie' --link rabbitmqCluster01:rabbitmq01 rabbitmq:3.12-managementsudo docker run -d --hostname rabbitmq03 --name rabbitmqCluster03 -p 8002:15672 -p 5676:5672 -e RABBITMQ_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_apprabbitmqctl reset
#rabbitmq01为rabbitmqCluster01容器中的hostname
rabbitmqctl join_cluster --ram rabbit@rabbitmq01rabbitmqctl start_app

在这里插入图片描述
进入 rabbitmqCluster03 节点

sudo docker exec -it rabbitmqCluster03 /bin/bash

输入以下命令

rabbitmqctl stop_apprabbitmqctl reset
#rabbitmq01为rabbitmqCluster01容器中的hostname
rabbitmqctl join_cluster --ram rabbit@rabbitmq01rabbitmqctl 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 集群和镜像队列的相关知识点,希望对你有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/191565.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Cmake学习

cmake大致 cmake_minimum_required(VERSION 3.0)project(test) #通过set自定义变量,通过${}取出 #set(SRC add.cpp main.cpp muti.cpp sub.cpp) #cmake搜索文件 宏定义PROJECT_SOURCE_DIR aux_source_directory(${PROJECT_SOURCE_DIR} SRC) #file(GLOB/GLOB_RECURSE…

【Linux】20、进程状态:不可中断进程、iowait、僵尸进程、dstat strace pstree

文章目录 一、进程状态1.1 iowait 分析1.2 僵尸进程1.3 小结 短时应用的运行时间比较短,很难在 top 或者 ps 这类展示系统概要和进程快照的工具中发现,你需要使用记录事件的工具来配合诊断,比如 execsnoop 或者 perf top。 讲到 CPU 使用率的…

使用共享内存进行通信的代码和运行情况分析,共享内存的特点(拷贝次数,访问控制),加入命名管道进行通信的代码和运行情况分析

目录 示例代码 头文件(comm.hpp) log.hpp 基础版 -- 服务端 代码 运行情况 加入客户端 代码 运行情况 两端进行通信 客户端 代码 注意点 服务端 代码 两端运行情况 共享内存特点 拷贝次数少 管道的拷贝次数 共享内存的拷贝次数 没有访问控制 管道 共享…

龙芯 操作系统选择和安装

龙芯3a5000及之后的cpu底层架构已经从mips64el改为了loongarch64 所以这里分了2种来说明,分别对应3a4000之前的和3a5000之后的 龙芯的系统安装难点在于操作系统的选取和引导 一、烧录工具 制作安装盘使用常规的烧录工具是不行滴,会提示没有\boot\initrd…

网络和Linux网络_3(套接字编程)TCP网络通信代码(多个版本)

目录 1. TCP网络编程 1.1 前期代码 log.hpp tcp_server.cc 1.2 accept和单进程版代码 1.3 多进程版strat代码 1.4 client.cc客户端 1.5 多进程版strat代码改进多线程 1.6 线程池版本 Task.hpp lockGuard.hpp thread.hpp threadPool.hpp 多个回调任务 tcp_client…

c语言-浅谈指针(3)

文章目录 1.字符指针变量常见的字符指针初始化另一种字符指针初始化例: 2.数组指针变量什么是数组指针变量数组指针变量创建数组指针变量初始化例(二维数组传参的本质) 3.函数指针变量什么是函数指针变量呢?函数指针变量创建函数指…

浅谈C++重载、重写、重定义

C重载、重写、重定义 重载、重写、重定义对比一、重载(overload)二、重写 / 覆盖(override)三、重定义 / 隐藏(redefining) * 为什么在虚函数中不能使用 static 关键字?动态绑定(Dyn…

mac系统安装docker desktop

Docker的基本概念 Docker 包括三个基本概念: 镜像(Image):相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。比如说nginx,mysql,redis等软件可以做成一个镜像。容器&#…

heatmap | cell cycle genes in Seurat

目的:使用bulk 数据,查看HeLa 双胸苷阻断法 细胞同步化 释放 [0, 3, 4.5, 6, 9, 10.5, 12, 15, 18, 19.5, 21, 22.5, 25.5, 30] 小时后 cell cycle 基因的表达情况。 1.结果 S phase G2M phase S G2M phase 不方便看,横过来看:…

C语言实现冒泡排序(超详细)

排序算法 - 冒泡排序 什么是冒泡排序?冒泡排序有啥用呢?冒泡排序的实现代码讲解冒泡排序的总结 什么是冒泡排序? 冒泡排序是一种简单的排序算法,它重复地遍历要排序的列表,一次比较两个元素,如果它们的顺序…

UE5制作场景时的小技巧和注意事项

UE5制作场景时的小技巧和注意事项 一、场景相关 1.1灯光 1.1.1构建完光照,发现场景都是黑的 可能是所有灯光是静态灯光,把skylight改为动态,如果改完之后还是黑色的,那就在构建一次,就应该没问题了 1.1.2场景中有多个动态光会造成阴影闪烁 需要将skylight变为固定 1…

若依前后端分离版,快速上手

哈喽~大家好,这篇来看看若依前后端分离版,快速上手(肝了挺久的)。 🥇个人主页:个人主页​​​​​ 🥈 系列专栏:【Springboot和Vue全栈开发】…