RabbitMQ 在 Linux CentOS 和 Docker 环境下的部署及分布式部署指南

1. 引言

RabbitMQ 是一种广泛使用的消息代理,实现了高级消息队列协议 (AMQP)。它在分布式系统中扮演了至关重要的角色,确保消息的可靠传递、负载均衡和任务分发。本文将深入探讨如何在 Linux CentOS 和 Docker 环境下部署 RabbitMQ,并实现分布式部署,帮助你快速上手并优化生产环境。

2. 在 Linux CentOS 上部署 RabbitMQ

2.1 前提条件

在安装 RabbitMQ 之前,需要确保你的 CentOS 系统已安装以下组件:

  • Erlang:RabbitMQ 依赖于 Erlang 运行环境,因此需要首先安装。
  • CentOS 版本:确保使用 CentOS 7 或更高版本。
2.2 安装 Erlang
  1. 添加 Erlang 仓库

    sudo yum install -y epel-release
    sudo yum install -y erlang
    
  2. 验证安装

    erl -version
    
2.3 安装 RabbitMQ
  1. 添加 RabbitMQ 仓库

    sudo yum install -y https://packagecloud.io/rabbitmq/rabbitmq-server/packages/el/7/rabbitmq-server-3.9.13-1.el7.noarch.rpm
    
  2. 安装 RabbitMQ

    sudo yum install -y rabbitmq-server
    
  3. 启动和启用服务

    sudo systemctl start rabbitmq-server
    sudo systemctl enable rabbitmq-server
    
  4. 验证服务状态

    sudo systemctl status rabbitmq-server
    
2.4 配置管理控制台

为了更好地管理 RabbitMQ,可以启用其 Web 管理插件:

sudo rabbitmq-plugins enable rabbitmq_management

默认情况下,管理界面可以通过 http://:15672 访问。

配置用户访问

sudo rabbitmqctl add_user admin password123
sudo rabbitmqctl set_user_tags admin administrator
sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

3. 使用 Docker 部署 RabbitMQ

3.1 环境准备

确保系统上已安装 Docker。若未安装,可通过以下命令进行安装:

sudo yum install -y docker
sudo systemctl start docker
sudo systemctl enable docker
3.2 拉取 RabbitMQ Docker 镜像
docker pull rabbitmq:management

此镜像包含 RabbitMQ 及其 Web 管理插件。

3.3 启动 RabbitMQ 容器
docker run -d --name rabbitmq-server -p 5672:5672 -p 15672:15672 rabbitmq:management

参数说明

  • -d:后台运行容器。
  • --name:容器名称。
  • -p 5672:5672:映射 AMQP 协议端口。
  • -p 15672:15672:映射管理插件的 Web 界面端口。

4. RabbitMQ 的分布式部署

4.1 分布式部署的概念和优势

分布式部署指在多个服务器节点上运行 RabbitMQ 实例,组成一个集群来提高系统的容错能力、可扩展性和负载能力。这样一来,即使某个节点发生故障,集群中的其他节点依然能够提供服务,确保系统的高可用性。

优势

  • 高可用性:集群中的队列可以被镜像到多个节点上,保证即便部分节点故障,消息和服务仍然可用。
  • 负载均衡:多节点可以分担消息处理的负载,减少单个节点的压力。
  • 可扩展性:可以根据需要添加或移除节点来调整系统容量。
4.2 分布式集群的类型
  • 正常集群:所有节点共享元数据,但队列数据只存在于主节点,其他节点会向主节点转发请求。
  • 镜像队列集群:队列会被镜像到集群中指定的节点上。这样一来,主节点故障时,镜像节点能够接管。
4.3 环境准备和网络配置

在进行分布式部署时,需要保证各节点之间能够互相通信,推荐在所有节点中配置 /etc/hosts 文件以绑定 IP 地址和主机名。例如:

