RabbitMQ安装部署

一、RabbitMQ 简介

RabbitMQ 是基于 Erlang 实现的开源消息中间件,支持多种协议(AMQP、MQTT 等),广泛应用于异步通信、消息队列、事件驱动等场景。


二、安装前准备

  1. Erlang 环境
    RabbitMQ 基于 Erlang 语言,需要先安装 Erlang。

  2. 操作系统
    支持 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. 访问管理界面

注意:guest/guest 只能本地访问,建议新建用户用于远程访问。


四、Windows 下安装

1. 安装 Erlang

  • 下载 Erlang 安装包:Erlang 官网
  • 安装并配置环境变量 ERLANG_HOME

2. 安装 RabbitMQ

3. 启动 RabbitMQ

  • 通过命令行进入 RabbitMQ sbin 目录,运行:
rabbitmq-server.bat

4. 启用管理插件

rabbitmq-plugins.bat enable rabbitmq_management

5. 访问管理界面


五、常用管理命令

# 添加用户
rabbitmqctl add_user 用户名 密码

# 设置用户角色(如管理员)
rabbitmqctl set_user_tags 用户名 administrator

# 设置权限
rabbitmqctl set_permissions -p / 用户名 ".*" ".*" ".*"

# 查看所有用户
rabbitmqctl list_users

# 查看所有队列
rabbitmqctl list_queues

# 停止 RabbitMQ 服务
sudo systemctl stop rabbitmq-server

六、常见问题

  1. 端口占用

    • 默认端口:5672(AMQP),15672(管理界面),25672(集群通信)。
    • 防火墙需放行相关端口。
  2. 远程访问 guest 用户失败

    • guest 用户默认仅允许本地登录,建议新建用户。
  3. 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

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 运维建议

  1. 监控
    • 推荐使用 Prometheus + Grafana,RabbitMQ 支持导出监控指标。
  2. 定期备份
    • 元数据可用 rabbitmqctl export_definitions 导出。
  3. 安全加固
    • 禁用 guest 用户远程访问,强密码,开启 SSL。
  4. 日志管理
    • 日志默认在 /var/log/rabbitmq/,可定期轮转。
  5. 升级兼容性
    • 升级前先查 Erlang 和 RabbitMQ 兼容性,避免服务中断。

十二、常见集群问题及解决

  1. 节点无法加入集群
    • 检查 .erlang.cookie 是否一致,主机名能否解析。
  2. 消息丢失
    • 普通队列主节点宕机会丢失消息,需配置镜像队列。
  3. 磁盘报警(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
(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 提供丰富的插件扩展,常用如下:

  1. rabbitmq_management

    • 管理界面,默认已启用。
  2. rabbitmq_shovel / rabbitmq_shovel_management

    • 实现跨节点、跨集群的数据同步和消息搬运。
  3. rabbitmq_federation / rabbitmq_federation_management

    • 联邦插件,支持跨集群消息转发,适合多数据中心部署。
  4. rabbitmq_delayed_message_exchange

    • 支持延迟消息队列,官方插件。

    启用命令(Linux):

    rabbitmq-plugins enable rabbitmq_delayed_message_exchange
    
  5. rabbitmq_prometheus

    • 支持 Prometheus 监控采集。
  6. rabbitmq_mqtt / rabbitmq_web_mqtt

    • 支持 MQTT 协议,适合物联网场景。
  7. rabbitmq_stomp

    • 支持 STOMP 协议。

十五、RabbitMQ 性能优化建议

  1. 合理配置磁盘和内存

    • 推荐 SSD,内存至少 2GB 以上。
    • 配置磁盘报警阈值 disk_free_limit,避免服务阻塞。
  2. 连接数和并发优化

    • 调整 vm_memory_high_watermark(内存水位线),避免因内存不足导致拒绝连接。
    • 设置合理的 channel、connection 数量,避免资源耗尽。
  3. 消息持久化

    • 队列和消息设置为持久化(durable/persistent),防止数据丢失。
    • 但持久化会影响性能,需权衡。
  4. 合理使用镜像队列

    • 镜像队列提高高可用,但会增加网络和磁盘压力,建议只对关键队列设置。
  5. 监控与告警

    • 使用 Prometheus、Grafana 监控 RabbitMQ 性能指标。
    • 关注队列堆积、连接数、磁盘、内存等。

十六、RabbitMQ 故障排查思路

  1. 服务无法启动

    • 查看日志 /var/log/rabbitmq/ 或 docker logs rabbitmq
    • 检查 Erlang 版本兼容性
  2. 节点无法加入集群

    • 检查 .erlang.cookie 是否一致
    • 检查主机名解析和网络连通
  3. 消息丢失或堆积

    • 检查队列是否持久化
    • 检查消费者是否正常消费
    • 关注磁盘空间和内存
  4. 管理界面无法访问

    • 检查端口映射与防火墙
    • 检查管理插件是否启用
  5. 性能瓶颈

    • 检查磁盘、内存、CPU
    • 检查消息速率与队列堆积
    • 关注网络延迟

十七、RabbitMQ 生产环境运维建议

  • 定期备份元数据与配置
  • 定期清理无用队列和消息
  • 强制使用安全连接(TLS/SSL)
  • 权限细分,禁用 guest 用户远程访问
  • 升级前先在测试环境验证 Erlang/RabbitMQ 兼容性
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猩火燎猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值