阅读量:0
Ubuntu 上搭建 RabbitMQ 集群实操指南
一 环境准备与前置条件
- 准备至少 3 台 Ubuntu 22.04/20.04 服务器,建议在同一局域网,主机名唯一(如:rmq1、rmq2、rmq3),并相互可解析(推荐在每台机器的 /etc/hosts 写入 IP 与主机名映射)。
- 安装匹配的 Erlang/OTP 与 RabbitMQ 版本,生产环境建议各节点版本完全一致。
- 开放必要端口:5672(AMQP)、15672(管理插件)、25672(集群通信/节点间通信)。
- 建议创建专用管理用户,避免使用默认 guest/guest(默认仅允许本机访问)。
二 安装与基础配置
- 安装 Erlang 与 RabbitMQ(Ubuntu 推荐使用官方 APT 仓库):
# 更新索引
sudo apt update
# 安装 Erlang(版本需与 RabbitMQ 兼容)
sudo apt install -y erlang-nox
# 导入 RabbitMQ 仓库密钥与源(示例为 Ubuntu 20.04 focal;若为 22.04,请将 focal 替换为 jammy)
curl -sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" \
| sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://ppa.launchpad.net/rabbitmq/rabbitmq-erlang/ubuntu focal main" \
| sudo tee /etc/apt/sources.list.d/rabbitmq.list
echo "deb [signed-by=/usr/share/keyrefs/com.rabbitmq.team.gpg] https://ppa.launchpad.net/rabbitmq/rabbitmq-server/ubuntu focal main" \
| sudo tee -a /etc/apt/sources.list.d/rabbitmq.list
sudo apt update
sudo apt install -y rabbitmq-server
- 启用管理插件(便于 Web 可视化管理与监控):
sudo rabbitmq-plugins enable rabbitmq_management
- 防火墙放行(如使用 UFW):
sudo ufw allow 5672/tcp
sudo ufw allow 15672/tcp
sudo ufw allow 25672/tcp
sudo ufw enable
- 创建管理员用户(示例用户名为 admin,密码自定义):
sudo rabbitmqctl add_user admin
sudo rabbitmqctl set_user_tags admin administrator
sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
- 注意:默认 guest/guest 仅允许从 localhost 登录,远程管理请使用自建管理员账户。
三 集群搭建步骤
- 统一 Erlang Cookie(节点间认证密钥,必须一致):
- 选择一台作为种子节点(如 rmq1),将它的 Cookie 复制到其它节点,保持文件权限为 400,属主为 rabbitmq:rabbitmq。
- Cookie 默认路径:/var/lib/rabbitmq/.erlang.cookie。
- 操作示例(在 rmq2 上执行,从 rmq1 拷贝):
sudo systemctl stop rabbitmq-server
sudo scp rmq1:/var/lib/rabbitmq/.erlang.cookie /var/lib/rabbitmq/.erlang.cookie
sudo chmod 400 /var/lib/rabbitmq/.erlang.cookie
sudo chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
sudo systemctl start rabbitmq-server
- 将节点加入集群(在待加入节点上执行,示例以 rmq2 加入 rmq1):
# 仅停止应用层,不终止 Erlang 节点
sudo rabbitmqctl stop_app
# 重置节点元数据(首次加入或清库时使用)
sudo rabbitmqctl reset
# 加入集群(默认以磁盘节点加入;如需内存节点,追加 --ram)
sudo rabbitmqctl join_cluster rabbit@rmq1
# 启动应用
sudo rabbitmqctl start_app
- 验证集群状态(在任意节点执行):
sudo rabbitmqctl cluster_status
- 节点类型说明:未指定 –ram 为 磁盘节点(disc),指定后为 内存节点(ram);通常建议至少保留 1 个磁盘节点 以持久化元数据。
四 高可用与负载均衡
- 镜像队列(队列数据多副本,提升可用性):
- 在任意节点设置策略,将队列镜像到所有节点(示例为匹配所有队列):
sudo rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
- 也可按业务前缀精细化策略,例如仅镜像以 ^my_queue$ 开头的队列。
- 负载均衡(以 HAProxy 为例,提供 AMQP 与管理面的统一入口):
- 安装 HAProxy:sudo apt install -y haproxy
- 示例配置片段(/etc/haproxy/haproxy.cfg):
frontend rabbitmq-amqp
bind *:5672
default_backend rabbitmq_nodes
backend rabbitmq_nodes
balance roundrobin
server rmq1 192.168.1.11:5672 check
server rmq2 192.168.1.12:5672 check
server rmq3 192.168.1.13:5672 check
frontend rabbitmq-mgmt
bind *:15672
default_backend rabbitmq_mgmt_nodes
backend rabbitmq_mgmt_nodes
balance roundrobin
server rmq1 192.168.1.11:15672 check
server rmq2 192.168.1.12:15672 check
server rmq3 192.168.1.13:15672 check
- 重启 HAProxy:sudo systemctl restart haproxy
- 访问管理界面:打开浏览器访问 http://
:15672 ,使用前述 admin 账户登录。
五 常见问题与排查
- 节点无法加入集群
- 检查各节点 Erlang Cookie 是否完全一致(路径与权限),以及 /etc/hosts 或 DNS 是否能正确解析节点名(形如 rabbit@rmq1)。
- 确保 防火墙/安全组 已放行 5672/15672/25672。
- 加入前在目标节点执行 stop_app + reset,再 join_cluster,最后 start_app。
- 版本不一致导致异常
- 生产环境务必保证所有节点的 RabbitMQ 与 Erlang/OTP 版本一致。
- 管理界面无法远程登录
- 默认 guest/guest 仅限本机;请使用自建管理员账户,并确保访问端口 15672 已放行。
- 单机多实例端口冲突
- 如需在一台机器上模拟多节点,需通过环境变量设置不同的 RABBITMQ_NODE_PORT 与 RABBITMQ_NODENAME,并为管理插件指定不同端口(如 15673/15674)。
以上就是关于“RabbitMQ集群Ubuntu如何搭建”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm