当前位置: 首页 > news >正文

RabbitMQ高可用集群搭建教程(基于CentOS 7.9 + Erlang 23.2.7 + RabbitMQ 3.8.8)

文章目录

  • 前言
  • 一、部署环境准备
    • 1.1 主机信息
    • 1.2 环境初始化(三台主机均执行)
      • 1.2.1 修改主机名
      • 1.2.2 配置主机解析
      • 1.2.3 关闭防火墙与SELinux
  • 二、RabbitMQ基础环境安装(三台主机均执行)
    • 2.1 准备本地RPM包
    • 2.2 安装Erlang
    • 2.3 安装RabbitMQ
    • 2.4 启动RabbitMQ服务
    • 2.5 配置Web管理界面
      • 2.5.1 启用管理插件
      • 2.5.2 创建远程登录用户
        • 补充:RabbitMQ用户角色说明
        • 常用用户操作命令
      • 2.5.3 验证登录
  • 三、RabbitMQ普通集群搭建
    • 3.1 配置数据及日志目录(三台主机均执行)
    • 3.2 同步Erlang Cookie
      • 3.2.1 Cookie文件路径
      • 3.2.2 同步Cookie(以rabbit-node1为基准)
    • 3.3 加入集群(在rabbit-node2和rabbit-node3上执行)
    • 3.4 验证集群状态
      • 3.4.1 命令行验证
      • 3.4.2 Web界面验证
  • 四、镜像集群配置(实现高可用)
    • 4.1 创建镜像策略
      • 参数说明
    • 4.2 验证镜像队列
      • 4.2.1 创建测试队列
      • 4.2.2 查看镜像状态
      • 4.3 测试高可用
  • 五、本地安装常见问题解决
    • 5.1 “依赖失败”报错
    • 5.2 “签名验证失败”警告
    • 5.3 Erlang版本不匹配
    • 5.4 节点无法加入集群
  • 总结

前言

在分布式系统中,消息队列中间件是实现服务解耦、异步通信的核心组件,而RabbitMQ凭借其稳定的性能、丰富的功能(如交换机、队列、绑定等),成为主流选择之一。但单点部署的RabbitMQ存在宕机风险,一旦服务中断将直接影响业务流程。因此,搭建高可用集群是生产环境的必要需求。

本文基于 CentOS 7.9 操作系统,使用 Erlang 23.2.7RabbitMQ 3.8.8,详细讲解从基础环境安装到普通集群搭建、镜像集群配置的完整流程,步骤清晰可复现,适合运维人员和开发人员参考。

一、部署环境准备

1.1 主机信息

本次搭建使用3台CentOS 7.9虚拟机,节点信息如下(需根据实际环境替换IP):

主机名IP地址部署服务操作系统
rabbit-node1192.168.10.16RabbitMQCentOS 7.9
rabbit-node2192.168.10.17RabbitMQCentOS 7.9
rabbit-node3192.168.10.18RabbitMQCentOS 7.9

1.2 环境初始化(三台主机均执行)

1.2.1 修改主机名

分别在三台主机上执行命令,设置对应的主机名(确保主机名唯一):

# 192.168.10.16 执行
hostnamectl set-hostname rabbit-node1 && bash# 192.168.10.17 执行
hostnamectl set-hostname rabbit-node2 && bash# 192.168.10.18 执行
hostnamectl set-hostname rabbit-node3 && bash

1.2.2 配置主机解析

编辑/etc/hosts文件,添加IP与主机名的映射,确保集群节点间可通过主机名通信:

vim /etc/hosts

添加以下内容(替换为实际IP和主机名):

192.168.10.16 rabbit-node1
192.168.10.17 rabbit-node2
192.168.10.18 rabbit-node3

在这里插入图片描述

1.2.3 关闭防火墙与SELinux

RabbitMQ集群节点间需要通过多个端口通信(如4369、5672、15672等),为避免网络拦截,临时关闭防火墙和SELinux:

# 停止并禁用防火墙
systemctl stop firewalld && systemctl disable firewalld# 临时关闭SELinux(重启后失效,生产环境需按需配置永久规则)
setenforce 0

二、RabbitMQ基础环境安装(三台主机均执行)

RabbitMQ依赖Erlang运行环境,且版本需严格匹配,需先安装Erlang再安装RabbitMQ。

2.1 准备本地RPM包

已提前下载以下两个RPM包(需确保版本对应):

  • Erlang:erlang-23.2.7-2.el7.x86_64.rpm

  • RabbitMQ:rabbitmq-server-3.8.8-1.el7.noarch.rpm

  • Rabbitmq下载地址:https://packagecloud.io/rabbitmq/rabbitmq-server/packages/el/7/rabbitmq-server-3.8.8-1.el7.noarch.rpm

  • Erlang下载地址:https://packagecloud.io/rabbitmq/erlang/packages/el/7/erlang-23.2.7-2.el7.x86_64.rpm

