Docker多主机搭建RabbitMQ集群

简介: 本文通过docker swarm建立多主机的Rabbitmq集群,自带配置文件,无需再次配置,直接启动即可3台主机,分别为:test01:192.168.1.10,角色:managertest02:192.168.1.20,角色:workertest03:192.168.1.30,角色:worker配置好各自的hostname

Docker多主机搭建RabbitMQ集群
本文通过docker swarm建立多主机的Rabbitmq集群,自带配置文件,无需再次配置,直接启动即可
3台主机,分别为:
test01:192.168.1.10,角色:manager
test02:192.168.1.20,角色:worker
test03:192.168.1.30,角色:worker
配置好各自的hostname
docker swarm
创建docker swarm集群
docker swarm init --advertise-addr 192.168.1.10Swarm initialized: current node (z2n633mty5py7u9wyl423qnq0) is now a manager. To add a worker to this swarm, run the following command: # 这就是添加节点的方式(要保存初始化后token,因为在节点加入时要使用token作为通讯的密钥) docker swarm join --token SWMTKN-1-2lefzq18zohy9yr1vskutf1sfb2a590xz9d0mjj2m15zu9eprw-2938j5f50t35ycut0vbj2sx0s 192.168.1.10:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
上面命令执行后,该机器自动加入到swarm集群。这个会创建一个集群token,获取全球唯一的 token,作为集群唯一标识。后续将其他节点加入集群都会用到这个token值。其中,--advertise-addr参数表示其它swarm中的worker节点使用此ip地址与manager联系。命令的输出包含了其它节点如何加入集群的命令。
因此,其它两个节点加入集群的话,只需要按照提示,输入:
docker swarm join --token SWMTKN-1-2lefzq18zohy9yr1vskutf1sfb2a590xz9d0mjj2m15zu9eprw-2938j5f50t35ycut0vbj2sx0s 192.168.1.10:2377
即可加入docker swarm集群
在manager服务器中确认新的两个workers已经加入
[root@test01 docker]# docker node lsID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSIONsdhq8qsmvptdge76nxe3shrug * test01 Ready Active Leader 19.03.1394gn5oj2so67wi63smjhdss69 test02 Ready Active 19.03.13lkl3pcqmuh43iwi4fjccmgg9r test03 Ready Active 19.03.13
创建网络
创建一个overlay的网络
docker network create -d overlay rabbitmq-cluster
如果已经有这个网络了先删除:bashdocker network rm rabbitmq-cluster
查看已创建好的网络
docker network ls
NETWORK ID NAME DRIVER SCOPE4fb77484d00e bridge bridge localfe2fe4e230f3 docker_gwbridge bridge local392f51dce275 host host localxyiiys695y3q ingress overlay swarme7e48d381800 none null localun13usga59lw rabbitmq-cluster overlay swarm
配置文件
我将项目目录规划在/docker/rabbitmq中,先建立持久化存储目录/docker/rabbitmq/data
在manager上创建rabbitmq的配置文件路径:/docker/rabbitmq/rabbitmq.conf,内容如下:
loopback_users.guest = falselisteners.tcp.default = 5672hipe_compile = falsedefault_user = admindefault_pass = admincluster_formation.peer_discovery_backend = rabbit_peer_discovery_classic_configcluster_formation.classic_config.nodes.1 = rabbit@rabbit1cluster_formation.classic_config.nodes.2 = rabbit@rabbit2cluster_formation.classic_config.nodes.3 = rabbit@rabbit3cluster_formation.node_type = ram
后面的cluster_formation.node_type = ram表示创建的是ram集群,如果不写,就是默认的disc集群。
创建docker config
docker config create rabbitmq-config /docker/rabbitmq/rabbitmq.conf
创建部署文件,我将它放在/docker/swarm/rabbitmq_swarm.yml
version: "3.7"services: rabbit1: image: rabbitmq:3.8.2-management hostname: rabbit1 environment: RABBITMQ_ERLANG_COOKIE: "liaoxingchen_test" volumes: - "/docker/rabbitmq/data:/var/lib/rabbitmq" configs: - source: rabbitmq-config target: /etc/rabbitmq/rabbitmq.conf ports: - "4369:4369" - "5671:5671" - "5672:5672" - "15671:15671" - "15672:15672" - "25672:25672" deploy: replicas: 1 placement: constraints: - node.hostname==test01 rabbit2: image: rabbitmq:3.8.2-management hostname: rabbit2 depends_on: - rabbit1 environment: RABBITMQ_ERLANG_COOKIE: "liaoxingchen_test" volumes: - "/docker/rabbitmq/data:/var/lib/rabbitmq" configs: - source: rabbitmq-config target: /etc/rabbitmq/rabbitmq.conf deploy: replicas: 1 placement: constraints: - node.hostname==test02 rabbit3: image: rabbitmq:3.8.2-management hostname: rabbit3 depends_on: - rabbit1 environment: RABBITMQ_ERLANG_COOKIE: "liaoxingchen_test" volumes: - "/docker/rabbitmq/data:/var/lib/rabbitmq" configs: - source: rabbitmq-config target: /etc/rabbitmq/rabbitmq.conf deploy: replicas: 1 placement: constraints: - node.hostname==test03networks: default: external: name: rabbitmq-clusterconfigs: rabbitmq-config: external: true
其中,RABBITMQERLANGCOOKIE,可以自定义,只需要保证3个service一样,即可。
启动集群
在test01上使用如下命令启动集群:
docker stack deploy -c /docker/swarm/rabbitmq_swarm.yml rabbitmq
此时,你可以使用任何一个节点的15672端口,来访问Rabbitmq集群
无配置文件
如果不带配置文件,也可启动集群后,手动配置。
将yaml文件中configs:相关内容去掉,再启动集群,然后进入test02和test03,进入容器,输入如下命令:
rabbitmqctl stop_apprabbitmqctl resetrabbitmqctl join_cluster --ram rabbit@rabbit1rabbitmqctl start_app
效果是一样的,而且也会持久化到映射的data目录中。
补充
查看集群状态
docker service ls
ID NAME MODE REPLICAS IMAGE PORTS8rlyppvidvjy rabbit_rabbit1 replicated 1/1 rabbitmq:3.8.2-management :4369->4369/tcp,:5671-5672->5671-5672/tcp, :15671-15672->15671-15672/tcp, :25672->25672/tcpjicd2n9dh0rd rabbit_rabbit2 replicated 1/1 rabbitmq:3.8.2-managementms4h7ljutm5n rabbit_rabbit3 replicated 1/1 rabbitmq:3.8.2-management
查看某一个service的状态,如,rabbit1
docker service ps rabbit_rabbit1
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTSsdih8hbhadfc rabbit_rabbit1.1 rabbitmq:3.8.2-management test01 Running Running 2 hours ago
删除服务,你可以挨个删除service,因为你同时启动了3个service,
docker service rm rabbit_rabbit1docker service rm rabbit_rabbit2docker service rm rabbit_rabbit3
也可以利用stack同时删除
docker stack rm rabbit
番外补充
Spring Boot 应用连接 RabbitMQ 集群配置
spring.rabbitmq.addresses=node1:5672,node2:5672,node3:5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=admin

