Docker环境下搭建Rabbitmq+Haproxy+Keepalived高可用负载均衡集群

时间:2024-03-15 13:47:19

                                                 集群架构图 

Docker环境下搭建Rabbitmq+Haproxy+Keepalived高可用负载均衡集群

一)使用docker pull  rabbitmq拉取最新rabbimq镜像

Docker环境下搭建Rabbitmq+Haproxy+Keepalived高可用负载均衡集群

 

创建docker网络 rabbtimanet 用于haproxy和rabbimq通信

1

docker network create rabbtimanet

Docker环境下搭建Rabbitmq+Haproxy+Keepalived高可用负载均衡集群

 

创建三节点rabbitmq容器

rabbitmq1

1

docker run -d --name=rabbitmq1 -p 5672:5672 -p 15672:15672 -e RABBITMQ_NODENAME=rabbitmq1 -e RABBITMQ_ERLANG_COOKIE='YZSDHWMFSMKEMBDHSGGZ'  -h rabbitmq1 --net=rabbtimanet rabbitmq:3.7.7-management

rabbitmq2

1

docker run -d --name=rabbitmq2 -p 5673:5672 -p 15673:15672 -e RABBITMQ_NODENAME=rabbitmq2 -e RABBITMQ_ERLANG_COOKIE='YZSDHWMFSMKEMBDHSGGZ'  -h rabbitmq2 --net=rabbtimanet rabbitmq:3.7.7-management

rabbitmq3

1

docker run -d --name=rabbitmq3 -p 5674:5672 -p 15674:15672 -e RABBITMQ_NODENAME=rabbitmq3 -e RABBITMQ_ERLANG_COOKIE='YZSDHWMFSMKEMBDHSGGZ'  -h rabbitmq3 --net=rabbtimanet rabbitmq:3.7.7-management

Docker环境下搭建Rabbitmq+Haproxy+Keepalived高可用负载均衡集群

 

rabbitmq集群

分别进入rabbitmq2 和rabbitmq3 容器(docker exec -it rabbitmq2  sh),(docker exec -it  rabbitmq3 sh),执行以下:

1

2

3

4

rabbitmqctl stop_app

rabbitmqctl reset

rabbitmqctl join_cluster --ram [email protected]

rabbitmqctl start_app

Docker环境下搭建Rabbitmq+Haproxy+Keepalived高可用负载均衡集群

 

部署Haproxy

在/home/haproxy下新建两个文件Dockerfile和haproxy.cfg 文件如下:

Docker环境下搭建Rabbitmq+Haproxy+Keepalived高可用负载均衡集群

haproxy.cfg 内容如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

global

  daemon

  maxconn 256

 

defaults

  mode http

  timeout connect 5000ms

  timeout client 5000ms

  timeout server 5000ms

 

listen rabbitmq_cluster

##监听5677端口转发到rabbitmq服务

  bind 0.0.0.0:5677

  option tcplog

  mode tcp

  balance leastconn

  server rabbit1 rabbitmq1:5672 check inter 2s rise 2 fall 3

  server rabbit2 rabbitmq2:5672 check inter 2s rise 2 fall 3

  server rabbit3 rabbitmq3:5672 check inter 2s rise 2 fall 3

listen http_front 

##haproxy的客户页面

  bind 0.0.0.0:80

  stats uri /haproxy?stats

 

listen rabbitmq_admin 

##监听8001端口转发到rabbitmq的客户端

  bind 0.0.0.0:8001

  server rabbit1 rabbitmq1:15672 check inter 2s rise 2 fall 3

  server rabbit2 rabbitmq2:15672 check inter 2s rise 2 fall 3

  server rabbit2 rabbitmq3:15672 check inter 2s rise 2 fall 3

Dockerfile内容如下:

Docker环境下搭建Rabbitmq+Haproxy+Keepalived高可用负载均衡集群

 在haproxy.cfg同目录下执行:

Docker环境下搭建Rabbitmq+Haproxy+Keepalived高可用负载均衡集群

Docker环境下搭建Rabbitmq+Haproxy+Keepalived高可用负载均衡集群

 

创建两个haproxy容器

1

docker run -d --name rabbitmq-haproxy  -p 8090:80 -p 5677:5677 -p 8001:8001 --net=rabbtimanet  rabbit-haproxy:latest 

 

1

docker run -d --name rabbitmq-haproxy2  -p 8091:80 -p 5678:5677 -p 8002:8001 --net=rabbtimanet  rabbit-haproxy:latest 

Docker环境下搭建Rabbitmq+Haproxy+Keepalived高可用负载均衡集群

通过外部8090访问haproxy容器的80端口,外部8001访问haproxy容器8001,外部5677访问haproxy 容器5677端口

 

Docker环境下搭建Rabbitmq+Haproxy+Keepalived高可用负载均衡集群

 

Docker环境下搭建Rabbitmq+Haproxy+Keepalived高可用负载均衡集群

 部署Keepalived

https://blog.csdn.net/qq_21108311/article/details/82973763

参考博客:https://www.cnblogs.com/CaesarLinsa/p/11037613.html 此博客在部署haproxy时可能会出现权限问题,因此,我使用了Dockerfile的方式