RabbitMQ集群Ubuntu如何搭建
导读:Ubuntu 上搭建 RabbitMQ 集群实操指南 一 环境准备与前置条件 准备至少 3 台 Ubuntu 22.04/20.04 服务器,建议在同一局域网,主机名唯一(如:rmq1、rmq2、rmq3),并相互可解析(推荐在每台机器的...
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 <
StrongPassword>
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://< HAProxy_IP> :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)。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: RabbitMQ集群Ubuntu如何搭建
本文地址: https://pptw.com/jishu/755352.html
