使用Docker Swarm部署RabbitMQ3.9.11(三节点-镜像模式)
准备工作
环境准备
docker安装详见(离线版):Docker
镜像下载
#下载带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.139 | master |
bc1 | 192.168.48.140 | worker |
【抱歉】由于虚拟机配置有限,这里只列出了一个worker节点——bc1,如果要添加第三个节点参考bc1的流程,操作一毛一样(很简单就两步)
集群部署
防火墙设置(建议关闭)
登录bc0、bc1设置防火墙策略并重启docker
#2377:用于集群管理通信的TCP端口
#7946:TCP和UDP的端口,用于节点间通信
#4789:UDP端口,用于覆盖网络流量。
#放行docker端口
sudo firewall-cmd --zone=public --add-port=2377/tcp --permanent
sudo firewall-cmd --zone=public --add-port=7946/tcp --permanent
sudo firewall-cmd --zone=public --add-port=7946/udp --permanent
sudo firewall-cmd --zone=public --add-port=4789/tcp --permanent
sudo firewall-cmd --zone=public --add-port=4789/udp --permanent
#放行rabbitmq端口
sudo firewall-cmd --zone=public --add-port=4369/tcp --permanent
sudo firewall-cmd --zone=public --add-port=25672/tcp --permanent
sudo firewall-cmd --zone=public --add-port=5672/tcp --permanent
sudo firewall-cmd --zone=public --add-port=5671/tcp --permanent
sudo firewall-cmd --zone=public --add-port=15672/tcp --permanent
sudo firewall-cmd --zone=public --add-port=61613/tcp --permanent
sudo firewall-cmd --zone=public --add-port=61614/tcp --permanent
sudo firewall-cmd --zone=public --add-port=1883/tcp --permanent
sudo firewall-cmd --zone=public --add-port=8883/tcp --permanent
#重载防火墙
sudo firewall-cmd --reload
#查询端口是否开放
sudo firewall-cmd --query-port=2377/tcp
#查看开放端口的信息
sudo firewall-cmd --list-ports
#查看状态
sudo systemctl status firewalld
#重启docker
sudo systemctl restart docker
#其他rabbitmq端口
4369 (epmd), 25672 (Erlang distribution)
5672, 5671 (AMQP 0-9-1 without and with TLS)
15672 (if management plugin is enabled)
61613, 61614 (if STOMP is enabled)
1883, 8883 (if MQTT is enabled)
iptables参考文章:iptables
端口介绍:RabbitMQ Port
初始化集群
登录bc0
#初始化集群
docker swarm init --advertise-addr=192.168.48.139
#输出信息如下
Swarm initialized: current node (qe3z4iwjfnkbrapr6co0jyt17) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-14z6qyqng6d2fa5lfq1e4fpc1vxa0ap4xw7nvvsb3j959y2ylv-8eribq58zumwcto5t6n3bjjuj 192.168.48.139:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
#查看集群状态
docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
qe3z4iwjfnkbrapr6co0jyt17 * bc0 Ready Active Leader 24.0.7
m8r9n5cyh6eeydxqbumjutu8d bc1 Ready Active 24.0.7
登录bc1
docker swarm join --token SWMTKN-1-14z6qyqng6d2fa5lfq1e4fpc1vxa0ap4xw7nvvsb3j959y2ylv-8eribq58zumwcto5t6n3bjjuj 192.168.48.139:2377
创建数据卷
每个节点bc0、bc1都要执行
#创建数据卷
# 初始化一个本地目录做数据共享
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 volume ls
创建网络
主节点执行
docker network create -d overlay --attachable rabbitmq_network
#查看网络
docker network ls
创建服务
#主节点执行
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
登录验证:
http://192.168.48.139:15672/#/
http://192.168.48.140:15672/#/
镜像队列配置
登录bc0
#设置镜像模式
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
#查看集群状态
rabbitmqctl cluster_status
如下代表镜像配置成功: