RabbitMQ集群部署之普通模式

news2025/1/24 8:29:14

1.集群分类

RabbitMQ的官方文档中,讲述了两种集群的配置方式:

  • 普通模式:普通模式集群不进行数据同步,每个MQ都有自己的队列、数据信息(其它元数据信息如交换机等会同步)。例如我们有2个MQmq1,和mq2,如果你的消息在mq1,而你连接到了mq2,那么mq2会去mq1拉取消息,然后返回给你。如果mq1宕机,消息就会丢失。
  • 镜像模式:与普通模式不同,队列会在各个mq的镜像节点之间同步,因此你连接到任何一个镜像节点,均可获取到消息。而且如果一个节点宕机,并不会导致数据丢失。不过,这种方式增加了数据同步的带宽消耗。

我们先来看普通模式集群,我们的计划部署3节点的mq集群:

主机名控制台端口amqp通信端口
mq115672--->1567225672---> 5672
mq215673---> 1567225673---> 5672
mq315674---> 1567225674 ---> 5672

集群中的节点标示默认都是:rabbit@[hostname],因此以上三个节点的名称分别为:

  • rabbit@mq1
  • rabbit@mq2
  • rabbit@mq3

2.获取cookie

RabbitMQ底层依赖于Erlang,而Erlang虚拟机就是一个面向分布式的语言,默认就支持集群模式。集群模式中的每个RabbitMQ节点使用cookie来确定它们是否被允许相互通信。

要使两个节点能够通信,它们必须具有相同的共享秘密,称为Erlang cookiecookie 只是一串最多 255 个字符的字母数字字符。

每个集群节点必须具有相同的cookie。实例之间也需要它来相互通信。

我们先在之前启动的mq容器中获取一个cookie值,作为集群的cookie。执行下面的命令:

docker exec -it mq cat /var/lib/rabbitmq/.erlang.cookie

可以看到cookie值如下:

TUCJVNAONNFSSVRDJGSW

在这里插入图片描述

接下来,停止并删除当前的mq容器,我们重新搭建集群。

docker rm -f mq

3.准备集群配置

/home/rabbitmq目录新建一个配置文件rabbitmq.conf

cd /home/rabbitmq
# 创建文件
touch rabbitmq.conf

文件内容如下:

loopback_users.guest = false
listeners.tcp.default = 5672
cluster_formation.peer_discovery_backend = rabbit_peer_discovery_classic_config
cluster_formation.classic_config.nodes.1 = rabbit@mq1
cluster_formation.classic_config.nodes.2 = rabbit@mq2
cluster_formation.classic_config.nodes.3 = rabbit@mq3

再创建一个文件,记录cookie

cd /home/rabbitmq
# 创建cookie文件
touch .erlang.cookie
# 写入cookie
echo "TUCJVNAONNFSSVRDJGSW" > .erlang.cookie
# 修改cookie文件的权限
chmod 600 .erlang.cookie

在这里插入图片描述

准备三个目录mq1mq2mq3

cd /home/rabbitmq
# 创建目录
mkdir mq1 mq2 mq3

然后拷贝rabbitmq.confcookie文件到mq1mq2mq3

# 进入/home/rabbitmq
cd /home/rabbitmq
# 拷贝
cp rabbitmq.conf mq1
cp rabbitmq.conf mq2
cp rabbitmq.conf mq3
cp .erlang.cookie mq1
cp .erlang.cookie mq2
cp .erlang.cookie mq3

在这里插入图片描述

4.启动集群

创建一个网络:

docker network create mq-net

运行命令

