docker部署haproxy负载均衡rabbitmq集群

2 篇文章 0 订阅
1 篇文章 0 订阅

一、构建rabbitmq集群

1.启动多个rabbitmq节点

  rabbit01: #节点1主节点
    image:  rabbitmq:3.8.5-management-alpine
    ports:  #端口映射
      - "5672:5672"
      - "15672:15672"
    hostname: rabbit01  #这个要记住,后面加入集群的时候会用到
    volumes:
      - ./logs/rabbitmq/rabbit01:/var/log/rabbitmq #挂载日志目录
    #      - ./data/rabbitmq/rabbit01:/var/lib/rabbitmq #数据挂载
    environment:    #设置环境变量(配置文件参数),虚拟主机,用户名,密码
      RABBITMQ_DEFAULT_VHOST: "/"
      RABBITMQ_DEFAULT_USER: "admin"
      RABBITMQ_DEFAULT_PASS: "123456"
      RABBITMQ_ERLANG_COOKIE: LZJADKXKLULIXFKAALGX
      # 由于rabbitmq节点间通过认证cookie的方式来允许互相通信,所以RABBITMQ_ERLANG_COOKIE必须设置为相同的。
  rabbit02:
    image:  rabbitmq:3.8.5-management-alpine
    ports:  #端口映射
      - "5673:5672"
    hostname: "rabbit02"
    links:   #关联主节点的hostname,方便容器内互相访问
      - rabbit01
    volumes:
      - ./logs/rabbitmq/rabbit02:/var/log/rabbitmq 
    #      - ./data/rabbitmq/rabbit02:/var/lib/rabbitmq
    environment:
      RABBITMQ_DEFAULT_VHOST: "/"
      RABBITMQ_DEFAULT_USER: "admin"
      RABBITMQ_DEFAULT_PASS: "123456"
      RABBITMQ_ERLANG_COOKIE: LZJADKXKLULIXFKAALGX
  rabbit03:
    image:  rabbitmq:3.8.5-management-alpine
    ports:  #端口映射
      - "5674:5672"
    hostname: "rabbit03"
    links:   #关联主节点的hostname,方便容器内互相访问
      - rabbit01
    volumes:
      - ./logs/rabbitmq/rabbit03:/var/log/rabbitmq
    #      - ./data/rabbitmq/rabbit03:/var/lib/rabbitmq
    environment:
      RABBITMQ_DEFAULT_VHOST: "/"
      RABBITMQ_DEFAULT_USER: "admin"
      RABBITMQ_DEFAULT_PASS: "123456"
      RABBITMQ_ERLANG_COOKIE: LZJADKXKLULIXFKAALGX

2.加入集群

说明
  • 加入集群需要选择内存节点还是磁盘节点
  • 保证至少有一个节点是磁盘节点(镜像集群情况下)
CONTAINER ID        IMAGE                              COMMAND                  CREATED             STATUS              PORTS                                                                                        NAMES
5785c0f19d9d        haproxy:1.8.26-alpine              "/docker-entrypoint.…"   24 hours ago        Up 4 minutes        0.0.0.0:5666->5666/tcp, 0.0.0.0:8888->8888/tcp                                               rabbitmqcluster_rabhaproxy_1ß
f34f27f1b2d6        rabbitmq:3.8.5-management-alpine   "docker-entrypoint.s…"   24 hours ago        Up About a minute   4369/tcp, 5671/tcp, 15671-15672/tcp, 25672/tcp, 0.0.0.0:5674->5672/tcp                       rabbitmqcluster_rabbit03_1
20458e4712fd        rabbitmq:3.8.5-management-alpine   "docker-entrypoint.s…"   24 hours ago        Up 4 minutes        4369/tcp, 5671/tcp, 15671-15672/tcp, 25672/tcp, 0.0.0.0:5673->5672/tcp                       rabbitmqcluster_rabbit02_1
7890dd48e558        rabbitmq:3.8.5-management-alpine   "docker-entrypoint.s…"   24 hours ago        Up 4 minutes        4369/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp   rabbitmqcluster_rabbit01_1
设置节点1
docker exec -it rabbitmqcluster_rabbit01_1 sh
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
exit

设置节点2
docker exec -it rabbitmqcluster_rabbit02_1 sh
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbit02
rabbitmqctl start_app
exit

设置节点3
docker exec -it rabbitmqcluster_rabbit03_1 sh
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbit03
rabbitmqctl start_app
exit

在这里插入图片描述

二、 部署Haproxy

启动 1.Haproxy

  rabhaproxy:
    image:  haproxy:1.8.26-alpine
    ports:  #端口映射
      - "8888:8888"
      - "5666:5666"
    hostname: "rabhaproxy"
    volumes:
      - ./config/haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg #挂载日志目录
    links:   #关联主节点的hostname,方便容器内互相访问
      - rabbit01
      - rabbit02
      - rabbit03

