RabbitMQ—运维篇

RabbitMQ安装

  • RabbitMQ需要依赖erlang,如果普通安装需要安装erlang并保证二者兼容,因此选择较为简单的docker安装方式

1.获取rabbitmq镜像

docker pull rabbitmq:3.11.19-management #rabbitmq-management表示带有客户端(控制台)
docker pull rabbitmq:3.11.19 #如果只要服务端

2.启动rabbitmq容器

docker run \
-d \
--name rabbitmq \
--hostname=rabbitmqNode1 \ #设置hostname,后续做集群时方便管理,这里将rabbitmq设为节点1
-v rabbitmq-plugins:/plugins \ #将rabbitmq的plugin目录进行挂载,以便后续进行安装rabbitmq插件
-v rabbitmq:/var/lib/rabbitmq \
-e RABBITMQ_DEFAULT_USER=admin \ #设置rabbitmq管理账户为admin、密码为admin
-e RABBITMQ_DEFAULT_PASS=admin \
-e RABBITMQ_ERLANG_COOKIE='rabbitcookie' \ #集群部署时,Erlang Cookie 值必须都相同
-p 15672:15672 \ #15672是客户端的端口,5672是服务端的端口
-p 5672:5672 \
--restart=always \
rabbitmq:3.11.19-management

3.开启防火墙

firewall-cmd --zone=public --add-port=5672/tcp --permanent
firewall-cmd --zone=public --add-port=15672/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-all # 查看已经开放的端口号

3.测试rabbitmq是否安装完成

  • 访问部署IP:15672,观察rabbitmq是否正常部署

RabbitMQ集群

  • RabbitMQ集群部署时,必须保证Erlang Cookie相同

普通集群模式

  • 目的:提高MQ的吞吐量

  • 原理:普通集群模式下,broker之间复制元数据

    1. 生产者给一个broker发送消息,消费者连接的是另一个broker
    2. 生产者连接的broker会将消息转发给消费者的broker,这样就实现了分离消费端和生产端
  • 普通集群模式进一步提高了MQ效率,但不保证高可用,如果一个节点宕机仍然会丢失消息

#如果要再加第三个节点就再--link
docker run -d --name rabbitmqCluster02 --hostname=node2 -v rabbitmqCluster02.plugins:/plugins -v rabbitmqCluster02:/var/lib/rabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' -p 15673:15672 -p 5673:5672 --link rabbitmqCluster01:node1 rabbitmq:3.11.19-management
#节点2,进入容器,开启集群
rabbitmqctl stop_apprabbitmqctl resetrabbitmqctl join_cluster  rabbit@node1rabbitmqctl start_app#节点1,进入容器,重载配置
rabbitmqctl stop_apprabbitmqctl resetrabbitmqctl start_app
#这里加了一个--add-host,即将集群中其他的节点加入,这样才能相互通信
#这里演示一主一从,创建node1节点时就将node2节点也加入,如果如果需要多个就增加几个add-host参数即可
docker run \
-d \
--name rabbitmq \
-v rabbitmq-plugins:/plugins \
-v rabbitmq:/var/lib/rabbitmq \
--hostname=node1 \
--add-host=node2:192.168.1.43 \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=admin \
-e RABBITMQ_ERLANG_COOKIE='rabbitcookie' \
-p 4369:4369 \
-p 25672:25672 \
-p 15672:15672 \
-p 5672:5672 \
--restart=always \
rabbitmq:3.11.19-managementdocker run \
-d \
--name rabbitmq \
-v rabbitmq-plugins:/plugins \
-v rabbitmq:/var/lib/rabbitmq \
--hostname=node2 \
--add-host=node1:192.168.1.35 \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=admin \
-e RABBITMQ_ERLANG_COOKIE='rabbitcookie' \
-p 4369:4369 \
-p 25672:25672 \
-p 15672:15672 \
-p 5672:5672 \
--restart=always \
rabbitmq:3.11.19-management

镜像队列

  • 目的:解决普通集群环境下高可用的问题

  • 原理

    • 队列内容通过主从复制同步到多个节点,主节点处理读写请求,从节点实时同步数据
    • 主节点故障时,从节点通过选举机制自动接管,服务无感知切换
  • 镜像队列虽然实现了高可用,但消息在节点间同步时出现宕机,仍有可能丢失消息

  • 加入集群

    # Node2/Node3执行
    rabbitmqctl stop_app
    rabbitmqctl reset
    rabbitmqctl join_cluster --ram rabbit@rabbit1  # Node1为磁盘节点,其他可设为内存节点
    rabbitmqctl start_app
    
  • 验证集群状态

    rabbitmqctl cluster_status
    # 输出应包含所有节点,且running_nodes列表完整
    
  • 创建镜像策略

    # 将所有队列设置为镜像队列(全量同步)
    rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'# 或指定队列前缀(如以"mirror_"开头的队列)
    rabbitmqctl set_policy ha-mirror "^mirror_" '{"ha-mode":"exactly","ha-params":2}'
    

