玖叶教程网

前端编程开发入门

Docker之部署RabbitMQ集群并实现Haproxy代理,你学会了吗?

前言

本小节我们学习一下使用Docker部署RabbitMQ集群。

RabbitMQ Docker Hub

目录参考

  1. [root@iZ2ze8sm5upgi8z1dcazqeZ rabbitmq]# pwd
  2. /workspace/rabbitmq
  3. [root@iZ2ze8sm5upgi8z1dcazqeZ rabbitmq]# tree
  4. .
  5. ├── config
  6. │ └── docker-compose.yml
  7. ├── data
  8. │ ├── rabbitmq1
  9. │ ├── rabbitmq2
  10. │ └── rabbitmq3
  11. └── haproxy-etc
  12. └── haproxy.cfg


拉取rabbitmq镜像

docker pull rabbitmq:3.8-rc-management

若不使用Rabbitmq的management功能,可以拉取镜像:rabbitmq:3.8-rc

创建Rabbitmq共享网络

  1. docker network create rabbitmqnet
  1. [root@iZ2ze8sm5upgi8z1dcazqeZ data]# docker network ls
  2. NETWORK ID NAME DRIVER SCOPE
  3. 203f098f2ed7 bridge bridge local
  4. 901ab7f16e18 config_default bridge local
  5. e5878362fd0d data_default bridge local
  6. e16693f5cfb7 example_default bridge local
  7. 54da0f7e3311 host host local
  8. 6ad755fc1934 none null local
  9. a4b8c1129340 rabbitmqnet bridge local
  10. [root@iZ2ze8sm5upgi8z1dcazqeZ data]#

创建节点(三个节点)

注意这里使用相同的 RABBITMQ_ERLANG_COOKIE 值

  1. ```
  2. #RabibitMQ Node1
  3. docker run -d \
  4. --name=rabbitmq1 \
  5. -p 5672:5672 \
  6. -p 15672:15672 \
  7. -v /workspace/rabbitmq/data/rabbitmq1:/var/lib/rabbitmq:z \
  8. -e RABBITMQ_DEFAULT_USER=Dustyone \
  9. -e RABBITMQ_DEFAULT_PASS=bai5331359 \
  10. -e RABBITMQ_NODENAME=rabbitmq1 \
  11. -e RABBITMQ_ERLANG_COOKIE='Dustyone-Murex-cluster-cookie' \
  12. -h rabbitmq1 \
  13. --net=rabbitmqnet \
  14. rabbitmq:3.8-rc-management

  15. #RabibitMQ Node2
  16. docker run -d \
  17. --name=rabbitmq2 \
  18. -p 5673:5672 \
  19. -p 15673:15672 \
  20. -v /workspace/rabbitmq/data/rabbitmq2:/var/lib/rabbitmq:z \
  21. -e RABBITMQ_DEFAULT_USER=Dustyone \
  22. -e RABBITMQ_DEFAULT_PASS=bai5331359 \
  23. -e RABBITMQ_NODENAME=rabbitmq2 \
  24. -e RABBITMQ_ERLANG_COOKIE='Dustyone-Murex-cluster-cookie' \
  25. -h rabbitmq2 \
  26. --net=rabbitmqnet \
  27. rabbitmq:3.8-rc-management

  28. #RabibitMQ Node3
  29. docker run -d \
  30. --name=rabbitmq3 \
  31. -p 5674:5672 \
  32. -p 15674:15672 \
  33. -v /workspace/rabbitmq/data/rabbitmq3:/var/lib/rabbitmq:z \
  34. -e RABBITMQ_DEFAULT_USER=Dustyone \
  35. -e RABBITMQ_DEFAULT_PASS=bai5331359 \
  36. -e RABBITMQ_NODENAME=rabbitmq3 \
  37. -e RABBITMQ_ERLANG_COOKIE='Dustyone-Murex-cluster-cookie' \
  38. -h rabbitmq3 \
  39. --net=rabbitmqnet \
  40. rabbitmq:3.8-rc-management
  41. ```
  1. [root@iZ2ze8sm5upgi8z1dcazqeZ rabbitmq]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 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
  4. ac5f2897f6de rabbitmq:3.8-rc-management "docker-entrypoint.s…" 9 seconds ago Up 8 seconds 4369/tcp, 5671/tcp, 15671/tcp, /tcp, 0.0.0.0:5673->5672/tcp, 0.0.0.0:15673->15672/tcp rabbitmq225672
  5. 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节点集群

  1. ### Disk Node
  2. # docker exec rabbitmq2 bash -c \
  3. "rabbitmqctl stop_app && \
  4. rabbitmqctl reset && \
  5. rabbitmqctl join_cluster rabbitmq1@rabbitmq1 && \
  6. rabbitmqctl start_app"
  7. ### Ram Node
  8. # docker exec rabbitmq3 bash -c \
  9. "rabbitmqctl stop_app && \
  10. rabbitmqctl reset && \
  11. rabbitmqctl join_cluster --ram rabbitmq1@rabbitmq1 && \
  12. rabbitmqctl start_app"


登录:http://你的公网IP:15672 ,使用rabbitmq1-Dustyone/bai5331359登录,登录其他节点,访问相应的端口并使用相应的用户名/密码登录即可

退出集群

  1. # docker exec rabbitmq3 bash -c \
  2. "rabbitmqctl stop_app && \
  3. rabbitmqctl reset && \
  4. rabbitmqctl start_app"

  • 拉取haproxy镜像
  1. docker pull haproxy

创建目录/workspace/rabbitmq/haproxy-etc,并在该路径下创建haprox.cfg配置文件

  1. [root@iZ2ze8sm5upgi8z1dcazqeZ haproxy-etc]# pwd
  2. /workspace/rabbitmq/haproxy-etc
  3. [root@iZ2ze8sm5upgi8z1dcazqeZ haproxy-etc]# tree
  4. .
  5. └── haproxy.cfg
  6. 0 directories, 1 file
  7. [root@iZ2ze8sm5upgi8z1dcazqeZ haproxy-etc]#


haproxy.cfg配置信息如下:

  1. #Simple configuration for an HTTP proxy listening on port 80 on all
  2. # interfaces and forwarding requests to a single backend "servers" with a
  3. # single server "server1" listening on 127.0.0.1:8000
  4. global
  5. daemon
  6. maxconn 256
  7. defaults
  8. mode http
  9. timeout connect 5000ms
  10. timeout client 5000ms
  11. timeout server 5000ms
  12. listen rabbitmq_cluster
  13. bind 0.0.0.0:5677
  14. option tcplog
  15. mode tcp
  16. balance leastconn
  17. server rabbit1 rabbitmq1:5672 check inter 2s rise 2 fall 3
  18. server rabbit2 rabbitmq2:5672 check inter 2s rise 2 fall 3
  19. server rabbit3 rabbitmq3:5672 check inter 2s rise 2 fall 3
  20. listen http_front
  21. bind 0.0.0.0:8002
  22. stats uri /haproxy?stats
  23. listen rabbitmq_admin
  24. bind 0.0.0.0:8001
  25. server rabbit1 rabbitmq1:15672
  26. server rabbit2 rabbitmq2:15672
  27. server rabbit3 rabbitmq3:15672
  • 拉取haproxy镜像
  1. docker pull haproxy
  • 启动haproxy
  1. docker run -d \
  2. --name rabbitmq-haproxy \
  3. -p 8002:8002 -p 5677:5677 -p 8001:8001 \
  4. --net=rabbitmqnet \
  5. -v /workspace/rabbitmq/haproxy-etc:/usr/local/etc/haproxy:ro \
  6. haproxy:latest

启动haproxy后,可以通过haproxy来访问rabbitmq集群:http://你的公网IP:8001

获取haproxy的状态:http://你的公网IP:8002/haproxy?stats

Docker 之 部署RabbitMQ集群并实现Haproxy代理

前言

  • 本小节学习一下使用Docker-compose部署Rabbitmq集群。

目录参考

  1. [root@iZ2ze8sm5upgi8z1dcazqeZ rabbitmq]# pwd
  2. /workspace/rabbitmq
  3. [root@iZ2ze8sm5upgi8z1dcazqeZ rabbitmq]# tree
  4. .
  5. ├── config
  6. │ └── docker-compose.yml
  7. ├── data
  8. ├── haproxy-etc
  9. │ └── haproxy.cfg
  10. ├── rabbitmq1
  11. ├── rabbitmq2
  12. └── rabbitmq3
  13. 6 directories, 2 files
  14. [root@iZ2ze8sm5upgi8z1dcazqeZ rabbitmq]#
  • 创建RabbitMQ集群共享网络

docker network create rabbitmqnet

  • docker-compose.yml
  1. version: '3.7'
  2. services:
  3. rabbitmq1:
  4. image: rabbitmq:3.8-rc-management
  5. container_name: rabbitmq1
  6. restart: always
  7. ports:
  8. - 5672:5672
  9. - 15672:15672
  10. volumes:
  11. - /workspace/rabbitmq/data/rabbitmq1:/var/lib/rabbitmq:z
  12. environment:
  13. RABBITMQ_DEFAULT_USER: 'Dustyone'
  14. RABBITMQ_DEFAULT_PASS: 'bai5331359'
  15. RABBITMQ_NODENAME: 'rabbitmq1'
  16. RABBITMQ_ERLANG_COOKIE: 'Dustyone-Murex-cluster-cookie'
  17. hostname: rabbitmq1

  18. rabbitmq2:
  19. image: rabbitmq:3.8-rc-management
  20. container_name: rabbitmq2
  21. restart: always
  22. ports:
  23. - 5673:5672
  24. - 15673:15672
  25. volumes:
  26. - /workspace/rabbitmq/data/rabbitmq2:/var/lib/rabbitmq:z
  27. environment:
  28. RABBITMQ_DEFAULT_USER: 'Dustyone'
  29. RABBITMQ_DEFAULT_PASS: 'bai5331359'
  30. RABBITMQ_NODENAME: 'rabbitmq2'
  31. RABBITMQ_ERLANG_COOKIE: 'Dustyone-Murex-cluster-cookie'
  32. hostname: rabbitmq2
  33. links:
  34. - rabbitmq1

  35. rabbitmq3:
  36. image: rabbitmq:3.8-rc-management
  37. container_name: rabbitmq3
  38. restart: always
  39. ports:
  40. - 5674:5672
  41. - 15674:15672
  42. volumes:
  43. - /workspace/rabbitmq/data/rabbitmq3:/var/lib/rabbitmq:z

  44. environment:
  45. RABBITMQ_DEFAULT_USER: 'Dustyone'
  46. RABBITMQ_DEFAULT_PASS: 'bai5331359'
  47. RABBITMQ_NODENAME: 'rabbitmq3'
  48. RABBITMQ_ERLANG_COOKIE: 'Dustyone-Murex-cluster-cookie'
  49. hostname: rabbitmq3
  50. links:
  51. - rabbitmq1
  52. - rabbitmq2

  53. rabbitmq-haproxy:
  54. image: haproxy
  55. container_name: rabbitmq-haproxy
  56. restart: always
  57. ports:
  58. - 8002:8002
  59. - 5677:5677
  60. - 8001:8001
  61. volumes:
  62. - /workspace/rabbitmq/haproxy-etc:/usr/local/etc/haproxy:ro
  63. links:
  64. - rabbitmq1
  65. - rabbitmq2
  66. - rabbitmq3

  67. networks:
  68. default:
  69. external:
  70. name: rabbitmqnet
  • 执行docker-compose.yml

