swarm-部署rabbitmq集群

本文详细介绍如何使用Docker Compose部署RabbitMQ集群,包括配置rabbitmq.yml文件实现节点间的同步,以及通过Nginx进行流量分发,确保服务的高可用性和负载均衡。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编写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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值