写点什么

【愚公系列】2022 年 03 月 Docker 容器 RabbitMQ 集群的搭建

作者:愚公搬代码
  • 2022 年 3 月 18 日
  • 本文字数:1227 字

    阅读完需:约 4 分钟

前言

RabbitMQ 这款消息队列中间件产品本身是基于 Erlang 编写,Erlang 语言天生具备分布式特性(通过同步 Erlang 集群各节点的 magic cookie 来实现)。


因此,RabbitMQ 天然支持 Clustering。这使得 RabbitMQ 本身不需要像 ActiveMQ、Kafka 那样通过 ZooKeeper 分别来实现 HA 方案和保存集群的元数据。集群是保证可靠性的一种方式,同时可以通过水平扩展以达到增加消息吞吐量能力的目的。下面先来看下 RabbitMQ 集群的整体方案:


一、RabbitMQ 集群的搭建

1.拉取镜像

docker pull rabbitmq:3-management
复制代码


注意使用后缀为"-management"的镜像版本,是包含网页控制台的。



二、RabbitMQ 的配置

1.启动 RabbitMQ

docker run -d --hostname myrabbit --name myrabbit -p 15672:15672 -p 5672:5672 rabbitmq:3-management
docker run -d --hostname myrabbit1 --name myrabbit1 -p 15673:15672 -p 5673:5672 rabbitmq:3-management
复制代码


参数说明:


  • -d 后台进程运行

  • hostname RabbitMQ 主机名称

  • name 容器名称

  • -p port:port 本地端口:容器端口

  • -p 15672:15672 http 访问端口

  • -p 5672:5672 amqp 访问端口


启动完成之后,使用:docker ps 查看程序运行情况。


使用:http://宿主ip:15672 访问,用户名密码使用默认:guest/guest.



这样我们就可以使用,http://宿主 ip:15672 和 http://宿主 ip:15673 进行访问了,默认账号密码依旧是 guest/guest


2.搭建 RabbitMQ 集群

2.1 运行容器

docker run -d --hostname rabbit1 --name myrabbit1 -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3-management
docker run -d --hostname rabbit2 --name myrabbit2 -p 5673:5672 --link myrabbit1:rabbit1 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3-management
docker run -d --hostname rabbit3 --name myrabbit3 -p 5674:5672 --link myrabbit1:rabbit1 --link myrabbit2:rabbit2 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3-management
复制代码


注意点:


  • 多个容器之间使用“--link”连接,此属性不能少。

  • Erlang Cookie 值必须相同,也就是 RABBITMQ_ERLANG_COOKIE 参数的值必须相同。

2.2 配置节点到集群

物理节点


docker exec -it myrabbit1 bashrabbitmqctl stop_apprabbitmqctl resetrabbitmqctl start_appexit
复制代码


内存节点 1


docker exec -it myrabbit2 bashrabbitmqctl stop_apprabbitmqctl resetrabbitmqctl join_cluster --ram rabbit@rabbit1rabbitmqctl start_appexit
复制代码


内存节点 2


docker exec -it myrabbit3 bashrabbitmqctl stop_apprabbitmqctl resetrabbitmqctl join_cluster --ram rabbit@rabbit1rabbitmqctl start_appexit
复制代码

2.3 配置成功

配置成功会出现如图三个节点


总结

1.Erlang Cookie 的作用

因为 RabbitMQ 是用 Erlang 实现的,Erlang Cookie 相当于不同节点之间相互通讯的秘钥,Erlang 节点通过交换 Erlang Cookie 获得认证。只需要保证每个节点 Erlang Cookie 相同就好

2.Erlang Cookie 的位置

Erlang Cookie 的路径就是“/var/lib/rabbitmq/.erlang.cookie”。

发布于: 刚刚阅读数: 2
用户头像

还未添加个人签名 2022.03.01 加入

该博客包括:.NET、Java、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、python、大数据等相关使用及进阶知识。查看博客过程中,如有任何问题,皆可随时沟通。

评论

发布
暂无评论
【愚公系列】2022年03月 Docker容器 RabbitMQ集群的搭建_Docker_愚公搬代码_InfoQ写作平台