2.配置haproxy.cfg

global
#日志输出配置,所有日志都记录在本机,通过local0输出
log 127.0.0.1 local0 info
#最大连接数
maxconn 10240
#以守护进程方式运行
daemon

defaults
#应用全局的日志配置
log global
mode http
#超时配置
timeout connect 5000
timeout client 5000
timeout server 5000
timeout check 2000

## 管理web
listen http_front
bind 0.0.0.0:8888
mode http
option httplog
stats uri /haproxy
stats auth admin:123456
stats refresh 5s
stats enable

#绑定配置(rabbitmq集群)
listen rabbitmq_cluster
# 集群连接地址
bind 0.0.0.0:5666 
option tcplog
#防止消费者连接超时(默认毫秒 3h 小时)
timeout client  10000
timeout server  10000
#配置TCP模式
mode tcp
#简单的轮询
balance roundrobin
#RabbitMQ集群节点配置
server rabbit01 rabbit01:5672 check inter 5000 rise 2 fall 2
server rabbit02 rabbit02:5672 check inter 5000 rißse 2 fall 2
server rabbit03 rabbit03:5672 check inter 5000 rise 2 fall 2

在这里插入图片描述

三、配置镜像队列

说明

镜像队列工作原理:在非镜像队列的集群中,消息会路由到指定的队列。当配置为镜像队列之后,消息除了按照路由规则投递到相应的队列外,还会投递到镜像队列的拷贝。也可以想象在镜像队列中隐藏着一个fanout交换器,将消息发送到镜像的队列的拷贝。

#进入主节点执行(节点1)
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

在这里插入图片描述

四、docker文件

  • docker-compose.yml
version: "3.1"
services:
 rabbit01: #节点1主节点
    image:  rabbitmq:3.8.5-management-alpine
    ports:  #端口映射
      - "5672:5672"
      - "15672:15672"
    hostname: rabbit01  #这个要记住,后面加入集群的时候会用到
    volumes:
      - ./logs/rabbitmq/rabbit01:/var/log/rabbitmq #挂载日志目录
    #      - ./data/rabbitmq/rabbit01:/var/lib/rabbitmq #数据挂载
    environment:    #设置环境变量(配置文件参数),虚拟主机,用户名,密码
      RABBITMQ_DEFAULT_VHOST: "/"
      RABBITMQ_DEFAULT_USER: "admin"
      RABBITMQ_DEFAULT_PASS: "123456"
      RABBITMQ_ERLANG_COOKIE: LZJADKXKLULIXFKAALGX
      # 由于rabbitmq节点间通过认证cookie的方式来允许互相通信,所以RABBITMQ_ERLANG_COOKIE必须设置为相同的。
  rabbit02:
    image:  rabbitmq:3.8.5-management-alpine
    ports:  #端口映射
      - "5673:5672"
    hostname: "rabbit02"
    links:   #关联主节点的hostname,方便容器内互相访问
      - rabbit01
    volumes:
      - ./logs/rabbitmq/rabbit02:/var/log/rabbitmq 
    #      - ./data/rabbitmq/rabbit02:/var/lib/rabbitmq
    environment:
      RABBITMQ_DEFAULT_VHOST: "/"
      RABBITMQ_DEFAULT_USER: "admin"
      RABBITMQ_DEFAULT_PASS: "123456"
      RABBITMQ_ERLANG_COOKIE: LZJADKXKLULIXFKAALGX
  rabbit03:
    image:  rabbitmq:3.8.5-management-alpine
    ports:  #端口映射
      - "5674:5672"
    hostname: "rabbit03"
    links:   #关联主节点的hostname,方便容器内互相访问
      - rabbit01
    volumes:
      - ./logs/rabbitmq/rabbit03:/var/log/rabbitmq
    #      - ./data/rabbitmq/rabbit03:/var/lib/rabbitmq
    environment:
      RABBITMQ_DEFAULT_VHOST: "/"
      RABBITMQ_DEFAULT_USER: "admin"
      RABBITMQ_DEFAULT_PASS: "123456"
      RABBITMQ_ERLANG_COOKIE: LZJADKXKLULIXFKAALGX
   rabhaproxy:
    image:  haproxy:1.8.26-alpine
    ports:  #端口映射
      - "8888:8888"
      - "5666:5666"
    hostname: "rabhaproxy"
    volumes:
      - ./config/haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg #挂载日志目录
    links:   #关联主节点的hostname,方便容器内互相访问
      - rabbit01
      - rabbit02
      - rabbit03


  • 构建命令 docker-compose -f docker-compose.yml up
  • 删除命令 docker-compose -f docker-compose.yml down
  • 启动命令 docker-compose -f docker-compose.yml up start
  • 停止命令 docker-compose -f docker-compose.yml up stop
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值