Docker 搭建 RabbitMQ 集群步骤
以下是使用 Docker 快速搭建 RabbitMQ 集群的详细步骤,包含配置文件、网络设置和集群组建过程。
1. 创建自定义网络
首先创建一个 Docker 网络,使容器间可以通过名称互相访问:
docker network create rabbitmq-cluster
2. 准备配置文件
创建一个配置目录(例如 ~/rabbitmq-config
),并在其中创建以下文件:
rabbitmq.conf
(所有节点共用)
loopback_users.guest = false
listeners.tcp.default = 5672
cluster_formation.peer_discovery_backend = rabbit_peer_discovery_classic_config
cluster_formation.classic_config.nodes.1 = rabbit@rabbitmq1
cluster_formation.classic_config.nodes.2 = rabbit@rabbitmq2
cluster_formation.classic_config.nodes.3 = rabbit@rabbitmq3
cluster_partition_handling = autoheal
management.tcp.port = 15672
.erlang.cookie
(所有节点共用,需保证相同)
echo "YOUR_SECRET_COOKIE" > ~/rabbitmq-config/.erlang.cookie
chmod 400 ~/rabbitmq-config/.erlang.cookie # 重要:权限必须为 400
3. 启动第一个节点(rabbitmq1)
docker run -d --name rabbitmq1 \
--net rabbitmq-cluster \
-p 5672:5672 \
-p 15672:15672 \
-v ~/rabbitmq-config/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf \
-v ~/rabbitmq-config/.erlang.cookie:/var/lib/rabbitmq/.erlang.cookie \
-e RABBITMQ_NODENAME=rabbit@rabbitmq1 \
rabbitmq:3.11-management
4. 启动第二个节点(rabbitmq2)
docker run -d --name rabbitmq2 \
--net rabbitmq-cluster \
-p 5673:5672 \
-p 15673:15672 \
-v ~/rabbitmq-config/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf \
-v ~/rabbitmq-config/.erlang.cookie:/var/lib/rabbitmq/.erlang.cookie \
-e RABBITMQ_NODENAME=rabbit@rabbitmq2 \
rabbitmq:3.11-management
5. 启动第三个节点(rabbitmq3)
docker run -d --name rabbitmq3 \
--net rabbitmq-cluster \
-p 5674:5672 \
-p 15674:15672 \
-v ~/rabbitmq-config/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf \
-v ~/rabbitmq-config/.erlang.cookie:/var/lib/rabbitmq/.erlang.cookie \
-e RABBITMQ_NODENAME=rabbit@rabbitmq3 \
rabbitmq:3.11-management
6. 组建集群
进入第二个节点容器并加入集群:
docker exec -it rabbitmq2 bash
# 在容器内执行
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@rabbitmq1
rabbitmqctl start_app
exit
类似地,对第三个节点执行相同操作:
docker exec -it rabbitmq3 bash
# 在容器内执行
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@rabbitmq1
rabbitmqctl start_app
exit
7. 验证集群状态
可以通过以下方式验证集群是否成功组建:
方法1:通过命令行
docker exec -it rabbitmq1 rabbitmqctl cluster_status
方法2:通过管理界面
访问任一节点的管理界面(例如:http://localhost:15672
),使用默认用户名 guest
和密码 guest
登录,查看 Admin → Nodes
页面。
8. 启用镜像队列(可选)
为保证消息高可用,可以配置镜像队列:
docker exec -it rabbitmq1 rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
9. 客户端连接
客户端可以连接到任意节点:
amqp://localhost:5672
(rabbitmq1)amqp://localhost:5673
(rabbitmq2)amqp://localhost:5674
(rabbitmq3)
注意事项
Cookie 文件权限:
.erlang.cookie
文件权限必须为400
,否则节点间无法通信节点命名:使用 Docker 网络中的容器名称(如
rabbit@rabbitmq1
)端口映射:生产环境建议使用负载均衡器(如 Nginx、HAProxy)统一暴露端口
持久化存储:生产环境应挂载数据卷,避免容器重启导致数据丢失
集群脑裂:配置
cluster_partition_handling = autoheal
避免网络分区时的脑裂问题
通过以上步骤,你可以快速搭建一个三节点的 RabbitMQ 集群,支持高可用性和横向扩展。