docker run -d --net mq-net \
-v ${PWD}/mq1/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf \
-v ${PWD}/.erlang.cookie:/var/lib/rabbitmq/.erlang.cookie \
-e RABBITMQ_DEFAULT_USER=dcxuexi \
-e RABBITMQ_DEFAULT_PASS=123456 \
--name mq1 \
--hostname mq1 \
-p 25672:5672 \
-p 15672:15672 \
rabbitmq:3.11-management
docker run -d --net mq-net \
-v ${PWD}/mq2/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf \
-v ${PWD}/.erlang.cookie:/var/lib/rabbitmq/.erlang.cookie \
-e RABBITMQ_DEFAULT_USER=dcxuexi \
-e RABBITMQ_DEFAULT_PASS=123456 \
--name mq2 \
--hostname mq2 \
-p 25673:5672 \
-p 15673:15672 \
rabbitmq:3.11-management
docker run -d --net mq-net \
-v ${PWD}/mq3/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf \
-v ${PWD}/.erlang.cookie:/var/lib/rabbitmq/.erlang.cookie \
-e RABBITMQ_DEFAULT_USER=dcxuexi \
-e RABBITMQ_DEFAULT_PASS=123456 \
--name mq3 \
--hostname mq3 \
-p 25674:5672 \
-p 15674:15672 \
rabbitmq:3.11-management

在这里插入图片描述

在这里插入图片描述

5.测试

mq1这个节点上添加一个队列:

在这里插入图片描述

如图,在mq2mq3两个控制台也都能看到:

在这里插入图片描述

在这里插入图片描述

5.1.数据共享测试

点击这个队列,进入管理页面:

在这里插入图片描述

然后利用控制台发送一条消息到这个队列:

在这里插入图片描述

结果在mq2mq3上都能看到这条消息:

在这里插入图片描述

5.2.可用性测试

我们让其中一台节点mq1宕机:

docker stop mq1

然后登录mq2mq3的控制台,发现simple.queue也不可用了:

在这里插入图片描述

说明数据并没有拷贝到mq2mq3

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python怎么再加一个的SEO

Python怎么再加一个的SEO 作为一名有10年Python编程经验的工程师,我深知如何将Python项目优化为搜索引擎友好的代码。当谈到SEO时,构建优化的代码比任何其他技术都更加重要。在本文中,我将介绍一些Python中的关键SEO技巧,并强调如…

Spring 事务管理方案和事务管理器及事务控制的API

目录 一、事务管理方案 1. 修改业务层代码 2. 测试 二、事务管理器 1. 简介 2. 在配置文件中引入约束 3. 进行事务配置 三、事务控制的API 1. PlatformTransactionManager接口 2. TransactionDefinition接口 3. TransactionStatus接口 往期专栏&文章相关导读 …

【前端 - CSS】第 11 课 - 选择器

欢迎来到博主 Apeiron 的博客,祝您旅程愉快 ! 时止则止,时行则行。动静不失其时,其道光明。 目录 1、缘起 2、基础选择器 2.1、标签选择器 2.2、类选择器 2.3、id 选择器 2.4、通配符选择器 3、画盒子 4、总结 1、缘…

chatgpt赋能python:如何使用Python删除变量中的数据?

如何使用Python删除变量中的数据? Python是一种非常流行的编程语言,许多开发人员使用它来开发高效和可靠的应用程序。在处理数据时,Python提供了一些内置功能来执行一些基本任务。本文将探讨如何使用Python删除变量中的数据的方法。 什么是…

差动保护原理

差动保护是输入的两端CT矢量差,当达到设定的动作值时启动动作元件。保护范围在输入的两端CT之间的设备(可以是线路,发电机,电动机,变压器等电气设备) 什么是差动保护 电流差动保护是中的一种保护。正相序是…

UDP协议和TCP协议

目录 UDP TCP 通过序列号与确认应答提高可靠性 为什么TCP是三次握手 为什么是四次挥手 超时重传机制 流控制 利用窗口控制提高速度 窗口控制与重发控制 拥塞控制 延迟确认应答 捎带应答 UDP UDP是不具有可靠性的数据报协议。细微的处理它会交给上层的应用去完成。…

总结一下js的浅拷贝和深拷贝

js中对象的赋值是通过将一个对象的引用赋值给另一个变量,两个变量指向同一个内存地址。这意味着如果更改其中一个对象的值,另一个对象的值也会更改。 浅拷贝是将一个对象的值复制给另一个对象,但如果对象中包含对其他对象的引用,…