192.168.1.101 rabbit1
192.168.1.102 rabbit2
192.168.1.103 rabbit3
4.4 安装和配置步骤

1. 安装 RabbitMQ 和 Erlang: 在每个节点上按照基础安装步骤安装 Erlang 和 RabbitMQ,确保每个节点的版本一致。

2. 设置 Erlang Cookie 文件: 每个 RabbitMQ 节点使用 .erlang.cookie 文件进行节点间的认证。为了加入集群,所有节点的 Cookie 文件内容必须相同。

复制 Cookie 文件:

sudo scp /var/lib/rabbitmq/.erlang.cookie user@rabbit2:/var/lib/rabbitmq/.erlang.cookie
sudo scp /var/lib/rabbitmq/.erlang.cookie user@rabbit3:/var/lib/rabbitmq/.erlang.cookie

设置权限:

sudo chmod 400 /var/lib/rabbitmq/.erlang.cookie
sudo chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie

3. 启动 RabbitMQ

sudo systemctl start rabbitmq-server
sudo systemctl enable rabbitmq-server

4. 将节点加入集群: 在要加入的节点上执行以下命令,将其加入到主节点 rabbit1 的集群中:

sudo rabbitmqctl stop_app
sudo rabbitmqctl join_cluster rabbit@rabbit1
sudo rabbitmqctl start_app

验证节点是否成功加入:

sudo rabbitmqctl cluster_status

5. 设置高可用性策略: 为了保证队列在集群中的数据冗余,可以配置高可用性策略:

rabbitmqctl set_policy ha-all ".*" '{"ha-mode":"all"}'

参数说明

  • ha-mode: all:表示所有队列将在所有节点上进行镜像。
4.5 配置镜像队列的细节

除了 ha-mode: all 外,RabbitMQ 还支持更细粒度的高可用性配置:

  • exactly 模式:指定队列应被镜像到指定数量的节点上。
rabbitmqctl set_policy ha-exact "^exact\." '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'
  • nodes 模式:明确列出用于镜像的节点。
rabbitmqctl set_policy ha-nodes "^nodes\." '{"ha-mode":"nodes","ha-params":["rabbit@rabbit1","rabbit@rabbit2"]}'

同步模式

  • ha-sync-mode: automatic:新节点加入时,队列数据自动同步。
  • ha-sync-mode: manual:需手动触发同步,适合大规模数据同步控制。
4.6 配置和监控

启用 RabbitMQ 管理插件: 在每个节点上启用 Web 管理界面,方便管理和监控集群。

sudo rabbitmq-plugins enable rabbitmq_management

通过 http://:15672 访问管理界面。

监控集群状态: 使用以下命令检查集群和节点的运行状况:

sudo rabbitmq-diagnostics cluster_status
sudo rabbitmqctl list_queues
4.7 常见问题及解决方案

问题 1:节点加入失败,提示 Cookie 不匹配

  • 解决方法:确保 .erlang.cookie 文件在所有节点中内容一致,重新复制并设置权限。

问题 2:节点启动慢或无法启动

  • 解决方法:检查是否有端口冲突,确保 4369567215672 端口未被占用。

问题 3:网络延迟导致同步失败

  • 解决方法:在高延迟网络中,适当调整集群的同步和超时时间配置,确保节点间通信稳定。
4.8 实际项目中的分布式部署优化

为了提升分布式 RabbitMQ 集群的性能,建议:

  • 负载均衡:使用负载均衡器(如 HAProxy)将消息请求分发到不同的节点。
  • 消息持久化:根据业务需求配置队列和消息的持久化属性,保证消息不会因节点重启而丢失。
  • 监控和告警:结合 Prometheus 和 Grafana 进行实时监控,设置告警来主动应对集群异常。

通过这些配置,RabbitMQ 的分布式部署可以实现更高的稳定性和扩展能力,满足大型分布式系统的消息中间件需求。

5. 在生产环境中的优化建议

