rabbitmq集群功能使用
RabbitMQ 集群搭建完整指南(阿里云Linux3/CentOS8通用)
RabbitMQ 集群用于实现高可用、负载均衡和故障转移,核心是基于 Erlang 分布式特性,所有节点共享元数据(队列、交换机、绑定关系),但消息仅存储在创建它的节点上(镜像队列除外)。
前置准备(必做)
1. 基础环境要求
- 准备 3台阿里云Linux3/CentOS8服务器(建议配置:2核4G以上,公网IP)
- 所有节点已安装相同版本的 RabbitMQ(建议 3.12+ 稳定版)
- 所有节点关闭防火墙或放行
4369(Erlang 集群端口)、25672(RabbitMQ 集群通信端口)、5672(客户端通信)、15672(管理后台) 所有节点的
/etc/hosts配置相互解析:# 在所有节点执行,替换为你的3台服务器IP cat >> /etc/hosts << EOF 192.168.1.100 rabbitmq-node1 192.168.1.101 rabbitmq-node2 192.168.1.102 rabbitmq-node3 EOF
2. 同步 Erlang Cookie(核心关键)
RabbitMQ 依赖 Erlang Cookie 进行节点认证,所有节点的 Cookie 必须完全一致:
# 在节点1(主节点)查看当前Cookie
cat /var/lib/rabbitmq/.erlang.cookie
# 将节点1的Cookie复制到节点2、节点3
# 在节点2、3执行,替换为节点1的Cookie值
echo "你的节点1Cookie值" > /var/lib/rabbitmq/.erlang.cookie
chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
chmod 400 /var/lib/rabbitmq/.erlang.cookie
# 所有节点重启RabbitMQ使Cookie生效
systemctl restart rabbitmq-server步骤1:启动所有节点并启用管理插件
在 所有节点 执行以下命令:
# 启用管理后台插件
rabbitmq-plugins enable rabbitmq_management
# 启动RabbitMQ服务并设置开机自启
systemctl start rabbitmq-server
systemctl enable rabbitmq-server步骤2:搭建普通集群(无镜像队列)
1. 在节点2、3上加入节点1的集群
# 节点2执行:
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@rabbitmq-node1
rabbitmqctl start_app
# 节点3执行:
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@rabbitmq-node1
rabbitmqctl start_app2. 验证集群状态
在任意节点执行:
rabbitmqctl cluster_status输出中 running_nodes 包含所有节点(rabbit@rabbitmq-node1、rabbit@rabbitmq-node2、rabbit@rabbitmq-node3)即成功。
步骤3:配置镜像队列(高可用核心)
普通集群仅共享元数据,消息只存于创建它的节点,节点宕机则消息丢失。镜像队列会将消息同步到多个节点,实现高可用:
# 在任意节点执行,设置镜像队列策略
# 策略名称:ha-all
# 匹配所有队列(^.*)
# 同步到所有节点(ha-mode=all)
rabbitmqctl set_policy ha-all "^.*" '{"ha-mode":"all","ha-sync-mode":"automatic"}'ha-mode=all:消息同步到所有集群节点(适合3节点集群)ha-sync-mode=automatic:自动同步队列数据到新加入的节点
步骤4:配置负载均衡(公网访问)
公网客户端需要通过负载均衡访问集群,推荐使用 Nginx 或 阿里云SLB:
Nginx 负载均衡配置示例
stream {
upstream rabbitmq_cluster {
server 192.168.1.100:5672 weight=1;
server 192.168.1.101:5672 weight=1;
server 192.168.1.102:5672 weight=1;
}
server {
listen 5672;
proxy_pass rabbitmq_cluster;
proxy_timeout 30s;
}
}客户端连接 Nginx_IP:5672 即可实现负载均衡。
步骤5:集群运维常用命令
# 查看集群状态
rabbitmqctl cluster_status
# 节点退出集群(在要退出的节点执行)
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
# 移除集群中的节点(在其他节点执行)
rabbitmqctl forget_cluster_node rabbit@rabbitmq-node3
# 查看镜像队列策略
rabbitmqctl list_policies
# 添加新节点到集群
rabbitmqctl join_cluster rabbit@rabbitmq-node1 --ram # 可选:设置为内存节点(仅存储元数据,适合高并发场景)常见问题排查
节点无法加入集群
- 检查 Erlang Cookie 是否完全一致
- 检查
4369、25672端口是否放行 - 检查
/etc/hosts配置是否正确 - 确保所有节点的 RabbitMQ 版本一致
镜像队列不同步
- 检查策略是否正确应用:
rabbitmqctl list_policies - 确保节点间网络通畅,无防火墙拦截
- 重启节点后重新设置策略
管理后台无法查看集群节点
- 确保所有节点启用了
rabbitmq_management插件 - 检查
15672端口是否放行 - 访问任意节点的管理后台即可查看整个集群状态
版权属于:Joyber
本文链接:https://blog.qqvbc.com/default/1412.html
转载时须注明出处及本声明