前言
本小節我們學習一下使用Docker部署RabbitMQ叢集。
RabbitMQ Docker Hub
- 目錄參考
[[email protected] rabbitmq]# pwd /workspace/rabbitmq [[email protected] rabbitmq]# tree . ├── config │ └── docker-compose.yml ├── data │ ├── rabbitmq1 │ ├── rabbitmq2 │ └── rabbitmq3 └── haproxy-etc └── haproxy.cfg
- 拉取rabbitmq鏡像
docker pull rabbitmq:3.8-rc-management
若不使用Rabbitmq的management功能,可以拉取鏡像:rabbitmq:3.8-rc
- 建立Rabbitmq共享網絡
docker network create rabbitmqnet
[[email protected] data]# docker network ls NETWORK ID NAME DRIVER SCOPE 203f098f2ed7 bridge bridge local 901ab7f16e18 config_default bridge local e5878362fd0d data_default bridge local e16693f5cfb7 example_default bridge local 54da0f7e3311 host host local 6ad755fc1934 none null local a4b8c1129340 rabbitmqnet bridge local [[email protected] data]#
-
建立節點(三個節點)
注意這裡使用相同的 RABBITMQ_ERLANG_COOKIE 值
``` #RabibitMQ Node1 docker run -d \ --name=rabbitmq1 \ -p 5672:5672 \ -p 15672:15672 \ -v /workspace/rabbitmq/data/rabbitmq1:/var/lib/rabbitmq:z \ -e RABBITMQ_DEFAULT_USER=Dustyone \ -e RABBITMQ_DEFAULT_PASS=bai5331359 \ -e RABBITMQ_NODENAME=rabbitmq1 \ -e RABBITMQ_ERLANG_COOKIE='Dustyone-Murex-cluster-cookie' \ -h rabbitmq1 \ --net=rabbitmqnet \ rabbitmq:3.8-rc-management #RabibitMQ Node2 docker run -d \ --name=rabbitmq2 \ -p 5673:5672 \ -p 15673:15672 \ -v /workspace/rabbitmq/data/rabbitmq2:/var/lib/rabbitmq:z \ -e RABBITMQ_DEFAULT_USER=Dustyone \ -e RABBITMQ_DEFAULT_PASS=bai5331359 \ -e RABBITMQ_NODENAME=rabbitmq2 \ -e RABBITMQ_ERLANG_COOKIE='Dustyone-Murex-cluster-cookie' \ -h rabbitmq2 \ --net=rabbitmqnet \ rabbitmq:3.8-rc-management #RabibitMQ Node3 docker run -d \ --name=rabbitmq3 \ -p 5674:5672 \ -p 15674:15672 \ -v /workspace/rabbitmq/data/rabbitmq3:/var/lib/rabbitmq:z \ -e RABBITMQ_DEFAULT_USER=Dustyone \ -e RABBITMQ_DEFAULT_PASS=bai5331359 \ -e RABBITMQ_NODENAME=rabbitmq3 \ -e RABBITMQ_ERLANG_COOKIE='Dustyone-Murex-cluster-cookie' \ -h rabbitmq3 \ --net=rabbitmqnet \ rabbitmq:3.8-rc-management ```
[[email protected] rabbitmq]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d15e8aecfa21 rabbitmq:3.8-rc-management "docker-entrypoint.s…" 3 seconds ago Up 2 seconds 4369/tcp, 5671/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:5674->5672/tcp, 0.0.0.0:15674->15672/tcp rabbitmq3 ac5f2897f6de rabbitmq:3.8-rc-management "docker-entrypoint.s…" 9 seconds ago Up 8 seconds 4369/tcp, 5671/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:5673->5672/tcp, 0.0.0.0:15673->15672/tcp rabbitmq2 5f7e538553cd rabbitmq:3.8-rc-management "docker-entrypoint.s…" 16 seconds ago Up 15 seconds 4369/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp rabbitmq1
-
組建rabbitmq叢集
登陸Rabbitmq的後兩個節點,執行指令加入第一個Rabbitmq節點叢集
### Disk Node # docker exec rabbitmq2 bash -c \ "rabbitmqctl stop_app && \ rabbitmqctl reset && \ rabbitmqctl join_cluster [email protected] && \ rabbitmqctl start_app" ### Ram Node # docker exec rabbitmq3 bash -c \ "rabbitmqctl stop_app && \ rabbitmqctl reset && \ rabbitmqctl join_cluster --ram [email protected] && \ rabbitmqctl start_app"
登入:http://你的公網IP:15672 ,使用rabbitmq1-Dustyone/bai5331359登入,登入其他節點,通路相應的端口并使用相應的使用者名/密碼登入即可
退出叢集Docker 之 部署RabbitMQ叢集并實作Haproxy代理(一) Docker 之 部署RabbitMQ叢集并實作Haproxy代理(一) # docker exec rabbitmq3 bash -c \ "rabbitmqctl stop_app && \ rabbitmqctl reset && \ rabbitmqctl start_app"
Docker 之 部署RabbitMQ叢集并實作Haproxy代理(一) - 拉取haproxy鏡像
docker pull haproxy
- 建立目錄/workspace/rabbitmq/haproxy-etc,并在該路徑下建立haprox.cfg配置檔案
haproxy.cfg配置資訊如下:[[email protected] haproxy-etc]# pwd /workspace/rabbitmq/haproxy-etc [[email protected] haproxy-etc]# tree . └── haproxy.cfg 0 directories, 1 file [[email protected] haproxy-etc]#
#Simple configuration for an HTTP proxy listening on port 80 on all # interfaces and forwarding requests to a single backend "servers" with a # single server "server1" listening on 127.0.0.1:8000 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:8002 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鏡像
docker pull haproxy
- 啟動haproxy
啟動haproxy後,可以通過haproxy來通路rabbitmq叢集:http://你的公網IP:8001docker run -d \ --name rabbitmq-haproxy \ -p 8002:8002 -p 5677:5677 -p 8001:8001 \ --net=rabbitmqnet \ -v /workspace/rabbitmq/haproxy-etc:/usr/local/etc/haproxy:ro \ haproxy:latest
Docker 之 部署RabbitMQ叢集并實作Haproxy代理(一) - 擷取haproxy的狀态:http://你的公網IP:8002/haproxy?stats
Docker 之 部署RabbitMQ叢集并實作Haproxy代理(一)