将两个包上传至三台主机的同一目录(如/root/rabbitmq-packages/),后续安装从本地读取。

注意:Rabbitmq和Erlang是由版本对应的。参考表可在RabbitMQ中获取。

注意安装的顺序:

  • ①先安装Erlang的rpm包
  • ②安装socat和logrotate等依赖
  • ③安装RabiitMQ包

2.2 安装Erlang

# 进入RPM包存放目录(替换为实际路径)
cd /root/rabbitmq-packages/# 安装Erlang本地RPM包
rpm -ivh erlang-23.2.7-2.el7.x86_64.rpm# 补充Erlang依赖(避免缺失依赖导致功能异常)
yum -y install erlang# 验证安装:输出“Erlang/OTP 23 [erts-11.1.8]”即成功
erl -v

在这里插入图片描述

2.3 安装RabbitMQ

# 1. 安装RabbitMQ依赖插件(socat用于进程通信,logrotate用于日志轮转)
yum install -y socat wget logrotate# 2. 导入RabbitMQ官方签名密钥(避免“未验证的签名”警告)
rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc# 3. 安装RabbitMQ本地RPM包(进入包存放目录执行)
cd /root/rabbitmq-packages/
rpm -ivh rabbitmq-server-3.8.8-1.el7.noarch.rpm# 4. 补充安装RabbitMQ依赖(确保服务可正常启动)
yum -y install rabbitmq-server

2.4 启动RabbitMQ服务

# 启动RabbitMQ服务
systemctl start rabbitmq-server# 设置开机自启(避免服务器重启后服务失效)
systemctl enable rabbitmq-server# 查看服务状态:显示“active (running)”即为正常
systemctl status rabbitmq-server

在这里插入图片描述

2.5 配置Web管理界面

RabbitMQ默认不启用Web管理功能,需手动开启,方便通过浏览器可视化操作。

2.5.1 启用管理插件

# 启用Web管理插件
rabbitmq-plugins enable rabbitmq_management# 验证端口:15672为管理界面端口,显示“LISTEN”即成功
netstat -tuln | grep 15672

在这里插入图片描述

  • 启用后,可通过http://主机IP:15672访问Web管理界面。
  • 默认账户:guest,默认密码:guest仅支持本地登录(无法通过远程IP访问)。

2.5.2 创建远程登录用户

为实现远程访问管理界面,需创建自定义用户并授予管理员权限:

# 1. 创建用户(示例:用户名admin,密码123456,可自定义)
rabbitmqctl add_user admin 123456# 2. 设置用户角色为管理员(拥有全部操作权限)
rabbitmqctl set_user_tags admin administrator# 3. 授予用户所有资源权限(允许操作“/”虚拟主机下的所有队列、交换机)
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
补充:RabbitMQ用户角色说明
  • administrator:超级管理员,可登录管理界面、查看所有信息、管理集群(如添加节点、删除用户)。
  • monitoring:监控者,可登录管理界面,查看集群状态、消息 metrics 等,但无修改权限。
  • policymaker:策略制定者,可登录管理界面,配置队列镜像策略、交换机绑定规则等。
  • management:普通管理员,仅可登录管理界面,查看自己有权限的队列和交换机。
常用用户操作命令
# 修改用户密码(示例:将admin的密码改为654321)
rabbitmqctl change_password admin 654321# 删除用户(示例:删除guest用户)
rabbitmqctl delete_user guest# 查看所有用户列表(验证用户是否创建成功)
rabbitmqctl list_users

2.5.3 验证登录

打开浏览器,访问http://192.168.10.16:15672(或其他节点IP),输入创建的admin账户和密码,成功进入管理界面即表示Web配置完成。

在这里插入图片描述

三、RabbitMQ普通集群搭建

普通集群的核心是共享元数据、分担连接压力,但队列数据仅存储在创建它的节点上(无高可用能力),需作为镜像集群的基础。

3.1 配置数据及日志目录(三台主机均执行)

默认情况下,RabbitMQ的数据和日志存储在/var/lib/rabbitmq//var/log/rabbitmq/,为便于管理,自定义存储目录:

# 1. 创建自定义目录
mkdir -p /data/rabbitmq/data  # 数据存储目录(如队列元数据、消息)
mkdir -p /data/rabbitmq/logs  # 日志存储目录(如启动日志、错误日志)# 2. 设置权限(确保rabbitmq用户可读写)
chmod 755 -R /data/rabbitmq
chown rabbitmq.rabbitmq -R /data/rabbitmq# 3. 配置目录路径(编辑环境变量文件)
vim /etc/rabbitmq/rabbitmq-env.conf

