1 镜像
docker pull rabbitmq:3.7.28-management
2 docker
sudo docker run -d \
--name rabbitmq \
-p 5672:5672 \
-p 15672:15672 \
-p 61613:61613 \
--privileged=true \
--restart=always \
-v pwd/data:/var/lib/rabbitmq \
--hostname myRabbit \
-e RABBITMQ_DEFAULT_VHOST=my_vhost \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=admin \
rabbitmq:3.7.28-management
3 消息代理
docker exec rabbitmq2 bash -c \
"rabbitmq-plugins enable rabbitmq_stomp && \
rabbitmq-plugins enable rabbitmq_web_stomp"
4 创建网络
docker network create rabbitmqnet
docker network ls
5 节点实例
docker run -d
–name=rabbitmq1
-p 5672:5672
-p 15672:15672
-e rabbitmq_nodename=rabbitmq1
-e rabbitmq_erlang_cookie=‘yzsdhwmfsmkembdhsggz’
-h rabbitmq1
–net=rabbitmqnet
rabbitmq:3.7.28-management
docker run -d
–name=rabbitmq2
-p 5673:5672
-p 15673:15672
-e rabbitmq_nodename=rabbitmq2
-e rabbitmq_erlang_cookie=‘yzsdhwmfsmkembdhsggz’
-h rabbitmq2
–net=rabbitmqnet
rabbitmq:3.7.28-management
docker run -d
–name=rabbitmq3
-p 5674:5672
-p 15674:15672
-e rabbitmq_nodename=rabbitmq3
-e rabbitmq_erlang_cookie=‘yzsdhwmfsmkembdhsggz’
-h rabbitmq3
–net=rabbitmqnet
rabbitmq:3.7.28-management
6 组建rabbitmq集群
docker exec rabbitmq2 bash -c
“rabbitmqctl stop_app &&
rabbitmqctl reset &&
rabbitmqctl join_cluster rabbitmq1@rabbitmq1 &&
rabbitmqctl start_app”
docker exec rabbitmq3 bash -c
“rabbitmqctl stop_app &&
rabbitmqctl reset &&
rabbitmqctl join_cluster --ram rabbitmq1@rabbitmq1 &&
rabbitmqctl start_app”
7 退出集群
docker exec rabbitmq3 bash -c
“rabbitmqctl stop_app &&
rabbitmqctl reset &&
rabbitmqctl start_app”
8 haproxy
docker pull haproxy
haproxy-create.sh
#! /bin/bash
docker run -d \
--name rabbitmq-haproxy \
-p 1080:80 -p 5677:5677 -p 8001:8001 \
--net=rabbitmqnet \
-v /root/rabbitmq/haproxy-etc:/usr/local/etc/haproxy:ro \
haproxy:latest
haproxy-etc/haproxy.cfg
global
daemon
maxconn 256
defaults
mode http
timeout connect 5000ms
timeout client 5000ms
timeout server 5000ms
listen rabbitmq_cluster
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
bind 0.0.0.0:80
stats uri /haproxy?stats
listen rabbitmq_admin
bind 0.0.0.0:8001
server rabbit1 rabbitmq1:15672
server rabbit2 rabbitmq2:15672
server rabbit3 rabbitmq3:15672
启动haproxy后,可以通过haproxy来访问rabbitmq集群:http://external-ip:8001
获取haproxy的状态:http://external-ip:1080/haproxy?stats
9 rabbitmq exporter
要收集rabbitmq的metrics给prometheus使用的话,可以使用开源的rabbitmq-exporter
docker pull kbudde/rabbitmq-exporter
启动rabbitmq实例
docker run -d --name=rabbitmq1 -p 5672:5672 -p 15672:15672 -e rabbitmq_nodename=rabbitmq1 -e rabbitmq_erlang_cookie=‘yzsdhwmfsmkembdhsggz’ -h rabbitmq1 --net=rabbitmqnet -p 9090:9090 rabbitmq:3.7-rc-management
开启9090端口,这个是rabbitmq exporter的默认publish_port
启动rabbitmq exporter实例
docker run -d --net=container:rabbitmq1 kbudde/rabbitmq-exporter
获取rabbitmq的metrics
wget http://localhost:9090/metrics