RabbitMQ如何构建集群?
大家好,我是锋哥。今天分享关于【RabbitMQ如何构建集群?】面试题。希望对大家有帮助;
RabbitMQ如何构建集群?
1000道 互联网大厂Java工程师 精选面试题-Java资源分享网
在RabbitMQ中,集群(Cluster)是由多个RabbitMQ节点组成的一个逻辑组,这些节点共享队列、交换机、绑定、消息等数据,形成一个统一的系统来处理消息传递。RabbitMQ集群可以增加可用性、提高容错性和负载均衡,但它并不保证数据的高可用性(对于高可用性,RabbitMQ提供了“镜像队列”功能)。构建RabbitMQ集群通常需要以下步骤:
1. 准备节点
首先,你需要多台机器(或者虚拟机、容器等)来创建RabbitMQ集群。每个节点都需要安装RabbitMQ和Erlang环境。以下是安装步骤的概述:
-
安装RabbitMQ和Erlang: RabbitMQ是基于Erlang的,因此在安装RabbitMQ之前,必须先安装Erlang。你可以从Erlang官网获取Erlang版本。 然后,你可以从RabbitMQ官网下载并安装RabbitMQ。
sudo apt-get update sudo apt-get install erlang sudo apt-get install rabbitmq-server
也可以使用Docker进行安装。
2. 配置RabbitMQ节点
每个RabbitMQ节点都需要有一个唯一的节点名称。你可以通过设置环境变量或修改配置文件来指定每个节点的名称。
-
设置节点名称: 可以通过配置环境变量来指定RabbitMQ节点的名称。例如,设置
RABBITMQ_NODENAME
:export RABBITMQ_NODENAME=rabbit@node1.example.com
然后启动RabbitMQ:
sudo systemctl start rabbitmq-server
你可以通过以下命令查看RabbitMQ节点的状态:
sudo rabbitmqctl status
3. 节点间加入集群
要将RabbitMQ节点加入集群,你需要首先确保所有节点都能互相访问并能够通过网络进行通信。
-
在第一个节点上启动RabbitMQ: 选择一个节点作为集群的第一个节点(通常称为“主节点”),并启动RabbitMQ。假设节点的名称为
rabbit@node1.example.com
,在该节点上执行:sudo systemctl start rabbitmq-server
-
将其他节点加入集群: 对于其他节点(假设为
rabbit@node2.example.com
),你可以使用rabbitmqctl join_cluster
命令将它们加入到集群中。首先,停止RabbitMQ服务:sudo systemctl stop rabbitmq-server
然后,执行以下命令将
node2
加入node1
的集群:sudo rabbitmqctl reset # 清除节点状态(仅第一次加入时需要) sudo rabbitmqctl join_cluster rabbit@node1.example.com
如果节点加入成功,你可以重新启动RabbitMQ服务:
sudo systemctl start rabbitmq-server
这将把
node2
加入到node1
所在的集群中。 -
验证集群状态: 使用以下命令查看RabbitMQ集群的状态,确保所有节点都正确加入:
sudo rabbitmqctl cluster_status
如果节点已成功加入集群,你将看到类似如下的输出:
Cluster status of node rabbit@node1: [{nodes,[{disc,[rabbit@node1,rabbit@node2]}]},{running_nodes,[rabbit@node1,rabbit@node2]}]
4. 添加更多节点
要将更多的节点加入集群,重复上述步骤:停止RabbitMQ、加入集群、重启RabbitMQ。
5. 启用管理插件
为了方便管理RabbitMQ集群,你可以启用RabbitMQ的管理插件。在集群中的任一节点上执行:
sudo rabbitmq-plugins enable rabbitmq_management
启用管理插件后,可以通过浏览器访问RabbitMQ管理控制台,地址通常为:
http://<node1_ip>:15672/
通过该控制台可以查看集群状态、队列情况等。
6. 集群内的消息复制与镜像队列
RabbitMQ集群通过在节点之间分配队列的副本来增强可靠性。这种副本队列机制称为“镜像队列”。默认情况下,RabbitMQ集群内的队列数据只存储在单个节点上,除非配置为镜像队列。
-
配置镜像队列: 你可以通过策略来设置队列的镜像。例如,使用以下命令将所有队列设置为在所有节点上进行镜像:
sudo rabbitmqctl set_policy ha-all "" '{"ha-mode":"all"}'
这样,所有队列都会在集群中的每个节点上进行镜像,从而提高系统的可靠性。如果一个节点故障,其他节点上的镜像副本将确保消息不丢失。
ha-mode
策略支持以下值:- all:在所有节点上创建镜像副本。
- exactly:设置具体数量的节点来镜像队列。
- nodes:指定节点名称来设置镜像副本。
7. 集群的网络分区处理
在集群中,网络分区可能导致某些节点无法与集群其他节点通信。RabbitMQ使用网络分区策略来管理这种情况。默认情况下,当节点无法与集群的其他节点通信时,会根据**"网络分区发生时的策略"**来选择处理方式。
- split-brain(默认行为):所有节点在网络分区后都仍然继续提供服务,可能导致数据不一致。
- autoheal:在网络分区恢复后,RabbitMQ会尝试自动修复数据不一致的问题。
- ignore:忽略网络分区,所有节点继续提供服务。
你可以根据需要在rabbitmq.conf
中配置分区策略。
8. 监控与维护
一旦集群搭建完成,定期的监控和维护是非常重要的。RabbitMQ集群的状态可以通过管理插件查看,或使用命令行工具(如rabbitmqctl status
和rabbitmq-diagnostics
)来检查节点的健康状况。
总结
构建RabbitMQ集群的核心步骤包括:
- 安装RabbitMQ和Erlang;
- 配置节点名称;
- 将节点加入集群;
- 配置镜像队列(如果需要高可用性);
- 监控集群健康状况。
RabbitMQ集群有助于提高系统的可靠性和扩展性,但如果需要高可用性(例如,防止单点故障),还需要结合使用镜像队列和集群配置。
相关文章:

RabbitMQ如何构建集群?
大家好,我是锋哥。今天分享关于【RabbitMQ如何构建集群?】面试题。希望对大家有帮助; RabbitMQ如何构建集群? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在RabbitMQ中,集群(Cluster&#x…...

RNN LSTM Seq2Seq Attention
非端到端: data -》 cleaning -》 feature Engining (70%-80%工作 设计特征)-》 分类器 -》预测 端到端 End-to-End: data -》 cleaning -》Deep learning(表示学习,从数据中学习特征) -》…...

硬件设计-ADC和低本底噪声为何至关重要
简介 在工程领域,精度是核心要素。无论是对先进电子设备执行质量和性能检测,还是对复杂系统进行调试,测量精度的高低都直接关系到项目的成功与否。这时,示波器中的垂直精度概念就显得尤为重要,它衡量的是电压与实际被…...

个性化域名配置
1 申请免费SSL证书 访问 https://certbot.eff.org ,可申请 通配符证书,每次申请可以使用3个月,到期可以免费续期。 2 配置nginx server index.conf 配置如下: server {listen 80;server_name biwow.com www.biwow.com;return …...

uniapp中打包应用后,组件在微信小程序和其他平台实现不同的样式
今天,我们来介绍一下,uniapp中如何实现打包应用后,组件在微信小程序和其他平台不同的样式,在这里,我们使用背景颜色进行演示,使用 UniApp 提供的 uni.getSystemInfoSync() 方法来获取系统信息,包…...

MRI脑肿瘤检测数据集,使用500张原始图片标注,支持yolo,coco,voc格式
MRI脑肿瘤检测数据集,使用500张原始图片标注,支持yolo,coco,voc格式 数据集下载: https://download.csdn.net/download/pbymw8iwm/90125474 https://download.csdn.net/download/pbymw8iwm/90125473 https://downl…...

JumpServer开源堡垒机搭建及使用
目录 一,产品介绍 二,功能介绍 三,系统架构 3.1 应用架构 3.2 组件说明 3.3 逻辑架构 3.3 逻辑架构 四,linux单机部署及方式选择 4.1 操作系统要求(JumpServer-v3系列版本) 4.1.1 数据库 4.1.3创建数据库参考 4.2 在线安装 4.2.1 环境访问 4.3 基于docker容…...

Java 编程旅程(二)
在前一篇博客中,我们介绍了 Java 编程的基础知识和入门步骤。现在,我们将继续深入探讨 Java 的一些高级特性,以帮助你进一步提升编程技能。通过这篇博客,你将学习到更复杂的概念和技术,比如面向对象编程(OO…...

一、springcloud 入门——笔记
1. 学习之前要知道的 springcloud 应用的技术 2. springboot 和 springcloud 的版本选型 官网介绍:https://spring.io/projects/spring-cloud/#overview 生成新的Spring Cloud项目 最简单的入门方法是访问start.spring.io,选择您的Spring Boot版本和要使…...

思考:VSCode 的宏观工作原理 快速入门 VSCodium (****)
23个常用的VSCode快捷键(动图演示)> https://www.php.cn/faq/441696.html VSCodium AppImage 版 使用记录 https://blog.csdn.net/ken2232/article/details/143591323 **** 初步比较:VSCode > pk < VSCodium << 在下…...

C++ day8——模版
笔记脑图 作业 template <class T> class mylist{ public:// 这是一个链表的节点struct Link{T val;Link* next; } 增 :insert(T val) 在链表中创建新节点,节点上保存的数据为 val删:remove(T val) 移除链表中数据为 val 的节点改…...

【CSS in Depth 2 精译_080】 13.1:CSS 渐变效果(中)——不同色彩空间的颜色插值算法在 CSS 渐变中的应用
当前内容所在位置(可进入专栏查看其他译好的章节内容) 第四部分 视觉增强技术 ✔️【第 13 章 渐变、阴影与混合模式】 ✔️ 13.1 渐变 ✔️ 13.1.1 使用多个颜色节点(上)13.1.2 颜色插值方法(中) ✔️13.1…...

红日靶场1(搭建打靶)
搭建 靶场下载: http://vulnstack.qiyuanxuetang.net/vuln/detail/2/ (13G,需要百度网盘会员) 下载好靶场文件后直接解压 直接用虚拟机打开靶场 更改网络ip 需要模拟内网和外网两个网段, Win7 虚拟机相当于网关服务器,所以需要…...

LivePortrait 部署笔记
LivePortrait 开源地址: https://github.com/KwaiVGI/LivePortrait 模型下载: export HF_ENDPOINThttps://hf-mirror.com huggingface-cli download --resume-download KwaiVGI/LivePortrait --local-dir models--KwaiVGI--LivePortrait...

Greenhills Lib操作-查看Lib信息与将lib中的data段link到指定区域
文章目录 前言Greenhillls中gsize的用法修改ld文件将lib中的data段指定区域示例定义与链接总结 前言 项目开发过程中,遇到客户开发ASW,提供Lib进行集成,但ASW中的标定量没有定义对应的data段,导致无法将标定量指定到特定的内存。…...

【十进制整数转换为其他进制数——短除形式的贪心算法】
之前写过一篇用贪心算法计算十进制转换二进制的方法,详见:用贪心算法计算十进制数转二进制数(整数部分)_短除法求二进制-CSDN博客 经过一段时间的研究,本人又发现两个规律: 1、不仅仅十进制整数转二进制可…...

【JavaEE】网络(2)
一、网络编程套接字 1.1 基础概念 【网络编程】指网络上的主机,通过不同的进程,以编程的方式实现网络通信;当然,我们只要满足进程不同就行,所以即便是同一个主机,只要是不同进程,基于网络来传…...

AI for Science 的完美实践——科研文献的智慧化提取获得“综述性文摘”的软件开发
实践是检验真理的唯一标准!show your codes! 1 综述性文摘的需求 再简单不过了。 甲方(综述性文摘)需求:针对项目特征或描述,从几百篇相关的科研论文(PDF)中智能提取相关内容,包括…...

前端使用xlsx.js实现 Excel 文件的导入与导出功能
前端使用xlsx.js实现 Excel 文件的导入与导出功能 在现代的 Web 开发中,处理文件上传和导出功能已经变得越来越常见,尤其是 Excel 文件的导入与导出。 我们将使用 Vue.js 和 XLSX.js 库来处理 Excel 文件的读取和生成。XLSX.js 是一个强大的 JavaScrip…...

React简单了解
原理简化了解 import React from "react" import { createRoot } form "react-dom/client"const element React.createElement(p,{id: hello},Hello World! )const container document.querySelector(#root) const root createRoot(container) root.r…...

backbone 和Run-Length Encoding (RLE)含义
在深度学习中,特别是在图像分割任务中,backbone(主干网络)是指用于特征提取的预训练神经网络模型。Backbone 的主要作用是从输入图像中提取有用的特征,这些特征随后会被用于更高层次的任务,如分类、检测或分…...

在Centos7上安装MySQL数据库 How to install MySQL on Centos 7
执行以下命令,下载并安装MySQL。 wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm && yum -y install mysql57-community-release-el7-10.noarch.rpm && yum install -y mysql-community-server --nogpgcheck执行以下…...

Linux docker-20.10.9安装
Linux Docker20.10.9安装 解压文件 tar -xvf docker-20.10.9.tgz 给docker执行文件赋予可执行权限 chmod 755 -R docker/复制docker到/usr/bin/目录下,使docker命令可以执行 cp docker/* /usr/bin/将Docker注册为service,创建docker.service文件 vim /etc/syst…...

操作系统(13)虚拟存储器
前言 操作系统中的虚拟存储器是一项关键技术,它为用户提供了一个远大于实际物理内存容量的逻辑内存空间。 一、定义与原理 虚拟存储器是具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的存储器系统。其逻辑容量由内存容量与外存容量之和决定&…...

《面向对象综合训练01~05》
《面向对象综合训练01~05》 训练01:文字版格斗游戏 第一步:创建游戏角色的javabean类 public class Role {private String name;private int blood;private char gender;private String face;//长相是随机的//创建男女长相的随机数组String[] boyfaces…...

电脑为什么会提示“msvcr120.dll缺失”?“找不到msvcr120.dll文件”要怎么解决?
电脑故障排查指南:揭秘“msvcr120.dll缺失”的真相与解决方案 在软件开发与日常维护的广阔天地里,遇到系统报错或文件缺失的情况可谓家常便饭。今天,我将带领大家深入探讨一个常见的系统提示——“msvcr120.dll缺失”,并揭秘其背…...

huggingface NLP-微调一个预训练模型
微调一个预训练模型 1 预处理数据 1.1 处理数据 1.1.1 fine-tune 使用tokenizer后的token 进行训练 batch tokenizer(sequences, paddingTrue, truncationTrue, return_tensors"pt")# This is new batch["labels"] torch.tensor([1, 1])optimizer A…...

【BUG记录】Apifox 参数传入 + 号变成空格的 BUG
文章目录 1. 问题描述2. 原因2.1 编码2.2 解码 3. 解决方法 1. 问题描述 之前写了一个接口,用 Apifox 请求,参数传入一个 86 的电话,结果到服务器 就变成空格了。 Java 接收请求的接口: 2. 原因 2.1 编码 进行 URL 请求的…...

Spring AI API 介绍
目录: Spring AI 框架介绍 Spring AI API 核心API简介 Spring AI 提供了很多便利的功能,主要如下: AI Model API “Model API” 提供了聊天、文本转图像、音频转录、文本转语音、嵌入等功能,且不局限于某个固定的大模型提供商…...

【MySQL】Linux使用C语言连接安装
📢博客主页:https://blog.csdn.net/2301_779549673 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由 JohnKi 原创,首发于 CSDN🙉 📢未来很长&#…...