5.1 资源限制配置

确保 RabbitMQ 不受系统资源限制影响:

ulimit -n 65536
ulimit -u 4096
5.2 消息持久化

配置消息持久化以避免服务重启时消息丢失。

channel.queueDeclare("queueName", true, false, false, null);
5.3 使用镜像队列

确保关键队列在节点间复制:

rabbitmqctl set_policy ha-critical "^critical\." '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'

6. 结论

RabbitMQ 是构建高可用、可扩展分布式系统的强大工具。通过掌握在 CentOS 和 Docker 上的部署方法,以及分布式环境下的集群配置,你将能够为企业级应用构建稳健的消息中间件解决方案。希望本文的详细讲解和配置示例能帮助你在实际项目中更好地应用 RabbitMQ

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

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

相关文章

95.【C语言】数据结构之双向链表的头插,头删,查找,中间插入,中间删除和销毁函数

目录 1.双向链表的头插 方法一 方法二 2.双向链表的头删 3.双向链表的销毁 4.双向链表的某个节点的数据查找 5.双向链表的中间插入 5.双向链表的中间删除 6.对比顺序表和链表 承接94.【C语言】数据结构之双向链表的初始化,尾插,打印和尾删文章 1.双向链表的头插 方法…

24-11-9-读书笔记(三十二)-《契诃夫文集》(六)上([俄] 契诃夫 [译] 汝龙)药品是甜的,真理是美的,咖啡是苦的,生活是什么啊?

文章目录 《契诃夫文集》(六)上([俄] 契诃夫 [译] 汝龙)药品是甜的,真理是美的,咖啡是苦的,生活是什么啊?目录阅读笔记1. 新年的苦难2. 香槟3. 乞丐4. 仇敌5.薇罗琪卡6.在家里7. 太早…

【从零开始鸿蒙开发:01】自定义闪屏页

文章目录 大体介绍文件介绍各部分代码SplashPage.etsIndex.etsHomePage.etsroute_map.jsonmodule.json5 流程 大体介绍 文件介绍 其中: pages为我们的页面内容(我个人理解功能性小于activity但是大于fragment)route_map.json 为自定义的路由…

【Spring】获取Cookie和Session(@CookieValue()和@SessionAttribute())

文章目录 获取 Cookie传统获取 Cookie简洁获取 Cookie(注解) 获取 SessionSession 存储和获取简洁获取 Session (1)简洁获取 Session (2) 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给…

【机器学习】任务十:从函数分析到机器学习应用与BP神经网络

目录 1.从函数分析到机器学习应用 1.1 3D曲面图可视化报告 1.1.1 目标 1.1.2 代码分析 1.1.3 结果分析 1.1.4 观察与总结 1.1.5 结论 1.2 一元函数梯度计算报告 1.2.1 目标 1.2.2 代码分析 1.2.4 计算结果 1.2.5 优势与意义 1.2.6 结论 1.3 一元函数梯度和二阶导…

ios打包文件上传App Store windows工具

在苹果开发者中心上架IOS APP的时候,在苹果开发者中心不能直接上传打包文件,需要下载mac的xcode这些工具进行上传,但这些工具无法安装在windows或linux电脑上。 这里,我们可以不用xcode这些工具来上传,可以用国内的香…

Rust @绑定(Rust@绑定)(在模式匹配的同时将值绑定到变量)

文章目录 Rust中的绑定基础概念示例:基本模式匹配 绑定的使用示例:范围匹配并绑定变量 深入探索绑定的好处示例:复杂数据结构中的应用 总结 附加 Rust中的绑定 Rust 语言以其强类型系统和内存安全的特性著称。在进行模式匹配时,R…

JVM知识点大全(未完...)

JVM运行时数据区域 堆 堆是Java虚拟机中用于存储对象的主要区域,包括字符串常量池。绝大多数对象都是在堆中创建的(少部分对象可能会在栈上分配)。为了更好地进行垃圾回收,堆被划分为年轻代和老年代两部分。年轻代又被进一步分为E…

