编写rabbitmq.yml文件
version: "3.7"
networks:
xxl:
external: true //外部创建覆盖网络xxl
name: xxl
driver: overlay
ipam:
config:
- subnet: 172.22.0.0/16
volumes:
rabbitmq-cookie:
external: true //为避免windows权限问题和重启重置,使用docker命名卷
services:
rabbit1:
image: xxl-rabbitmq //自定义的镜像
networks:
- xxl
volumes:
- rabbitmq-cookie:/var/lib/rabbitmq
environment:
- RABBITMQ_ERLANG_COOKIE="xxl_civic_xxl"
hostname: rabbit1
deploy:
replicas: 1
rabbit2:
image: xxl-rabbitmq
networks:
- xxl
volumes:
- rabbitmq-cookie:/var/lib/rabbitmq
environment:
- RABBITMQ_ERLANG_COOKIE="xxl_civic_xxl"
hostname: rabbit2
deploy:
replicas: 1
rabbit3:
image: xxl-rabbitmq
networks:
- xxl
volumes:
- rabbitmq-cookie:/var/lib/rabbitmq
environment:
- RABBITMQ_ERLANG_COOKIE="xxl_civic_xxl"
hostname: rabbit3
deploy:
replicas: 1
swarm模式启动集群
//启动服务栈
docker stack deploy -c rabbitmq.yml rabbtimq
//移除服务栈
docker stack rm rabbitmq
使用portainer图形界面配置rabbitmq集群
//进入rabbit1容器,作为集群基准
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
//进入rabbit2容器
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@rabbit1
rabbitmqctl start_app
//进入rabbit3容器
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@rabbit1
rabbitmqctl start_app
使用nginx作为代理暴露服务到宿主机
- nginx.yml
version: "3.7"
networks:
xxl:
external: true
name: xxl
driver: overlay
ipam:
config:
- subnet: 172.22.0.0/16
services:
gateway:
image: nginx:latest
networks:
- xxl
ports:
- "15672:15672"
- "5672:5672"
- "1883:1883"
- "15675:15675"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
deploy:
replicas: 1
depends_on:
- rabbit1
- rabbit2
- rabbit3
- nginx.conf
http {
upstream web {
server rabbit1:15672;
server rabbit2:15672;
server rabbit3:15672;
}
server {
listen 15672;
server_name localhost;
location / {
proxy_pass http://web;
}
}
upstream webmqtt {
server rabbit1:15675;
server rabbit2:15675;
server rabbit3:15675;
}
server {
listen 15675;
server_name localhost;
location / {
proxy_pass http://webmqtt;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
}
stream {
upstream mqtt {
server rabbit1:1883;
server rabbit2:1883;
server rabbit3:1883;
}
server {
listen 1883;
proxy_timeout 60s;
proxy_pass mqtt;
}
upstream amqp {
server rabbit1:5672;
server rabbit2:5672;
server rabbit3:5672;
}
server {
listen 5672;
proxy_timeout 60s;
proxy_pass amqp;
}
}
- 启动nginx
//启动服务栈
docker stack deploy -c nginx.yml gateway
//移除服务栈
docker stack rm gateway