添加以下内容,指定自定义目录:

RABBITMQ_MNESIA_BASE=/data/rabbitmq/data
RABBITMQ_LOG_BASE=/data/rabbitmq/logs

重启服务使配置生效:

systemctl restart rabbitmq-server

3.2 同步Erlang Cookie

RabbitMQ集群依赖Erlang集群,而Erlang集群通过Cookie实现节点认证——所有节点的Cookie必须完全一致,否则无法通信。

3.2.1 Cookie文件路径

yum安装的RabbitMQ,Cookie文件默认存放在/var/lib/rabbitmq/.erlang.cookie,文件权限为400(仅所有者可读)。

3.2.2 同步Cookie(以rabbit-node1为基准)

  1. 停止所有节点的RabbitMQ服务(避免Cookie文件被占用):

    systemctl stop rabbitmq-server
    
  2. 在rabbit-node1上复制Cookie到其他节点

    # 复制Cookie到rabbit-node2
    scp /var/lib/rabbitmq/.erlang.cookie root@rabbit-node2:/var/lib/rabbitmq/# 复制Cookie到rabbit-node3
    scp /var/lib/rabbitmq/.erlang.cookie root@rabbit-node3:/var/lib/rabbitmq/
    
  3. 重启所有节点的RabbitMQ服务

    systemctl start rabbitmq-server
    

3.3 加入集群(在rabbit-node2和rabbit-node3上执行)

rabbit-node1为基准节点,将rabbit-node2rabbit-node3加入集群(节点类型分为“内存节点”和“磁盘节点”,默认是磁盘节点):

# 1. 停止节点应用(仅停止RabbitMQ服务,不停止Erlang节点)
rabbitmqctl stop_app# 2. 重置节点状态(清除节点原有数据,避免与集群冲突)
# 注意:重置后节点上的用户、队列会被删除,需重新配置
rabbitmqctl reset# 3. 加入集群(--ram表示作为“内存节点”,省略则为“磁盘节点”)
# 内存节点:不存储队列数据,仅存储元数据,适合高并发读取场景
# 磁盘节点:存储队列数据和元数据,集群中至少需1个磁盘节点(避免数据丢失)
rabbitmqctl join_cluster --ram rabbit@rabbit-node1# 4. 启动节点应用
rabbitmqctl start_app

3.4 验证集群状态

3.4.1 命令行验证

在任意节点执行以下命令,查看集群节点列表:

rabbitmqctl cluster_status

输出结果中,nodes字段应包含3个节点(rabbit@rabbit-node1rabbit@rabbit-node2rabbit@rabbit-node3),表示集群搭建成功。

在这里插入图片描述

3.4.2 Web界面验证

登录任意节点的Web管理界面,在Overview -> Nodes页面,可看到所有节点的状态(如“running”)和相关信息。

注意:重置节点状态后用户已清空,需要重新创建远程登录用户(只需在一个节点创建,其他节点会同步元数据)

在这里插入图片描述

四、镜像集群配置(实现高可用)

普通集群的缺陷是队列数据仅存于创建节点,若该节点宕机,队列将不可用。镜像集群通过队列数据复制到多个节点解决此问题,确保单点故障后服务不中断。

4.1 创建镜像策略

镜像策略用于定义哪些队列需要镜像复制到多少个节点,在任意节点执行以下命令,配置“所有队列自动镜像到集群所有节点”:

# 命令格式:rabbitmqctl set_policy 策略名称 队列匹配规则 策略参数
rabbitmqctl set_policy  ha-all "^" '{"ha-mode":"all"}'

参数说明

  • ha-all:策略名称(自定义,如“ha-all”表示“全量镜像”)。
  • "^":队列匹配规则(正则表达式,^表示匹配所有队列,可指定前缀如^order_仅镜像订单相关队列)。
  • {"ha-mode":"all"} : 策略模式为all即复制到所有节点,包括新增节点

4.2 验证镜像队列

4.2.1 创建测试队列

  1. 登录Web管理界面,进入Queues -> Add a new queue页面。
  2. 输入队列名称(如test-ha-queue),其他参数默认,点击Add queue创建队列。

在这里插入图片描述

4.2.2 查看镜像状态

在队列列表中,点击创建的test-ha-queue,进入详情页:

  • Replicas字段中,显示“3 nodes”(表示队列已复制到3个节点)。
  • 下方节点列表会标注“Node”(主节点,处理消息生产/消费)和“Mirrors”(从节点,同步主节点数据)。