docker-compose up -d

  1. [root@iZ2ze8sm5upgi8z1dcazqeZ config]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. cec0d4ee030d haproxy "/docker-entrypoint.…" 14 seconds ago Up 12 seconds 0.0.0.0:5677->5677/tcp, 0.0.0.0:8001-8002->8001-8002/tcp rabbitmq-haproxy
  4. 0d2d75c99c6a rabbitmq:3.8-rc-management "docker-entrypoint.s…" 14 seconds ago Up 13 seconds 4369/tcp, 5671/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:5674->5672/tcp, 0.0.0.0:15674->15672/tcp rabbitmq3
  5. 4e89fa1f2eba rabbitmq:3.8-rc-management "docker-entrypoint.s…" 15 seconds ago Up 14 seconds 4369/tcp, 5671/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:5673->5672/tcp, 0.0.0.0:15673->15672/tcp rabbitmq2
  6. af6dfb7ca16c rabbitmq:3.8-rc-management "docker-entrypoint.s…" 15 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
  • 将rabbitmq2和rabbitmq3两个节点加入rabbitmq1节点以形成集群。
  1. ### Disk Node
  2. docker exec rabbitmq2 bash -c \
  3. "rabbitmqctl stop_app && \
  4. rabbitmqctl reset && \
  5. rabbitmqctl join_cluster rabbitmq1@rabbitmq1 && \
  6. rabbitmqctl start_app"
  1. ### Ram Node
  2. # docker exec rabbitmq3 bash -c \
  3. "rabbitmqctl stop_app && \
  4. rabbitmqctl reset && \
  5. rabbitmqctl join_cluster --ram rabbitmq1@rabbitmq1 && \
  6. rabbitmqctl start_app"
  1. [root@iZ2ze8sm5upgi8z1dcazqeZ config]# docker exec rabbitmq2 bash -c \
  2. > "rabbitmqctl stop_app && \
  3. > rabbitmqctl reset && \
  4. > rabbitmqctl join_cluster rabbitmq1@rabbitmq1 && \
  5. > rabbitmqctl start_app"
  6. Stopping rabbit application on node rabbitmq2@rabbitmq2 ...
  7. Resetting node rabbitmq2@rabbitmq2 ...
  8. Clustering node rabbitmq2@rabbitmq2 with rabbitmq1@rabbitmq1
  9. Starting node rabbitmq2@rabbitmq2 ...
  10. completed with 3 plugins.
  11. [root@iZ2ze8sm5upgi8z1dcazqeZ config]# docker exec rabbitmq3 bash -c \
  12. > "rabbitmqctl stop_app && \
  13. > rabbitmqctl reset && \
  14. > rabbitmqctl join_cluster --ram rabbitmq1@rabbitmq1 && \
  15. > rabbitmqctl start_app"
  16. Stopping rabbit application on node rabbitmq3@rabbitmq3 ...
  17. Resetting node rabbitmq3@rabbitmq3 ...
  18. Clustering node rabbitmq3@rabbitmq3 with rabbitmq1@rabbitmq1
  19. Starting node rabbitmq3@rabbitmq3 ...
  20. completed with 3 plugins.
  21. [root@iZ2ze8sm5upgi8z1dcazqeZ config]#


  • 访问http://你的公网IP:8002
  • 如此便完成了使用docker-compose部署Rabbitmq集群

    • 启动停止Rabbitmq-Cluster建议使用如下Command

    docker-compose up -d

    docker-compose stop

    • 此类方法部署RabbitMQ集群有很多细节,便不一一说明了,挑几个重用的说一下
    • 所有的节点最好共享一个网络块
    • 执行docker-compose.yml之前要创建好所有的配置文件
    • 安全组规则

    发表评论:

    控制面板
    您好,欢迎到访网站!
      查看权限
    网站分类
    最新留言