Nginx(编译)+Lua脚本+Redis 实现自动封禁访问频率过高IP

1.安装lua 1.1安装LuaJIT yum install readline-devel mkdir -p lua-file cd lua-file/ wget https://github.com/LuaJIT/LuaJIT/archive/refs/tags/v2.0.5.tar.gz tar -zxvf LuaJIT-2.0.5.tar.gz cd LuaJIT-2.0.5 make && make install PREFIX/usr/local/luajit 1.2…

Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量回归预测

Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量回归预测 目录 Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量回归预…

Java - SpringBoot之logback设置日期分割并设置指定时间自动清除,Linux启动运行

一、SpringBoot之logback-spring.xml配置 在Spring Boot中,要设置日志按照日期进行分割输出,并设置日志文件的大小自动清除,可以使用logback日志框架的配置 1、创建文件 在项目的resources目录下,创建logback-spring.xml文件 …

window11安装elasticsearch+Kibana

1、下载elasticsearch与elasticsearch 下载elasticsearch 查看elasticsearch对应的Kibana版本 下载elasticsearch解压后文件目录如下 可执行脚本文件,包括启动elasticsearch服务、插件管理、函数命令等 bin配置文件目录,如elasticsearch配置、角色配置、jvm配置等 conf 默认…

【HCIP园区网综合拓扑实验】配置步骤与详解(已施工完毕)

一、实验要求 实验拓扑图如上图所示 1、按照图示的VLAN及IP地址需求,完成相关配置 2、要求SW1为VLAN 2/3的主根及主网关 SW2为vlan 20/30的主根及主网关 SW1和SW2互为备份 3、可以使用super vlan(本实验未使用) 4、上层…

【基于PSINS工具箱】以速度为观测量的SINS/GNSS组合导航,UKF滤波

基于【PSINS工具箱】,提供一个MATLAB例程,仅以速度为观测量的SINS/GNSS组合导航(滤波方式为UKF) 文章目录 工具箱程序简述运行结果 代码程序讲解MATLAB 代码教程:使用UKF进行速度观测1. 引言与基本设置2. 初始设置3. U…

java访问华为网管软件iMaster NCE的北向接口时传递参数问题

上一篇文章介绍了利用《java访问华为网管软件iMaster NCE的北向接口》的一般性步骤,这里详细介绍其中一个读取性能数据的示例。原因是读取华为网管软件北向接口,完全找不到可供参考的例子。如果不需要传递什么参数,就能获取到结果&#xff0c…

基于SpringBoot的“在线考试系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“在线考试系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统总体结构图 系统登录界面图 用户注册界面图 管…

【2024软考架构案例题】你知道什么是 RESTful 风格吗?

👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主 ⛪️ 个人社区&#x…

科大讯飞面经,蛮简单的

先来看面经: 下面我来简单聊聊这些问题。 自我介绍 关于如何自我介绍,这个如果还不会或者还没有准备,请先准备好你要如何向面试官介绍自己。 面试本来就是一个自我推销的方式之一,如果自我介绍都不会说,你如何卖个好价…

首次超越扩散模型和非自回归Transformer模型!字节开源RAR:自回归生成最新SOTA!

文章链接:https://arxiv.org/pdf/2411.00776 项目链接:https://yucornetto.github.io/projects/rar.html 代码&模型链接:https://github.com/bytedance/1d-tokenizer 亮点直击 RAR(随机排列自回归训练策略)&#x…

通义千问API调用测试 (colab-python,vue)

文章目录 代码(来自官网)colab中用python测试Qwen2.5在官网上查看并确定过期时间这里看到我的免费额度到25年5月在同一个页面,点击API示例 前端调用直接在前端调用的优缺点以vue为例(代码是基于官网node.js的代码转换而来&#xf…