創建rabbitmq容器
使用docker pull rabbitmq拉取最新rabbimq鏡像,docker pull haproxy 拉取haproxy鏡像
創建docker網絡 rabbtimanet 用於haproxy和rabbimq通信
docker network create rabbtimanet
創建三節點rabbitmq容器
rabbitmq1:
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:management
rabbitmq2:
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:management
rabbitmq3:
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:management
rabbitmq集群
分別進入rabbitmq2 和rabbitmq3容器(docker exec -it 容器id /bin/bash),執行以下:
rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl join_cluster --ram rabbitmq1@rabbitmq1 rabbitmqctl start_app
部署Haproxy
編輯haproxy配置文件如下:
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 #監聽8011端口轉發到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
創建haproxy容器
docker run -d --name rabbitmq-haproxy -p 8090:80 -p 5677:5677 -p 8001:8001 --net=rabbtimanet -v /home/haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro haproxy:latest
通過外部8090訪問haproxy容器的80端口,外部8001訪問haproxy容器8001,外部5677訪問haproxy 容器5677端口
測試
連接rabbitmq 的5677端口,並發送數據,檢查haproxy的web頁面,對每次的請求轉發至不同的rabbitmq
通過haproxy的8001端口訪問rabbitmq的客戶端: