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版本过低而失败。
通用前置步骤
在配置任何集群前,请先在所有节点上完成:
-
安装Erlang和RabbitMQ:从RabbitMQ官方仓库安装。
-
同步主机名与Cookie:
-
确保
/etc/hosts能解析所有节点主机名(如node1,node2,node3)。 -
确保所有节点的Erlang Cookie (
/var/lib/rabbitmq/.erlang.cookie) 内容完全一致 ,权限设为400。
-
-
开放防火墙端口 :放行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://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. 管理界面功能验证
在管理界面中检查:
-
Overview(概览):确认节点状态为"running"
-
Connections(连接):当前应为0连接
-
Queues(队列):当前应为0队列
-
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
单节点配置已经完成,适用于开发、测试和学习环境。如果要迁移到生产环境,需要考虑:
-
配置SSL/TLS加密通信
-
设置更严格的安全策略
-
配置监控和告警
-
规划备份策略
如果需要为生产环境配置多节点集群(如镜像队列或仲裁队列)