docker启动的rabbitmq搭建并集群和高可用

发布于:2025-06-24 ⋅ 阅读:(18) ⋅ 点赞:(0)

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)

注意事项

  1. Cookie 文件权限.erlang.cookie 文件权限必须为 400,否则节点间无法通信

  2. 节点命名:使用 Docker 网络中的容器名称(如 rabbit@rabbitmq1

  3. 端口映射:生产环境建议使用负载均衡器(如 Nginx、HAProxy)统一暴露端口

  4. 持久化存储:生产环境应挂载数据卷,避免容器重启导致数据丢失

  5. 集群脑裂:配置 cluster_partition_handling = autoheal 避免网络分区时的脑裂问题

通过以上步骤,你可以快速搭建一个三节点的 RabbitMQ 集群,支持高可用性和横向扩展。


网站公告

今日签到

点亮在社区的每一天
去签到