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…...
Python解压tar压缩文件
import tarfile import os# 解压文件def untar(self, log_tar_file, destination_dir):# 打开tar文件tar_file_path for tar_file_path in glob.glob(os.path.join(log_tar_file, **/*.tar), recursiveTrue):print(日志压缩文件:,tar_file_path)if ! tar_file_pat…...
Mac升级macOS 15 Sequoia后,无法ssh连接本地虚拟机
现象 macOS 15后,无法ssh连接本地启动的虚拟机,提示错误: No route to host,也ping不通。包括UTM、Parallels Desktop这两个虚拟机软件。之前都是没问题的,通过一些简单排查,目前没发现什么问题。 在虚拟…...
Unity录屏插件-使用Recorder录制视频
目录 1.Recorder的下载 2.Recorder面板 2.1常规录制属性 2.2录制器配置 2.2.1添加录制器 2.2.2配置Input属性 2.2.3配置 Output Format 属性 2.2.4配置 Output File 属性 3.Recorder的使用 3.1录制Game View视频 3.1.1Recorder配置与场景搭建 3.1.2开始录制 3.1.3…...
[ESP]从零开始的Arduino IDE安装与ESP环境配置教程
一、前言 最近也是在比赛方面比较忙,没有更多的时间和精力去更新长文章了。这几周都更倾向于环境搭建的教程,这类教程写起来确实方便,也不怎么费时间,一个下午基本可以搞定,哈哈,我保证不是在为自己想摆烂找…...
重拾设计模式--状态模式
文章目录 状态模式(State Pattern)概述状态模式UML图作用:状态模式的结构环境(Context)类:抽象状态(State)类:具体状态(Concrete State)类&#x…...
2024年全球办公键盘行业总体规模、主要企业国内外市场占有率及排名
根据QYResearch研究团队调研统计,2023年全球办公键盘市场销售额达到了 亿元,预计2030年将达到 亿元,年复合增长率(CAGR)为 %(2024-2030)。中国市场在过去几年变化较快,2023年市场规模…...
ThreadLocal用法详解
ThreadLocal 是 Java 中的一个类,它提供了线程局部变量的功能。线程局部变量是线程隔离的,每个使用该变量的线程都有其自己的变量副本,因此每个线程可以操作自己的线程局部变量,而不会和其他线程冲突。 以下是 ThreadLocal 的一些…...
linux中docker命令大全
基本命令 docker pull 拉取镜像 docker pull docker push 推送镜像到DockerRegistry docker push docker images 查看本地镜像 docker images docker rmi 删除本地镜像 docker rmi docker run 创建并运行容器(不能重复创建) docker run d…...
linux-----常用指令
文件和目录操作指令 ls(list)指令 功能:用于列出目录的内容,包括文件和子目录。示例: ls:列出当前目录下的所有非隐藏文件和目录。例如,在一个包含文件file1.txt、file2.txt和目录dir1的目录中&…...
1.gitlab 服务器搭建流程
前提条件: 一、服务器硬件水平 搭建gitlab服务器最低配置要求2核4G,低于这个配置的服务器运行效果很差。 gitlab官网:https://about.gitlab.com/ 下载地址:gitlab/gitlab-ce - Packages packages.gitlab.com 本机ubuntu 二、安装依赖 su…...
C 语言基础运算:输入两个整数并计算和、差、积
一、C 语言编程世界初窥 在当今数字化浪潮汹涌澎湃的时代,编程已成为一项极具影响力的技能,它犹如一把神奇的钥匙,能够开启无数创新与可能的大门。而在众多编程语言中,C 语言无疑是一颗最为璀璨耀眼的恒星,长久以来在编程的浩瀚星空中熠熠生辉,散发着独特而迷人的魅力。…...
PC寄存器(Program Counter Register) jvm
在JVM(Java虚拟机)中,PC寄存器(Program Counter Register)扮演着至关重要的角色,它是JVM执行引擎的核心组成部分之一。以下是PC寄存器在JVM中的具体角色和职责: 指令执行指针: PC寄存…...
CPU概述随堂测试
1. [单选题] 下列部件不属于控制器的是( )。 A. 指令寄存器 B. 程序计数器 C. 程序状态字寄存器 D. 时序电路 正确答案:C 控制器的主要组成部分包括指令寄存器(IR)、程序计数器(PC),以及用于控制…...
centos7下docker 容器实现redis主从同步
1.下载redis 镜像 docker pull bitnami/redis2. 文件夹授权 此文件夹是 你自己映射到宿主机上的挂载目录 chmod 777 /app/rd13.创建docker网络 docker network create mynet4.运行docker 镜像 安装redis的master -e 是设置环境变量值 docker run -d -p 6379:6379 \ -v /a…...
【数据安全】如何保证其安全
数据安全风险 数字经济时代,数据已成为重要的生产要素。智慧城市、智慧政务的建设,正以数据为核心,推动城市管理的智能化和公共服务的优化。然而,公共数据开放共享与隐私保护之间的矛盾日益凸显,如何在确保数据安全的…...
GTID详解
概念和组成 1,全局事务表示:global transaction identifiers 2, GTID和事务一一对应,并且全局唯一 3,一个GTID在一个服务器上只执行一次 4,mysql 5.6.5开始支持 组成 GTID server_uuid:transaction_id 如…...
【bodgeito】攻防实战记录
也许有一天我们再相逢,睁开眼睛看清楚,我才是英雄。 进入网站整体浏览网页 点击页面评分进入关卡 一般搭建之后这里都是红色的,黄色是代表接近,绿色代表过关 首先来到搜索处本着见框就插的原则 构造payload输入 <script>…...
【基础篇】1. JasperSoft Studio编辑器与报表属性介绍
编辑器介绍 Jaspersoft Studio有一个多选项卡编辑器,其中包括三个标签:设计,源代码和预览。 Design:报表设计页面,可以图形化拖拉组件设计报表,打开报表文件的主页面Source:源代码页码ÿ…...
SpringBoot+Vue3实现阿里云视频点播 实现教育网站 在上面上传对应的视频,用户开会员以后才能查看视频
要使用阿里云视频点播(VOD)实现一个教育网站,其中用户需要成为会员后才能查看视频,这个过程包括上传视频、设置权限控制、构建前端播放页面以及确保只有付费会员可以访问视频内容。 1. 视频上传与管理 创建阿里云账号ÿ…...
在VBA中结合正则表达式和查找功能给文档添加交叉连接
在VBA中搜索文本有两种方式可用,一种是利用Range.Find对象(更常见的形式可能是Selection.Find,Selection是Range的子类,Selection.Find其实就是特殊的Range.Find),另一种方法是利用正则表达式,但…...
spring\strust\springboot\isp前后端那些事儿
后端 一. 插入\更新一条数据(老) Map<String, Object> parameterMap MybatisUtil.initParameterSave("Send_ProjectFrozenLog", sendProjectFrozenLog); commonMapper.insert(parameterMap);parameterMap MybatisUtil.initParameter…...
Redis——缓存预热+缓存雪崩+缓存击穿+缓存穿透
文章目录 1、 缓存预热2、 缓存雪崩3、 缓存击穿4、 缓存穿透总结 1、 缓存预热 什么是预热: mysql加入新增100条记录,一般默认以mysql为准作为底单数据,如何同步给redis(布隆过滤器)这100条新数据。 为什么需要预热…...
【Java计算机毕业设计】基于Springboot小药店销售管理系统【源代码+数据库+LW文档+开题报告+答辩稿+部署教程+代码讲解】
源代码数据库LW文档(1万字以上)开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统:Window操作系统 2、开发工具:IntelliJ IDEA或者Eclipse 3、数据库存储:…...
AIGC与现代教育技术
目录 引言 一、AIGC在教育技术中的基本概念 1.1 什么是AIGC? 1.2 传统教育技术和AIGC的对比 二、实现过程:AIGC在现代教育中的实现 2.1 自动生成课件内容 2.1.1 代码示例:使用GPT生成教学文案 2.1.2 完善自动生成资料 2.1.3 多模态内…...
【活动邀请·深圳】深圳COC社区 深圳 AWS UG 2024 re:Invent re:Cap
re:Invent 是全球云计算领域的顶级盛会,每年都会吸引来自世界各地的技术领袖、创新者和实践者汇聚一堂,分享最新的技术成果和创新实践,深圳 UG 作为亚马逊云科技技术社区的重要组成部分,将借助 re:Invent 的东风,举办此…...
Java中的LIst
在Java中,List接口是集合框架(Collections Framework)的一部分,用于表示有序的集合(也称为序列)。List允许存储重复的元素,并且可以通过索引访问元素。以下是对Java中List的详细介绍:…...
源码分析之Openlayers中MousePosition鼠标位置控件
概述 本文主要介绍 Openlayers 中的MousePosition鼠标位置控件,该控件会创建一个元素在页面的右上方用来实时显示鼠标光标的位置坐标。该控件在实际应用很有效,可以实时获取鼠标位置,但是一般控件元素都会自定义。 源码分析 MousePosition…...
List深拷贝后,数据还是被串改
List深拷贝后数据还是被串改 List newList new ArrayList<>(oldList)newList.pushAll(oldList)你甚至想到了java8streamAPI以上还不行 List newList new ArrayList<>(oldList) 这是采用构造参数做到的深拷贝,是没问题的 newList.pushAll(oldList) …...
一级路由器与二级路由器网络互通配置,实现父网络访问子网络
一级路由器与二级路由器网络互通配置,实现父网络访问子网络 从图看a路由器是b的父路由。默认配置情况下b路由下的PC设备可以访问a路由器下的PC设备,但是a路由下的设备无法访问b路由下设备。 为了实现互通,需要配置静态路由表。 我的a路由器是…...
linux作 samba 服务端,linux windows文件互传,免账号密码
一 ubuntu 安装 sudo apt install samba二 修改samba 配置文件 1 路径 ls -l /etc/samba/smb.conf2 修改文件 a:配置成 匿名用户,无需输入账号 b:注意配置可读写且文件可创建可删除 [global] workgroup SAMBA security user passdb back…...
使用C#调用SAP的WebService接口
URL 是一个 WSDL 地址,这意味着你可以使用 SOAP Web Service 来调用ZRFC_WEB_MES_MM_015 接口。我们将使用 C# 中的 System.Web.Services.Protocols.SoapHttpClientProtocol 或 System.ServiceModel 命名空间来实现这一点。这里我们使用 System.ServiceModel 命名空…...
线程知识总结(二)
本篇文章以线程同步的相关内容为主。线程的同步机制主要用来解决线程安全问题,主要方式有同步代码块、同步方法等。首先来了解何为线程安全问题。 1、线程安全问题 卖票示例,4 个窗口卖 100 张票: class Ticket implements Runnable {priv…...
HarmonyOS(72)事件拦截处理详解
事件拦截 1、参考资料2、HitTestMode3、onTouchIntercept、onTouch、onClick事件执行顺序3.1、系统默认事件传递顺序3.2、子组件拦截事件1、参考资料 HarmonyOS(71) 自定义事件分发之TouchTestStrategy使用说明HarmonyOS(70) ArkUI 事件分发拦截,事件冲突解决方案HitTestModea…...
Leetcode-208. 实现Trie(前缀树)
前缀树是一个由“路径”和“节点”组成多叉树结构。由根节点出发,按照存储字符串的每个字符,创建对应字符路径,以此实现快速查找单词或是否为前缀的功能。 此题要求简单,只需实现下面几种功能: Trie() 初始化前缀树对…...
网络安全系列 之 SQL注入学习总结
1. sql注入概述 程序里面如果使用了未经校验的外部输入来构造SQL语句,就很可能会引入SQL注入漏洞。 注入攻击 对于字符串输入,如果这个字符串将被解释为某种指令,那么需要特别注意防止注入攻击。sql注入、os命令注入、xml注入是典型的攻击类…...
JVM中的方法绑定机制
JVM中的方法绑定机制主要分为静态绑定(Static Binding)和动态绑定(Dynamic Binding)两种。以下是关于这两种绑定机制的详细解释: 一、静态绑定(Static Binding) 定义:静态绑定是指在…...
tomato靶场攻略
前提:kali和tomato的连接方式都为net模式 tomato的默认网络连接方式为桥接模式,导入前注意修改,将tomato.ova的镜像导入虚拟机中 出现此页面则表示导入成功,打开kali虚拟机终端,切换为root权限 arp-scan -l 浏览器访…...
移动魔百盒中的 OpenWrt作为旁路由 安装Tailscale并配置子网路由实现在外面通过家里的局域网ip访问内网设备
移动魔百盒中的 OpenWrt作为旁路由 安装Tailscale并配置子网路由实现在外面通过家里的局域网ip访问内网设备 一、前提条件 确保路由器硬件支持: OpenWrt 路由器需要足够的存储空间和 CPU 性能来运行 Tailscale。确保设备架构支持 Tailscale 二进制文件,例…...
wxWidgets使用wxStyledTextCtrl(Scintilla编辑器)的正确姿势
开发CuteMySQL/CuteSqlite开源客户端的时候,需要使用Scintilla编辑器,来高亮显示SQL语句,作为C/C领域最成熟稳定又小巧的开源编辑器,Scintilla提供了强大的功能,wxWidgets对Scintilla进行包装后的是控件类:…...
Spring Boot中Bean的 构造器注入、字段注入和方法注入
在Spring中,依赖注入(DI)是实现控制反转(IoC)的一种方式,Spring提供了多种注入方式来将依赖关系注入到Bean中,常见的方式有构造器注入、字段注入和方法注入。下面将详细介绍这三种注入方式。 1…...
深入浅出支持向量机(SVM)
1. 引言 支持向量机(SVM, Support Vector Machine)是一种常见的监督学习算法,广泛应用于分类、回归和异常检测等任务。自1990年代初期由Vapnik等人提出以来,SVM已成为机器学习领域的核心方法之一,尤其在模式识别、文本…...
梯度下降的数学原理:用泰勒公式剖析梯度下降
梯度下降(Gradient Descent)是机器学习中非常核心的优化算法,通过不断调整模型参数,让损失函数(Loss Function)逐渐变小,从而提高模型的性能。损失函数是一个用来衡量预测值与真实值差距的函数&…...
城市应急指挥系统
城市应急指挥系统的重要性 随着现代化城市的高速发展,我们面临着多种应急突发情景,如自然灾害、事故灾难、公共卫生事件以及社会安全事件等。这些事件对城市的安全稳定构成严重威胁,因此,建立一套高效、全面的城市应急指挥系统显…...
pycharm 快捷键
PyCharm 是一款功能强大的集成开发环境(IDE),提供了丰富的快捷键来提高开发效率。以下是一些常用的 PyCharm 快捷键(基于 Windows/Linux 系统,Mac 系统可能略有不同): 通用快捷键 功能快捷键&a…...
游戏网站大全
http://piano.ssjjss.com/ 钢琴模拟器 https://gangqin.bmcx.com/?tdsourcetags_pcqq_aiomsg#/ 在线钢琴 https://www.gushiwen.cn/ 古诗文; https://www.bilibili.com/video/BV1UEWpeaEQK/ https://bouncyballs.org/ 掉落的球球 https://fakeupdate.net/ 假装升级界面 ht…...
线性代数期末总复习的点点滴滴(1)
一、可逆矩阵、行列式、秩的关系 1.行列式与可逆矩阵的关系 所以,不难看出矩阵可逆的充分必要条件是该矩阵的行列式不为0。 2.接着来看,满秩和矩阵行列式的关系 不难看出满秩和行列式不为0是等价的。 3.再来看,满秩和矩阵可逆的关系 说明了…...
感受野如何计算?
感受野(Receptive Field, RF)是卷积神经网络(CNN)中的一个重要概念,它指的是网络中某个特定神经元能够接收到的输入图像上的区域大小。换句话说,感受野定义了输出特征图中的每个单元依赖于输入图像中哪些像…...
0101多级nginx代理websocket配置-nginx-web服务器
1. 前言 项目一些信息需要通过站内信主动推动给用户,使用websocket。web服务器选用nginx,但是域名是以前通过阿里云申请的,解析ip也是阿里云的服务器,甲方不希望更换域名。新的系统需要部署在内网服务器,简单拓扑图如…...
解决 Ubuntu 20.04 和 ROS Noetic 中的 No Module Named ‘rospkg‘ 错误
解决 Ubuntu 20.04 和 ROS Noetic 中的 “No Module Named ‘rospkg’” 错误 在 Ubuntu 20.04 系统上运行 ROS Noetic 时,遇到了一个常见错误:“缺少 rospkg 模块”。这种问题主要是由于 Python 环境配置不当所导致。以下是对该问题的详细分析…...