RabbitMQ集群部署方案及配置指南01

rabbitmq集群部署方案

1:单一节点集群

2:多主节点集群

3:延时队列集群

4:死信队列集群

5:镜像集群

6:Streams集群模式(高可用+负载均衡)、插件方式

7:Quorum(仲裁)队列集群

RabbitMQ集群方案,七种模式的对比和具体部署方法。各自的特点:

集群模式 高可用性 数据一致性 性能开销 适用版本 主要适用场景
1. 单一节点 - 所有 开发测试、学习验证
2. 多主节点(普通)集群 无 (队列级) 无 (消息不复制) 所有 吞吐优先,允许短暂不可用 (如日志收集)
3. 镜像队列集群 高 (队列镜像) 强 (同步复制) 所有 高可用优先 (如订单、金融业务)
4. 仲裁队列集群 (Quorum) 高 (多数派) 强 (Raft共识) RabbitMQ 3.8+ 新系统默认选择,强一致且自愈
5. Streams集群模式 强 (日志复制) 低 (顺序读写) RabbitMQ 3.9+ 大规模消息流、高吞吐、长期存储 (如审计日志)
6. 延时队列实现 依赖底层集群 - 所有 定时任务、延迟消息
7. 死信队列实现 依赖底层集群 - 所有 消息失败处理、异常重试

📝 方案详解与配置指南

以下是在CentOS 7下的具体配置方案。

版本兼容性关键提醒 :为确保稳定,在CentOS 7上建议安装 RabbitMQ 3.12.x 及匹配的 Erlang 25.x。切勿安装3.13.x,否则会因glibc版本过低而失败。

通用前置步骤

在配置任何集群前,请先在所有节点上完成:

  1. 安装Erlang和RabbitMQ:从RabbitMQ官方仓库安装。

  2. 同步主机名与Cookie

    • 确保/etc/hosts能解析所有节点主机名(如 node1, node2, node3)。

    • 确保所有节点的Erlang Cookie (/var/lib/rabbitmq/.erlang.cookie) 内容完全一致 ,权限设为400

  3. 开放防火墙端口 :放行AMQP (5672)、管理端口 (15672)、节点发现 (4369) 和集群通信 (25672) 端口

单一节点集群centos7 部署

1. 系统更新与基础工具

更新系统包

sudo yum update -y

安装必要工具

sudo yum install -y curl wget vim net-tools epel-release

2. 安装Erlang(RabbitMQ依赖)

RabbitMQ运行需要Erlang环境。由于CentOS 7的glibc版本较旧,建议使用RabbitMQ官方仓库:

导入RabbitMQ签名密钥

sudo rpm --import https://github.com/rabbitmq/signing-keys/raw/main/rabbitmq-release-signing-key.asc

下载RabbitMQ的Erlang仓库配置

curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash

安装Erlang(建议使用25.x版本)

sudo yum install -y erlang-25.3.2.6-1.el7

3. 下载RabbitMQ RPM包

由于版本兼容性,建议下载特定版本的RPM包:

创建下载目录

sudo mkdir -p /opt/rabbitmq

cd /opt/rabbitmq

下载RabbitMQ 3.12.x版本(与CentOS 7兼容)

wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.12.12/rabbitmq-server-3.12.12-1.el7.noarch.rpm

如果下载慢,可以使用国内镜像

wget https://mirrors.tuna.tsinghua.edu.cn/rabbitmq-release/v3.12.x/rabbitmq-server-3.12.12-1.el7.noarch.rpm

二、RabbitMQ安装与配置

1. 安装RabbitMQ服务

安装RabbitMQ RPM包

sudo yum localinstall -y rabbitmq-server-3.12.12-1.el7.noarch.rpm

验证安装

rpm -qi rabbitmq-server

2. 基础服务配置

创建配置文件目录

sudo mkdir -p /etc/rabbitmq

创建主配置文件

sudo tee /etc/rabbitmq/rabbitmq.conf << 'EOF'