仲裁队列

  • 目的:类似于redis的哨兵机制,进一步减小了消息丢失的风险

  • 原理

    1. 多数派确认:消息需被超过半数节点(如3节点集群需2个确认)持久化后才返回成功响应,确保数据安全
    2. 选举机制:若Leader宕机,Followers通过Raft协议发起选举,新Leader需获多数节点投票,避免脑裂
  • 队列声明与配置

Map<String, Object> arguments = new HashMap<>();
arguments.put("x-queue-type", "quorum");  // 声明为Quorum队列
channel.queueDeclare("test-quorum-queue", true, false, false, arguments);

Streams队列

  • 目的:数据分片,进一步提高了传输性能

  • 队列声明与配置

Map<String, Object> args = new HashMap<>();
args.put("x-queue-type", "stream");       // 必须设置为stream
args.put("x-max-length-bytes", 20_000_000_000L); // 最大20GB
args.put("x-stream-max-segment-size-bytes", 100_000_000); // 每段100MB
channel.queueDeclare("my-stream", true, false, false, args);

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

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

相关文章

【学习K230-例程21】GT6700-UDP-Client

B站视频 UDP 简介 UDP 是 User Datagram Protocol 的简称&#xff0c;中文名是用户数据报协议&#xff0c;是 OSI&#xff08;Open SystemInterconnection&#xff0c;开放式系统互联&#xff09;参考模型中一种无连接的传输层协议&#xff0c;提供面向事务的简单不可靠信息传送…

LazyLLM教程 | 第9讲:微调实践:让大模型和向量模型更懂你的领域

前面教程中&#xff0c;我们通过优化检索策略、召回重排略以及基于大模型的查询重写策略来提升了RAG系统的检索精度&#xff0c;但最终回复的结果还需要经过大模型的融合和处理&#xff0c;模型能力的强弱直接影响到最终的结果。这就好比一道好的菜不仅需要有高质量的食材&…

六、vue3后台项目系列——页面自适应设计+pinia,vuex的使用

前言&#xff1a;在页面加入自适应是提高用户体验的一种形式&#xff0c;甚至有时候是手机用户&#xff0c;我们就需要做一个自适应处理&#xff0c;其中肯定会涉及一些状态条件的判断&#xff0c;而这些关键的条件就是我们用来切换样式的关键&#xff0c;所以我们需要使用状态…

视频讲解|Python用ResNet残差神经网络在大脑出血CT图像描数据预测应用

全文链接&#xff1a;https://tecdat.cn/?p43843 原文出处&#xff1a;拓端抖音号拓端tecdat 分析师&#xff1a;Zikun Zhang 视频讲解Python用ResNet残差神经网络在大脑出血CT图像描数据预测在临床医疗影像诊断中&#xff0c;大脑出血的快速准确识别直接关系到患者的救治效率…

Mysql中有那些锁

按照锁的力度分&#xff1a;1.行级锁2.表级锁3.全局锁4.页级锁innodb不支持页锁全局锁全局锁指的是对整个数据库实例加锁&#xff0c;一般用于数据库的表级锁表锁 是对整张表进行加锁。表级锁还有以下几种&#xff1a;意向锁&#xff1a;意向锁是指&#xff0c;我们在事务请求表…

基于 CoT 思维链协调多 MCP 工具:依托亚马逊云科技服务打造全流程智能的 Amazon Redshift 运维体系

基于 CoT 思维链协调多 MCP 工具&#xff1a;依托亚马逊云科技服务打造全流程智能的 Amazon Redshift 运维体系 新用户可获得高达 200 美元的服务抵扣金 亚马逊云科技新用户可以免费使用亚马逊云科技免费套餐&#xff08;Amazon Free Tier&#xff09;。注册即可获得 100 美元的…

手机群控平台的智能管控技术深度解析

手机群控平台作为数字化运营的核心工具&#xff0c;正在重塑移动设备管理的技术边界。其核心价值在于通过集中化控制实现批量化操作&#xff0c;同时借助智能化算法提升管控效率。本文将深入探讨其技术架构与实现方案。平台架构与核心技术手机群控平台采用分布式架构设计&#…

Spring Boot 生命周期与核心扩展点全解析(含实操案例)

在Spring Boot开发中,理解应用的生命周期是实现优雅启动、资源管理与故障处理的关键。不同于传统Spring框架需要繁琐的XML配置,Spring Boot通过自动配置简化了开发流程,但其生命周期的底层逻辑仍延续并增强了Spring的核心机制。本文将从“生命周期阶段划分”“核心扩展点原理…

69-SQLite应用