在这里插入图片描述

4.3 测试高可用

手动停止队列的主节点(如rabbit-node1),执行:

systemctl stop rabbitmq-server

此时刷新Web管理界面,会发现test-ha-queue的主节点自动切换为其他节点(如rabbit-node2),队列仍可正常接收和消费消息,证明高可用生效。

在这里插入图片描述

五、本地安装常见问题解决

5.1 “依赖失败”报错

执行rpm -ivh安装RPM包时,若提示“libssl.so.10()(64bit) is missing”等依赖错误,改用yum localinstall命令(自动补全依赖):

# 示例:安装Erlang依赖缺失时
yum localinstall -y erlang-23.2.7-2.el7.x86_64_.rpm

5.2 “签名验证失败”警告

安装RabbitMQ时若提示“RPM signature verification failed”,重新导入官方签名密钥:

rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc

5.3 Erlang版本不匹配

执行erl -v若显示版本不是23.2.7,说明系统中存在旧版本Erlang,需先卸载再重新安装:

# 卸载旧版本Erlang
yum remove -y erlang# 重新安装指定版本
rpm -ivh erlang-23.2.7-2.el7.x86_64_.rpm

5.4 节点无法加入集群

若执行rabbitmqctl join_cluster时报错“unable to connect to node”,检查以下几点:

  1. 防火墙是否关闭(或是否开放4369端口,Erlang集群通信端口)。
  2. 各节点的Cookie是否一致(重新同步Cookie)。
  3. 主机解析是否正确(ping rabbit-node1能否通)。

总结

本文从“环境准备→基础安装→普通集群→镜像集群”逐步讲解RabbitMQ高可用集群的搭建过程,核心要点如下:

  1. 环境初始化:确保主机名、解析、防火墙配置正确,为集群通信奠定基础。
  2. 版本匹配:Erlang 23.2.7与RabbitMQ 3.8.8是官方推荐组合,避免因版本不兼容导致服务异常。
  3. 普通集群:通过同步Cookie实现节点通信,主要作用是分担连接压力,无高可用能力。
  4. 镜像集群:通过配置镜像策略,将队列数据复制到多个节点,解决单点故障问题,满足生产环境高可用需求。

生产环境中,还可搭配HAProxy实现集群负载均衡(统一客户端连接入口),结合Keepalived避免HAProxy单点故障,进一步提升集群稳定性。通过本文步骤,可快速搭建一套可靠的RabbitMQ高可用集群,支撑分布式业务的消息通信需求。

http://www.dtcms.com/a/452825.html

相关文章:

  • 【LangChain】P14 LangChain 输出解析器深度解析:Json解析器、XML解析器、字符串及列表、日期解析器
  • 仿真软件-多机器人2
  • 《基于 ERT 的稀疏电极机器人皮肤技术》ICRA2020论文解析
  • 聚焦CRISPR技术配套工具链的开源生态建设
  • 网站做视频窗口接口收费么免费搭建自己的网站
  • ​​Avalonia UI 开发核心注意事项:从理念到部署的避坑指南​
  • 从chatGPT获取的关于相机焦距与其他参数的关系
  • 拒绝做网站的理由wordpress自适应 slide
  • 【IT老齐456】Spring Boot优雅开发多线程应用,笔记01
  • 网站收录怎么弄极路由4 做网站
  • 备考华为HCIA - 云计算,培训与自学到底该怎么选?
  • 106、23种设计模式之备忘录模式(15/23)
  • LangChain部署rag Part3olmOCR与MinerU工具(赋范大模型社区公开课听课笔记)
  • C++进阶:使用普通函数重载算数运算符
  • 从内核调优到集群部署:基于Linux环境下KingbaseES数据库安装指南
  • Micro850 控制器深度解析:硬件特性与 I/O 接线核心(罗克韦尔2)
  • Python oct() 函数
  • (一) 机器学习之深度神经网络
  • C语言指针全面解析:从内存管理到高级应用
  • 南通网站建设推广专家建站教程的优点
  • Spring Boot整合Apache Shiro权限认证框架(应用篇)
  • 杰理AC632N---RTC应用问题
  • 网站免费软件下载阳江人社局官网招聘
  • 第二十三章:解析天书,诠释法则——Interpreter的解释艺术
  • 论文阅读-FoundationStereo
  • bug日记
  • 大数据集群环境搭建(Ubantu)
  • 深入浅出 HarmonyOS 应用开发:ArkTS 语法精要与实践
  • 用 Python+OpenCV 实现实时文档扫描:从摄像头捕捉到透视矫正全流程
  • 普陀做网站公司任丘市建设局网站