Linux 上搭建 RabbitMQ 集群的标准流程
一 环境准备与版本兼容
- 准备至少 3 台 Linux 服务器(同一网段,建议内网互通),安装相同版本的 Erlang 与 RabbitMQ,并确认版本兼容(参考官方兼容矩阵)。
- 建议统一主机名并配置 /etc/hosts 解析,例如:
192.168.1.11 rabbit1
192.168.1.12 rabbit2
192.168.1.13 rabbit3
- 开放必要端口或临时关闭防火墙/SELinux:
- 4369(Erlang 端口映射/发现)
- 5672(AMQP 客户端)
- 15672(管理插件 Web)
- 25672(节点间通信)
- 安装方式示例:
- Ubuntu/Debian:sudo apt update && sudo apt install rabbitmq-server
- CentOS/RHEL:sudo yum install rabbitmq-server
- 启用管理插件(可选,便于可视化管理):sudo rabbitmq-plugins enable rabbitmq_management。
二 统一 Erlang Cookie 与节点加入
- 在所有节点确保 Erlang Cookie 一致(同一字符串),Cookie 文件常见路径:
- /var/lib/rabbitmq/.erlang.cookie
- 或 ~/.erlang.cookie
- 建议用安全方式复制 Cookie 并设置权限:
- scp /var/lib/rabbitmq/.erlang.cookie user@node2:/var/lib/rabbitmq/.erlang.cookie
- chmod 400 /var/lib/rabbitmq/.erlang.cookie
- chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
- 启动各节点服务:
- systemctl 方式:sudo systemctl start rabbitmq-server
- 或后台启动:rabbitmq-server -detached
- 将节点加入集群(以 rabbit1 为主节点,在 rabbit2/rabbit3 执行):
- rabbitmqctl stop_app
- rabbitmqctl reset
- rabbitmqctl join_cluster rabbit@rabbit1(如需内存节点:join_cluster --ram rabbit@rabbit1)
- rabbitmqctl start_app
- 查看集群状态:rabbitmqctl cluster_status(应能看到所有节点的 disc/ram 类型与运行状态)。
三 高可用与运维要点
- 创建管理员用户(在任一节点执行即可,集群内自动同步):
- rabbitmqctl add_user admin StrongPass!
- rabbitmqctl set_user_tags admin administrator
- rabbitmqctl set_permissions -p “/” admin “." ".” “.*”
- 启用镜像队列(HA,示例为对所有队列全量镜像):
- rabbitmqctl set_policy ha-all “^” ‘{“ha-mode”:“all”}’
- 节点维护与退出:
- 节点主动离开:rabbitmqctl stop_app → rabbitmqctl reset → rabbitmqctl start_app
- 主节点剔除故障节点:rabbitmqctl forget_cluster_node rabbit@nodeX
- 数据目录与日志(可选,便于独立存储与排障):
- 在 /etc/rabbitmq/rabbitmq-env.conf 中设置:
RABBITMQ_MNESIA_BASE=/data/rabbitmq/data
RABBITMQ_LOG_BASE=/data/rabbitmq/logs
- 重启服务后生效。
四 快速验证与常见问题
- 验证清单:
- 管理界面:访问 http://任一节点IP:15672,使用新建管理员登录,查看 Nodes 页面是否全量在线。
- 集群状态:rabbitmqctl cluster_status 输出包含 running_nodes、disk_nodes/ram_nodes 且无分区告警。
- 连通性:客户端连接 5672 端口能正常发布/消费。
- 常见问题与处理:
- 节点无法加入集群:检查 /etc/hosts 解析、主机名一致、Cookie 一致且权限为 400、相关端口开放。
- 管理界面无法登录:默认 guest/guest 仅允许本机登录,需创建远程管理员账户。
- 节点类型调整:先 rabbitmqctl stop_app,再 rabbitmqctl change_cluster_node_type disc|ram,最后 start_app。
- 跨网段/高延迟网络:集群稳定性与分区处理会变差,建议同机房部署并使用镜像队列提升可用性。