一、RabbitMQ 简介
RabbitMQ 是基于 Erlang 实现的开源消息中间件,支持多种协议(AMQP、MQTT 等),广泛应用于异步通信、消息队列、事件驱动等场景。
二、安装前准备
-
Erlang 环境
RabbitMQ 基于 Erlang 语言,需要先安装 Erlang。 -
操作系统
支持 Linux(Ubuntu、CentOS 等)、Windows、macOS。
三、Linux 下安装(以 Ubuntu 为例)
1. 安装 Erlang
sudo apt-get update
sudo apt-get install erlang -y
建议使用 RabbitMQ 官方推荐的 Erlang 版本,或通过 Erlang Solutions 仓库安装最新版本。
2. 添加 RabbitMQ 仓库并安装
# 导入签名
wget -O- https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey | sudo apt-key add -
# 添加仓库
sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF
deb https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu/ $(lsb_release -cs) main
EOF
sudo apt-get update
# 安装 RabbitMQ
sudo apt-get install rabbitmq-server -y
3. 启动 RabbitMQ 服务
sudo systemctl enable rabbitmq-server
sudo systemctl start rabbitmq-server
4. 开启管理界面插件
sudo rabbitmq-plugins enable rabbitmq_management
5. 访问管理界面
- 浏览器访问:http://服务器IP:15672
- 默认账号:guest
- 默认密码:guest
注意:guest/guest 只能本地访问,建议新建用户用于远程访问。
四、Windows 下安装
1. 安装 Erlang
- 下载 Erlang 安装包:Erlang 官网
- 安装并配置环境变量
ERLANG_HOME
2. 安装 RabbitMQ
- 下载 RabbitMQ 安装包:RabbitMQ 官网
- 安装 RabbitMQ
3. 启动 RabbitMQ
- 通过命令行进入 RabbitMQ sbin 目录,运行:
rabbitmq-server.bat
4. 启用管理插件
rabbitmq-plugins.bat enable rabbitmq_management
5. 访问管理界面
- 浏览器访问:http://localhost:15672
五、常用管理命令
# 添加用户
rabbitmqctl add_user 用户名 密码
# 设置用户角色(如管理员)
rabbitmqctl set_user_tags 用户名 administrator
# 设置权限
rabbitmqctl set_permissions -p / 用户名 ".*" ".*" ".*"
# 查看所有用户
rabbitmqctl list_users
# 查看所有队列
rabbitmqctl list_queues
# 停止 RabbitMQ 服务
sudo systemctl stop rabbitmq-server
六、常见问题
-
端口占用
- 默认端口:5672(AMQP),15672(管理界面),25672(集群通信)。
- 防火墙需放行相关端口。
-
远程访问 guest 用户失败
- guest 用户默认仅允许本地登录,建议新建用户。
-
Erlang 版本不兼容
- 请参考 RabbitMQ 官网的 Erlang 兼容性说明。
七、卸载 RabbitMQ
sudo apt-get remove rabbitmq-server
sudo apt-get purge rabbitmq-server
sudo apt-get autoremove
八、RabbitMQ 集群部署详解(以 3 节点为例)
RabbitMQ 支持多种集群模式,最常用的是普通集群(所有节点存储元数据,消息只存储在队列主节点上)。
1. 集群部署前准备
- 每台服务器都需安装 Erlang 和 RabbitMQ,版本需一致。
- 各节点之间网络需互通,建议关闭防火墙或开放端口(5672、15672、25672、4369)。
- 各节点主机名需可解析(推荐配置 /etc/hosts)。
2. 安装并启动 RabbitMQ(三台机器都操作)
略,参考前文安装步骤。
3. 配置 Cookie 文件(集群认证)
RabbitMQ 节点间通过 .erlang.cookie 文件认证,需保证三台机器的 cookie 内容一致。
# 假设主节点为 rabbit1,其它节点 rabbit2、rabbit3
# 在 rabbit1 上查看 cookie
cat /var/lib/rabbitmq/.erlang.cookie
# 将该文件内容复制到 rabbit2、rabbit3,并确保权限为 400
sudo scp /var/lib/rabbitmq/.erlang.cookie rabbit2:/var/lib/rabbitmq/.erlang.cookie
sudo scp /var/lib/rabbitmq/.erlang.cookie rabbit3:/var/lib/rabbitmq/.erlang.cookie
sudo chmod 400 /var/lib/rabbitmq/.erlang.cookie
4. 加入集群
假设 rabbit1 为主节点,rabbit2、rabbit3 为从节点。
在 rabbit2、rabbit3 上执行:
# 停止应用但不关闭服务
sudo rabbitmqctl stop_app
# 加入集群
sudo rabbitmqctl join_cluster rabbit@rabbit1
# 启动应用
sudo rabbitmqctl start_app
注意:
rabbit@rabbit1这里的rabbit1必须是主机名,且各节点主机名需可互相解析。
5. 验证集群状态
在任意节点上:
sudo rabbitmqctl cluster_status
6. 集群高可用(镜像队列)
普通集群只有队列元数据同步,消息只在主节点。镜像队列可配置消息多节点同步,提升高可用。
# 在管理界面或命令行设置策略
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
九、RabbitMQ Docker 部署
1. 拉取官方镜像
docker pull rabbitmq:3-management
2. 启动容器
docker run -d --name rabbitmq \
-p 5672:5672 -p 15672:15672 \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=admin \
rabbitmq:3-management
- 管理界面:http://localhost:15672
- 默认账号密码:admin/admin
3. 持久化数据
docker run -d --name rabbitmq \
-p 5672:5672 -p 15672:15672 \
-v /my/rabbitmq/data:/var/lib/rabbitmq \
-v /my/rabbitmq/log:/var/log/rabbitmq \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=admin \
rabbitmq:3-management
十、RabbitMQ 高级配置
1. 配置文件位置
- Linux:
/etc/rabbitmq/rabbitmq.conf或/etc/rabbitmq/rabbitmq.config - Windows:
%APPDATA%\RabbitMQ\rabbitmq.conf - Docker: 可通过挂载配置文件
2. 常用配置项示例
# rabbitmq.conf 示例
listeners.tcp.default = 5672
management.listener.port = 15672
loopback_users.guest = false # 允许 guest 用户远程访问
default_user = admin
default_pass = admin
3. 集群节点自动发现与分布式配置
可结合 Consul、etcd 等服务发现工具,实现自动化集群节点发现。
十一、RabbitMQ 运维建议
- 监控
- 推荐使用 Prometheus + Grafana,RabbitMQ 支持导出监控指标。
- 定期备份
- 元数据可用
rabbitmqctl export_definitions导出。
- 元数据可用
- 安全加固
- 禁用 guest 用户远程访问,强密码,开启 SSL。
- 日志管理
- 日志默认在
/var/log/rabbitmq/,可定期轮转。
- 日志默认在
- 升级兼容性
- 升级前先查 Erlang 和 RabbitMQ 兼容性,避免服务中断。
十二、常见集群问题及解决
- 节点无法加入集群
- 检查
.erlang.cookie是否一致,主机名能否解析。
- 检查
- 消息丢失
- 普通队列主节点宕机会丢失消息,需配置镜像队列。
- 磁盘报警(disk_free_limit)
- 默认磁盘空间不足会阻塞生产者,可调节
disk_free_limit。
- 默认磁盘空间不足会阻塞生产者,可调节
十三、RabbitMQ 在 Kubernetes 上的部署
1. 使用官方 Helm Chart 部署(推荐)
Helm 是 K8s 下主流的包管理工具,RabbitMQ 官方提供了 Helm Chart。
(1)安装 Helm
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
(2)添加 RabbitMQ 仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
(3)部署 RabbitMQ
helm install my-rabbitmq bitnami/rabbitmq
(4)查看服务信息
kubectl get all -l app.kubernetes.io/name=rabbitmq
(5)获取默认账号密码
kubectl get secret --namespace default my-rabbitmq -o jsonpath="{.data.rabbitmq-password}" | base64 --decode
(6)访问管理界面
- 默认管理端口 15672,可以通过端口映射或 Ingress 访问。
kubectl port-forward svc/my-rabbitmq 15672:15672
- 浏览器访问:http://localhost:15672
(7)自定义配置(values.yaml)
可以通过自定义 values.yaml 文件设置副本数、持久化存储、资源限制等:
replicaCount: 3
auth:
username: admin
password: admin123
persistence:
enabled: true
storageClass: "fast"
size: 8Gi
resources:
requests:
memory: 512Mi
cpu: 250m
limits:
memory: 1Gi
cpu: 500m
部署时使用:
helm install my-rabbitmq -f values.yaml bitnami/rabbitmq
十四、RabbitMQ 常用插件扩展
RabbitMQ 提供丰富的插件扩展,常用如下:
-
rabbitmq_management
- 管理界面,默认已启用。
-
rabbitmq_shovel / rabbitmq_shovel_management
- 实现跨节点、跨集群的数据同步和消息搬运。
-
rabbitmq_federation / rabbitmq_federation_management
- 联邦插件,支持跨集群消息转发,适合多数据中心部署。
-
rabbitmq_delayed_message_exchange
- 支持延迟消息队列,官方插件。
启用命令(Linux):
rabbitmq-plugins enable rabbitmq_delayed_message_exchange -
rabbitmq_prometheus
- 支持 Prometheus 监控采集。
-
rabbitmq_mqtt / rabbitmq_web_mqtt
- 支持 MQTT 协议,适合物联网场景。
-
rabbitmq_stomp
- 支持 STOMP 协议。
十五、RabbitMQ 性能优化建议
-
合理配置磁盘和内存
- 推荐 SSD,内存至少 2GB 以上。
- 配置磁盘报警阈值
disk_free_limit,避免服务阻塞。
-
连接数和并发优化
- 调整
vm_memory_high_watermark(内存水位线),避免因内存不足导致拒绝连接。 - 设置合理的 channel、connection 数量,避免资源耗尽。
- 调整
-
消息持久化
- 队列和消息设置为持久化(durable/persistent),防止数据丢失。
- 但持久化会影响性能,需权衡。
-
合理使用镜像队列
- 镜像队列提高高可用,但会增加网络和磁盘压力,建议只对关键队列设置。
-
监控与告警
- 使用 Prometheus、Grafana 监控 RabbitMQ 性能指标。
- 关注队列堆积、连接数、磁盘、内存等。
十六、RabbitMQ 故障排查思路
-
服务无法启动
- 查看日志
/var/log/rabbitmq/或docker logs rabbitmq - 检查 Erlang 版本兼容性
- 查看日志
-
节点无法加入集群
- 检查
.erlang.cookie是否一致 - 检查主机名解析和网络连通
- 检查
-
消息丢失或堆积
- 检查队列是否持久化
- 检查消费者是否正常消费
- 关注磁盘空间和内存
-
管理界面无法访问
- 检查端口映射与防火墙
- 检查管理插件是否启用
-
性能瓶颈
- 检查磁盘、内存、CPU
- 检查消息速率与队列堆积
- 关注网络延迟
十七、RabbitMQ 生产环境运维建议
- 定期备份元数据与配置
- 定期清理无用队列和消息
- 强制使用安全连接(TLS/SSL)
- 权限细分,禁用 guest 用户远程访问
- 升级前先在测试环境验证 Erlang/RabbitMQ 兼容性
1万+