监听设置

listeners.tcp.default = 5672

management.tcp.port = 15672

默认虚拟机

default_vhost = /

默认用户(生产环境请修改)

default_user = guest

default_pass = guest

default_user_tags.administrator = true

内存和磁盘设置

vm_memory_high_watermark.relative = 0.6

disk_free_limit.absolute = 2GB

日志设置

log.file.level = info

log.dir = /var/log/rabbitmq

log.file = rabbit.log

集群名称(单节点也需设置)

cluster_name = single_node_cluster

EOF

设置文件权限

sudo chmod 644 /etc/rabbitmq/rabbitmq.conf

sudo chown rabbitmq:rabbitmq /etc/rabbitmq/rabbitmq.conf

3. 配置高级参数(可选)

创建高级配置:

sudo tee /etc/rabbitmq/rabbitmq-env.conf << 'EOF'

RabbitMQ节点名称

NODENAME=rabbit@$(hostname -s)

配置文件路径

CONFIG_FILE=/etc/rabbitmq/rabbitmq.conf

日志文件路径

LOG_BASE=/var/log/rabbitmq

Mnesia数据库路径

MNESIA_BASE=/var/lib/rabbitmq/mnesia

插件扩展目录

PLUGINS_DIR=/usr/lib/rabbitmq/plugins

EOF

三、启动与管理服务

1. 防火墙配置

开放必要端口

sudo firewall-cmd --permanent --add-port=5672/tcp # AMQP协议端口

sudo firewall-cmd --permanent --add-port=15672/tcp # 管理界面端口

sudo firewall-cmd --permanent --add-port=25672/tcp # 集群通信端口(预留)

sudo firewall-cmd --permanent --add-port=4369/tcp # epmd端口

sudo firewall-cmd --reload

查看开放的端口

sudo firewall-cmd --list-ports

测试的时候直接关闭防火墙

2. 启动服务

bash

复制代码
# 启动RabbitMQ服务
sudo systemctl start rabbitmq-server

# 设置开机自启
sudo systemctl enable rabbitmq-server

# 查看服务状态
sudo systemctl status rabbitmq-server -l

# 查看服务日志
sudo journalctl -u rabbitmq-server -f

3. 启用管理插件

启用Web管理界面

sudo rabbitmq-plugins enable rabbitmq_management

重启服务使插件生效

sudo systemctl restart rabbitmq-server

四、安全与用户管理

1. 修改默认用户(重要!)

删除默认guest用户(允许本地访问,不允许远程)

sudo rabbitmqctl delete_user guest

创建新的管理员用户

sudo rabbitmqctl add_user admin StrongPassword123!

sudo rabbitmqctl set_user_tags admin administrator

sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

创建应用程序用户

sudo rabbitmqctl add_user app_user AppPassword456!

sudo rabbitmqctl set_permissions -p / app_user ".*" ".*" ".*"

2. 验证安装

检查节点状态

sudo rabbitmqctl status

检查用户列表

sudo rabbitmqctl list_users

检查虚拟主机

sudo rabbitmqctl list_vhosts

检查运行中的插件

sudo rabbitmq-plugins list

五、访问管理界面

1. 浏览器访问

打开浏览器访问:http://你的服务器IP:15672

使用刚创建的用户登录:

  • 用户名:admin

  • 密码:

2. 管理界面功能验证

在管理界面中检查:

  1. Overview(概览):确认节点状态为"running"

  2. Connections(连接):当前应为0连接

  3. Queues(队列):当前应为0队列

  4. Admin(管理):查看用户和权限

六、基础运维命令

常用管理命令

查看服务状态

sudo rabbitmqctl status

查看节点信息

sudo rabbitmqctl cluster_status

停止服务

sudo systemctl stop rabbitmq-server

重启服务

sudo systemctl restart rabbitmq-server

查看服务日志

sudo tail -f /var/log/rabbitmq/rabbit@*.log

重置节点(慎用!会清除所有数据)

