集群架构图
一)使用docker pull rabbitmq拉取最新rabbimq镜像
创建docker网络 rabbtimanet 用于haproxy和rabbimq通信
1
|
docker network create rabbtimanet
|
创建三节点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
|
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
|
部署Haproxy
在/home/haproxy下新建两个文件Dockerfile和haproxy.cfg 文件如下:
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内容如下:
在haproxy.cfg同目录下执行:
创建两个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
|
通过外部8090访问haproxy容器的80端口,外部8001访问haproxy容器8001,外部5677访问haproxy 容器5677端口
部署Keepalived
参考博客:https://www.cnblogs.com/CaesarLinsa/p/11037613.html 此博客在部署haproxy时可能会出现权限问题,因此,我使用了Dockerfile的方式