1. SQLite操作 1.1了解数据库1.2 操作数据库步骤# -*- coding: utf-8 -*- """ Project : 01-python-learn File : 03_SQLite3添加数据.py IDE : PyCharm Author : 刘庆东 Date : 2025/9/15 14:05 """ # 1. 导入模块 import sqlite3 …

Nginx - 正向vs反向代理

参考: https://blog.csdn.net/william_n/article/details/127387009 AI问答​​ Nginx 正向代理 vs 反向代理详解​​ ​​1. 正向代理&#xff08;Forward Proxy&#xff09;​​ ​​定义​​ ​​客户端主动配置​​的代理服务器&#xff0c;代表客户端向外部服务器发送请…

装饰器模式在Spring中的案例

设计模式-装饰器模式 装饰器模式所解决的问题是&#xff0c;在不改变原来方法代码的情况下对方法进行修饰&#xff0c;从而丰富方法功能。 Spring架构中的装饰器模式 在Spring架构中&#xff0c;以线程池进行举例。 线程池 线程池是一个对线程集中管理的对象&#xff0c;集中管…

云原生与 AI 驱动下的数据工程新图景——解读 DZone 2025 数据工程趋势报告【附报告下载】

在 AI 技术从“实验性”走向“企业级落地”的关键阶段&#xff0c;数据工程作为底层支撑的重要性愈发凸显。近日&#xff0c;DZone 发布的《2025 数据工程趋势报告》&#xff08;Scaling Intelligence with the Modern Data Stack&#xff09;通过对全球 123 位 IT 专业人士的调…

9.5 机器翻译与数据集

语言模型是自然语言处理的关键&#xff0c;而机器翻译是语言模型最成功的基准测试&#xff0c;因为机器翻译正是将输入序列转换成输出序列的序列转换模型的核心问题。序列转码模型在各类现代人工智能应用中国呢发挥着至关重要的作用&#xff0c;因此我们将其作为本章剩余部分和…

Linux 内核镜像与启动组件全解析:从 vmlinux 到 extlinux.conf

&#x1f9e0; Linux 内核镜像与启动组件全解析&#xff1a;从 vmlinux 到 extlinux.conf 在嵌入式 Linux 系统中&#xff0c;启动流程涉及多个关键文件和机制。不同的镜像格式和配置文件承担着不同的职责&#xff0c;从内核编译到 bootloader 加载&#xff0c;再到系统启动。本…

【系统分析师】2024年下半年真题:论文及解题思路

更多内容请见: 备考系统分析师-专栏介绍和目录 文章目录 试题一:论devops在企业信息系统开发中的应用 试题二:论系统业务流程分析方法及应用 试题三:论软件测试方法及应用 试题四:论信息系统运维管理 试题一:论devops在企业信息系统开发中的应用 1、概要叙述你参与管理和…

AI GEO 实战:借百度文小言优化,让企业名称成搜索热词

在当今数字化浪潮中&#xff0c;企业的线上曝光度和搜索可见性至关重要。百度作为国内占据主导地位的搜索引擎&#xff0c;其推出的大模型文小言蕴含着巨大的潜力。通过巧妙运用 AI GEO&#xff08;生成式引擎优化&#xff09;策略&#xff0c;企业完全有可能让自己的公司名称成…

文件操作知识点总结

目录 1.为什么使用文件 2.什么是文件&#xff1f; 2.1 程序文件 2.2 数据文件 2.3 文件名 3.二进制文件和文本文件 4.文件的打开和关闭 4.1 流和标准流 4.1.1 流 4.1.2 标准流 4.2 文件指针 4.3 文件的打开和关闭 4.3.1 fopen函数 4.3.2 fclose函数 5.文件的顺序…

oracle认证有哪几种?如何选择

Oracle&#xff08;甲骨文&#xff09;不仅是全球领先的数据库软件巨头&#xff0c;更是企业级数据管理的代名词&#xff0c;获得Oracle认证&#xff0c;证明可从事Oracle数据库服务器的数据操作和管理等工作。下面给大家详细其主要认证类型及其在职业发展中的含金量&#xff0…

AppTest邀请测试测试流程

相比AppGallery邀请测试&#xff0c;AppTest邀请测试具备以下全新能力&#xff1a;若您同时发布了多个测试版本&#xff0c;AppTest支持测试版本自动升级到最新的测试版本。您可以选择将当前最新在架版本的应用介绍截图展示给测试人员&#xff0c;视觉效果更好&#xff0c;提升…

硬件 - oring多电源切换

目录 一、ORing电路 1.1 ORING 电路 1.2 ORING 电路关键部分 二、多电源切换 2.1 主要思路 2.2 适用场景 一、ORing电路 1.1 ORING 电路 中文常称 “或环电路” 或 “并联冗余电路”是一种电源并联冗余拓扑结构 核心功能&#xff1a;将多路独立电源的输出 “并联整合”&a…