Linux环境下RabbitMQ集群搭建步骤
小樊
46
2025-12-26 11:34:03
Linux环境下RabbitMQ集群搭建步骤
一 环境准备与版本选择
- 准备至少3台 Linux 主机(同一网段,建议内网互通),安装相同版本的 Erlang 与 RabbitMQ,并确保版本兼容(参考官方兼容矩阵)。
- 统一主机名与解析:设置每台机器的 /etc/hostname 与 /etc/hosts,保证节点间可用短主机名互相解析(如:192.168.10.11 rabbit1、192.168.10.12 rabbit2、192.168.10.13 rabbit3)。
- 开放必要端口或临时关闭防火墙(生产环境建议精细放通):4369(Erlang 端口映射/发现)、5672(AMQP)、15672(管理 UI)、25672(节点间通信)。
二 安装与基础配置
- 安装方式(二选一或按发行版选择):
- Ubuntu/Debian:sudo apt update && sudo apt install -y rabbitmq-server
- CentOS/RHEL:sudo yum install -y rabbitmq-server
- 启用管理插件(可选,便于可视化管理):sudo rabbitmq-plugins enable rabbitmq_management
- 配置远程登录:编辑 /etc/rabbitmq/rabbitmq.config,将 {loopback_users, []} 以合适方式配置(或按需添加特定用户到回环白名单),保存后重启服务。
- 自定义数据与日志目录(可选):创建目录并赋权,然后在 /etc/rabbitmq/rabbitmq-env.conf 中设置
- RABBITMQ_MNESIA_BASE=/data/rabbitmq/data
- RABBITMQ_LOG_BASE=/data/rabbitmq/logs
重启服务生效。
三 集群搭建关键步骤
- 统一 Erlang Cookie(节点间认证关键):
- Cookie 常见路径:$HOME/.erlang.cookie 或 /var/lib/rabbitmq/.erlang.cookie;所有节点必须完全一致。
- 建议用 scp/rsync 从一台节点分发到其他节点,并设置权限为 400、属主为 rabbitmq:rabbitmq。
- 启动各节点应用:
- 方式一(推荐 systemd):sudo systemctl start rabbitmq-server
- 方式二(直接启动):rabbitmq-server -detached
- 组建集群(以 rabbit1 为种子节点,在 rabbit2/rabbit3 上执行):
- rabbitmqctl stop_app
- rabbitmqctl reset(如需清空本地数据)
- rabbitmqctl join_cluster rabbit@rabbit1(节点名格式为“rabbit@主机名”)
- rabbitmqctl start_app
- 验证集群状态:rabbitmqctl cluster_status,应能看到所有节点及运行状态。
四 高可用与运维要点
- 高可用队列:
- 经典镜像队列(策略方式,适合存量应用):
- 启用策略:rabbitmqctl set_policy ha-all “^” ‘{“ha-mode”:“all”}’(将“^”匹配的所有队列镜像到所有节点)。
- Quorum 队列(推荐,RabbitMQ 3.8+):创建队列时设置 x-queue-type=quorum,具备更强的复制一致性与故障恢复能力。
- 用户与权限:
- 创建管理员并赋权(示例):
- rabbitmqctl add_user admin StrongPass!
- rabbitmqctl set_user_tags admin administrator
- rabbitmqctl set_permissions -p “/” admin “." ".” “.*”
- 注意:guest/guest 默认仅允许本地登录,远程访问需创建新用户。
- 常用运维命令:
- 查看状态:rabbitmqctl cluster_status
- 停止/启动应用:rabbitmqctl stop_app / rabbitmqctl start_app
- 重置节点:rabbitmqctl reset(清数据,谨慎)
- 查看节点名:rabbitmqctl status | grep “Node name”
五 常见问题排查
- 节点无法加入集群:
- 检查 /etc/hosts 与主机名是否一致、网络是否互通;
- 核对 .erlang.cookie 内容、权限(400)与属主是否一致;
- 确保 4369/25672/5672 等端口未被拦截。
- 管理界面无法远程登录:
- 确认已启用 rabbitmq_management;
- 检查 loopback_users 配置与新建用户权限是否正确。
- 端口冲突(单机多实例):
- 通过 rabbitmq-env.conf / rabbitmq.conf 调整节点端口或改用不同主机部署。