相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
5月前
|
Prometheus 监控 Cloud Native
除了Prometheus,还有哪些工具可以监控Docker Swarm集群的资源使用情况?
除了Prometheus,还有哪些工具可以监控Docker Swarm集群的资源使用情况?
408 79
|
4月前
|
消息中间件 监控 Docker
Docker环境下快速部署RabbitMQ教程。
就这样,你成功地用魔法召唤出了RabbitMQ,还把它和你的应用程序连接了起来。现在,消息会像小溪流水一样,在你的系统中自由流淌。别忘了,兔子们不喜欢孤独,他们需要你细心的关怀,不时地监控它们,确保他们的世界运转得井井有条。
246 18
|
7月前
|
边缘计算 负载均衡 NoSQL
FreeMQTT Plus: 一个新型 MQTT Broker 集群的实现
FreeMQTT Plus 是一款基于 MQTT 协议的高性能消息中间件,采用分布式架构解决单点瓶颈问题。其核心由 Nginx 负载均衡器、黑(A)节点(MQTT Broker)、白(B)节点(消息路由)和日志(L)节点组成。通过无主从设计,支持高可用性、负载均衡与灵活扩展。针对会话同步、消息路由等挑战,FreeMQTT Plus 利用 MQTT5 特性定义元命令,实现节点间高效通信,无需依赖第三方组件。适用于物联网海量设备接入与高并发场景,为未来边缘计算和多级集群部署提供坚实基础。
1181 74
|
8月前
|
消息中间件 监控 RocketMQ
Docker部署RocketMQ5.2.0集群
本文详细介绍了如何使用Docker和Docker Compose部署RocketMQ 5.2.0集群。通过创建配置文件、启动集群和验证容器状态,您可以快速搭建起一个RocketMQ集群环境。希望本文能够帮助您更好地理解和应用RocketMQ,提高消息中间件的部署和管理效率。
1038 91
|
10月前
|
Prometheus 监控 Cloud Native
如何监控Docker Swarm集群的性能?
如何监控Docker Swarm集群的性能?
523 64
|
10月前
|
消息中间件 存储 运维
2024最全RabbitMQ集群方案汇总
本文梳理了RabbitMQ集群的几种方案,主要包括普通集群、镜像集群(高可用)、Quorum队列(仲裁队列)、Streams集群模式(高可用+负载均衡)和插件方式。重点介绍了每种方案的特点、优缺点及适用场景。搭建步骤包括安装Erlang和RabbitMQ、配置集群节点、修改hosts文件、配置Erlang Cookie、启动独立节点并创建集群,以及配置镜像队列以提高可用性和容错性。推荐使用Quorum队列与Streams模式,其中Quorum队列适合高可用集群,Streams模式则同时支持高可用和负载均衡。此外,还有Shovel和Federation插件可用于特定场景下的集群搭建。
1897 2
|
10月前
|
Prometheus 监控 Cloud Native
如何使用Prometheus监控Docker Swarm集群的资源使用情况?
还可以根据实际需求进行进一步的配置和优化,如设置告警规则,当资源使用超出阈值时及时发出警报。通过这些步骤,能够有效地使用 Prometheus 对 Docker Swarm 集群的资源进行监控和管理。
367 8
|
10月前
|
消息中间件 RocketMQ
2024最全RocketMQ集群方案汇总
在研究RocketMQ集群方案时,发现网上存在诸多不一致之处,如组件包含NameServer、Broker、Proxy等。通过查阅官方文档,了解到v4.x和v5.x版本的差异。v4.x部署模式包括单主、多主、多主多从(异步复制、同步双写),而v5.x新增Local与Cluster模式,主要区别在于Broker和Proxy是否同进程部署。Local模式适合平滑升级,Cluster模式适合高可用需求。不同模式下,集群部署方案大致相同,涵盖单主、多主、多主多从等模式,以满足不同的高可用性和性能需求。
1392 0
|
消息中间件 Linux
centos7 yum快速安装rabbitmq服务
centos7 yum快速安装rabbitmq服务
399 0
|
消息中间件 中间件 微服务
RabbitMQ 入门简介及安装
RabbitMQ 入门简介及安装
273 0