docker rabbitmq_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登录,登录其他节点,访问相应的端口并使用相应的用户名/密码登录即可

a1e01e9262656e28e11a92dfb5d1a38a.png
b2352958967af396af063c02c001d96b.png

退出集群

  1. # docker exec rabbitmq3 bash -c
  2. "rabbitmqctl stop_app &&
  3. rabbitmqctl reset &&
  4. rabbitmqctl start_app"
53a76bf9efa8e686e4befcce25d3491f.png
  • 拉取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

346990c1f6a27b5b305128b7d16f0a06.png

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

be0f2a3f9859c14aaf3d95b02f901b8d.png

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
da07e5e230918a3e9b3d10832a45003f.png

如此便完成了使用docker-compose部署Rabbitmq集群

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

docker-compose up -d

docker-compose stop

  • 此类方法部署RabbitMQ集群有很多细节,便不一一说明了,挑几个重用的说一下
  • 所有的节点最好共享一个网络块
  • 执行docker-compose.yml之前要创建好所有的配置文件
  • 安全组规则
6b5bafb8a97f15e0b2fe4f0a5a9b1b67.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值