Docker Swarm RabbitMQ集群离线模式

使用Docker Swarm部署RabbitMQ3.9.11(三节点-镜像模式)

  • 准备工作
    • 镜像下载
    • 机器信息
  • 集群部署
    • 初始化集群
    • 创建数据卷
    • 创建网络
    • 创建服务
    • 创建集群
    • 镜像队列配置

准备工作

镜像下载

#下载带UI版本的MQ
docker pull rabbitmq:management
#导出image
docker save -o rabbitmq.tar  {ID}
#导入image
docker load -i rabbitmq.tar
#更新包
apt-get update
apt install iputils-ping net-tools

机器信息

机器名称 IP 角色
bc0 192.168.48.136 master
bc1 192.168.48.138 worker

集群部署

初始化集群

登录bc0

#初始化集群
 docker swarm init --advertise-addr=192.168.48.136
#输出信息如下
Swarm initialized: current node (dvubde276cls9bzr3j1ibc7vj) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-6bj51nau8qo03gpdfqrxk5ao6yeli6y0bkxpgnsi71efbyovyb-7qlyybyx03kk1q5mhpfaxbpwi 192.168.48.136:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

注意事项
#放行命令
firewall-cmd --zone=public --add-port=2377/tcp --permanent #放行2377端口

#2377:用于集群管理通信的TCP端口
#7946:TCP和UDP的端口,用于节点间通信
#4789:UDP端口,用于覆盖网络流量。
firewall-cmd --query-port=2377/tcp  
#重载防火墙
firewall-cmd --reload   

创建数据卷

每个节点都要执行

#创建数据卷
# 初始化一个本地目录做数据共享
mkdir -p  /AMT/rabbitmq-data

# 执行挂载挂载映射指令
docker volume create --driver local 
      --opt type=none 
      --opt device=/AMT/rabbitmq-data 
      --opt o=bind 
      cluster-rabbitmq-data

创建网络

主节点执行

docker network create -d overlay --attachable rabbitmq_network

创建服务

#主节点执行
docker run -d 
      --hostname bc0 
      --name bc0 
      -e RABBITMQ_ERLANG_COOKIE="rabbitcookie" 
      -e RABBITMQ_DEFAULT_USER="admin" 
      -e RABBITMQ_DEFAULT_PASS="admin" 
      -v cluster-rabbitmq-data:/var/lib/rabbitmq 
      -p 5672:5672 
      -p 15672:15672 
      --net=rabbitmq_network 
      6c3c2a225947

#二节点执行
docker run -d 
      --hostname bc1 
      --name bc1 
      -e RABBITMQ_ERLANG_COOKIE="rabbitcookie" 
      -v cluster-rabbitmq-data:/var/lib/rabbitmq 
      -p 5672:5672 
      -p 15672:15672 
      --net=rabbitmq_network 
      6c3c2a225947

创建集群

#主节点执行
docker exec -ti bc0 /bin/bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app

#二节点执行
docker exec -ti bc1 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@bc0
(报错忽略)
rabbitmqctl start_app

镜像队列配置

#设置镜像模式
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
#查看集群状态
rabbitmqctl cluster_status

参考连接