Linux虚拟网络设备---之Veth pair详解

本文目录 1、我们可以用以下命令来创建veth pair: veth0----veth12、创建二个命名空间namespaces后,可以用以下命令将二个veth设备分别移入二个命名空间ns0和ns1,并将它们连接起来。12、或者用以下命令在创建namespaces后,直接在二个namespac…

设备树的引入及简明教程

首先说明,设备树不可能用来写驱动。 设备树只是用来给内核里的驱动程序,指定硬件的信息。比如LED驱动,在内核的驱动程序里去操作寄存器,但是操作哪一个引脚?这由设备树指定。 需要编写设备树文件(dts: device tree s…

【协议】NVMe over RoCE |nvmeof

什么是nvme nvme ssd和普通ssd区别 ssd是固态硬盘,普通的ssd配的是SATA口(AHCI协议),nvme ssd配的是PCIe口(nvme传输协议) 相比普通SSD的SATA口,nvme的PCIe口有巨大的性能优势。 更多详情见&…

HTTP超详细教程

1,HTTP协议 1.1,HTTP简述 HTTP全称为超文本传输协议,是一种应用比较广泛的应用层协议。 那何为超文本? 超文本指的是传输的内容不仅仅是文本,比如 html,css,javaScript 等数据,还…

SQL使用技巧

1、行列转换: decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值); select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较小值 sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1 例如: 变量110,变量220 则s…

中间件定义

中间件(middleware)是基础软件的一大类,属于可复用的软件范畴。中间件在操作系统软件,网络和数据库之上,应用软件之下,总的作用是为处于自己上层的应用软件提供运行于开发的环境,帮助用户灵活、高效的开发和集成复杂的…

CTFHub | 读取源代码

0x00 前言 CTFHub 专注网络安全、信息安全、白帽子技术的在线学习,实训平台。提供优质的赛事及学习服务,拥有完善的题目环境及配套 writeup ,降低 CTF 学习入门门槛,快速帮助选手成长,跟随主流比赛潮流。 0x01 题目描述…

互斥量实现原理探究

文章目录 1. 如何实现线程的加锁和解锁2. 封装一个锁3. 可重入和线程安全3.1 可重入与线程安全联系3.2 可重入与线程安全区别 4. 常见锁概念4.1 死锁4.2 代码实现4.3 死锁四个必要条件 1. 如何实现线程的加锁和解锁 经过上一篇文章的例子,大家已经意识到单纯的 i 或…

快速在linux上配置python3.x的环境以及可能报错的解决方案(python其它版本可同样方式安装)

一. linux安装python3.x 下面案例是安装python3.9 步骤,也可以指定其他版本安装 步骤1:安装系统依赖(重要) 这一步不执行,后面各种错误。 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sql…

【Python小技巧】更换python版本解决了plt.show()不显示图像的问题

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、df.plot() 显示不出图像?二、换个python版本问题解决总结 前言 from matplotlib import pyplot as plt kdata.plot(xtrade_time, y[close,BOLL…

ThreadPoolExecutor线程池

文章目录 一、ThreadPool线程池状态二、ThreadPoolExecutor构造方法三、Executors3.1 固定大小线程池3.2 带缓冲线程池3.3 单线程线程池 四、ThreadPoolExecutor4.1 execute(Runnable task)方法使用4.2 submit()方法4.3 invokeAll()4.4 invokeAny()4.5 shutdown()4.6 shutdownN…

SpringBoot-Actuator健康检查-打印日志改造应用策略模式+简单工厂

类图 包结构 代码实例 pom <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apac…

【MySQL 数据库】10、MySQL 的触发器

MySQL 的触发器 零、存储函数一、触发器二、触发器的使用和语法 零、存储函数 存储函数是有返回值的存储过程存储函数的参数只能是 IN 类型 characteristic 说明&#xff1a; ① DETERMINISTIC&#xff1a;相同的输入参数总是产生相同的结果 ② NO SQL &#xff1a;不包含 SQL…