sudo rabbitmqctl reset

数据目录说明

主要目录结构

/var/lib/rabbitmq/mnesia/ # Mnesia数据库(消息、队列等数据)

/var/log/rabbitmq/ # 日志文件

/etc/rabbitmq/ # 配置文件

/usr/lib/rabbitmq/plugins/ # 插件目录

七、故障排查

常见问题及解决

1.服务启动失败

检查错误日志

sudo tail -n 100 /var/log/rabbitmq/startup_log

sudo tail -n 100 /var/log/rabbitmq/startup_err

常见原因:端口被占用

sudo netstat -tlnp | grep :5672

2.无法法访问管理界面

# 检查防火墙
sudo firewall-cmd --list-ports

# 检查服务状态
sudo systemctl status rabbitmq-server

# 检查管理插件是否启用
sudo rabbitmq-plugins list | grep management

3.内存或磁盘不足

# 检查系统资源
free -h
df -h

# 修改内存阈值
echo "vm_memory_high_watermark.absolute = 2GB" | sudo tee -a /etc/rabbitmq/rabbitmq.conf

八、备份与恢复

1. 配置文件备份

备份配置

sudo cp -r /etc/rabbitmq/ /backup/rabbitmq_config_$(date +%Y%m%d)

sudo cp -r /var/lib/rabbitmq/ /backup/rabbitmq_data_$(date +%Y%m%d)

2. 导出定义(队列、交换器等)

导出所有定义

sudo rabbitmqctl export_definitions /backup/rabbitmq_definitions_$(date +%Y%m%d).json

导入定义

sudo rabbitmqctl import_definitions /backup/rabbitmq_definitions_20240101.json

安装验证脚本

创建验证脚本:

cat > /tmp/verify_rabbitmq.sh << 'EOF'

#!/bin/bash

echo "=== RabbitMQ单节点安装验证 ==="

echo "1. 检查服务状态..."

sudo systemctl is-active rabbitmq-server

echo "2. 检查端口监听..."

sudo netstat -tlnp | grep -E ':5672|:15672'

echo "3. 检查节点状态..."

sudo rabbitmqctl status | grep -A5 "os_mon"

echo "4. 检查管理插件..."

sudo rabbitmq-plugins list | grep management

echo "5. 验证用户..."

sudo rabbitmqctl list_users

echo "=== 验证完成 ==="

EOF

chmod +x /tmp/verify_rabbitmq.sh

/tmp/verify_rabbitmq.sh

单节点配置已经完成,适用于开发、测试和学习环境。如果要迁移到生产环境,需要考虑:

  1. 配置SSL/TLS加密通信

  2. 设置更严格的安全策略

  3. 配置监控和告警

  4. 规划备份策略

如果需要为生产环境配置多节点集群(如镜像队列或仲裁队列)

相关推荐
Overt0p17 小时前
抽奖系统(6)
java·spring boot·redis·设计模式·rabbitmq·状态模式
Java 码农17 小时前
RabbitMQ集群部署方案及配置指南04
分布式·rabbitmq
郝学胜-神的一滴17 小时前
深入理解Linux中的Try锁机制
linux·服务器·开发语言·c++·程序人生
Java后端的Ai之路17 小时前
【AutoDL算力平台】-MobaXterm 连接 AutoDL 并上传文件资源(图文 + 实操)
服务器·网络·mobaxterm·autodl算力平台
独自破碎E17 小时前
在RabbitMQ中,怎么确保消息不会丢失?
分布式·rabbitmq
阿巴~阿巴~17 小时前
NAT技术:互联网连接的隐形桥梁
服务器·网络·网络协议·架构·智能路由器·nat·正反向代理
Java 码农17 小时前
RabbitMQ集群部署方案及配置指南02
分布式·rabbitmq
DevOps-IT17 小时前
HTTP状态码(常见 HTTP Status Code 查询)
运维·服务器·网络·网络协议·http
sim202017 小时前
把etcd分区挂到SSD盘
linux·etcd