Windows 下搭建RabbitMQ集群

简介:

RabbitMQWindows集群操作

 

1、下载Erlang程序,可以在http://www.erlang.org/download.html这个地方找到最新的Erlang/OTP

2、安装rabbitmq-server-windows程序,下载http://www.rabbitmq.com/server.html

3、分别在每个集群机器上面配置hosts文件,里面是机器的IP地址和机器的名称

例如:192.168.1.26 rabbitmqwin1

           192.168.1.40 rabbitmqwin2

4、集群时需要保证erlang的cookie各个机器一致,否则无法通信。

任意选择一台集群中的机器,进入到C:\Windows目录下,找到.erlang.cookie文件,复制该文件并替换其他各个机器,再把该文件复制到每台集群机器的目录:C:\Users\Administrator  下。保证所有机器下面的这两个目录下的cookie文件内容一致。

5、命令行方式

  1. 将各节点的rabbitmq服务开启: rabbitmq-service start 

  2. 选择其中一个节点将其停止: rabbitmqctl stop_app

  3. 将步骤2中的机器加入集群: rabbitmqctl join_cluster (--ram) rabbit@hostname

(ram 为内存节点, 默认情况下为disc磁盘节点) 注意此时的node在windows机器下面是大写的。

  1. 开启rabbitmq服务: rabbitmqctl start_app

  2. 查看集群状况: rabbitmqctl cluster_status

  

*以上是单个节点加入集群的方式,只要一个节点加入到集群中的任何一个节点,该节点就算是加入到了集群中.


6、自动化集群

2  关闭所有节点的服务: rabbitmqctl stop_app, rabbitmqctl reset, rabbitmqctl stop

2  在各节点机器下C:\Users\Administrator\AppData\Roaming\RabbitMQ 创建rabbitmq.config文件, 内容为

[{rabbit, [{cluster_nodes, {['rabbit@hostname', 'rabbit@hostname'], disc}}]}].

该配置方式和命令行一样,可以一次将所有节点都写在配置中,也可以只写集群中的一个节点,disc也可改为ram

2  启动所有节点: rabbitmq-server –detached

2  查看集群状况: rabbitmqctl cluster_status

 在镜像状况下查看队列的Mater-Slave关系

rabbitmqctl -n [nodename] list_queues name pid slave_pids

在镜像状况下查看队列的Mater-Slave关系及队列的同步状况

rabbitmqctl -n [nodename] list_queues name pid slave_pids synchronised_slave_pids

更多命令请看:

http://www.rabbitmq.com/man/rabbitmqctl.1.man.html


Windows下的rabbitmq的开启与停止也可以在计算机服务中进行手动的开启和停止的。尽量不要用自带的服务,可以使其停止。


 erlang profiler tool:

 C:\Program Files\erl5.10.1\lib\observer-1.3\priv\bin

命令:etop  perf -node rabbit@RABBITMQWIN2 -tracing off



队列镜像


  1. 镜像的意义:

因为集群只是将各个node的元数据复制到各个node,但是每个node的queue及其内容不会复制过去,所以当发生某个node down了,那么这个节点的队列内容就丢失了,而镜像则是将queue中的内容复制到设定的其他node中。

  1. Mirrio Queue Behavior

2.1    一个队列镜像会在各个node中建立master-slave队列,一旦master中的队列接   收到了消息,则该消息会同步到slave的队列中,并且保证顺序一致。

2.2    如果镜像队列的slave node挂了,那么client不会有什么影响或收到通知

2.3    如果镜像队列的master node挂了,那么其中一个slave会自动接替为master,并会发生如下变化:

2.3.1          最老的那个slave会被提升为master,因为它最有可能包含最多的master消息,如果之前没有同步,则master中的部分消息会丢失.

2.3.2          Slave node会认为之前所有的consumers突然断线,结果就是它会将所有已发出但是还没收到确认的消息重新发送出去,可能consumers已经接收过了,但是对于new master来说,它别无选择。

2.3.3          如果consumer client支持Consumer Cancellation Notifications扩展,那么将会接收一个通知,表明他们订阅的镜像队列已经突然取消了。这时应该re-consume new master的镜像队列,需要重新和存活下来的集群node建立连接。

2.3.4          对于re-comsume 来说,有可能会接收到之前接收过的消息

2.4    Publish client 仍然会接收到confirm消息即便是master(或任何slave)在消息发布后和confirm消息在发送过程中fail了。

2.5    镜像队列支持Confirm和Transactions,当镜像队列中所有的节点的队列都得到应用之后,confirm或transactions才会被认为成功。

  1. 未同步的Slaves

一个新的node加入到cluster后,该node中的队列是空的,不包含任何已有的队列中的内容,当前,没有对已有内容的同步协议。只能从加入之后开始同步接收到的消息。当之前已有的消息都被取走以后,那么该队列才会被认为是和master中的相关队列同步了。所以建议在配置镜像之前就先将各个node加入到cluster,这样就能确保所有Node中的镜像队列都是已同步的。

可以通过以下命令查看已同步的slaves:

Rabbitmqctl list_queues name slave_pids synchronised_slave_pids

  1. 开始和停止node

如果停止了包含镜像master队列的node, 那么其他的slave会被提升为master。如果继续停止,则最后一个node(支持持久化)停止后,它的镜像队列的内容会在该node重启以后恢复,但是如果这时重启了其他的node,则那么node会重新加入镜像队列,不过它们本地所包含的内容或被丢弃,就好像它们是新加入的一样。

  1. 配置镜像

队列通过policy开启镜像功能。在任何时候可以修改policy,也可以先创建非镜像队列,然后让它变成镜像队列,反之亦然。非镜像队列相比镜像队列会运行得更快,因为它不包含额外的镜像基础结构。


      

ha-mode

ha-params

Result

all

匹配policy的队列会在所有的node中建立镜像,当一个新的node加入,自动在该node中创建那个匹配的队列

exactly

数量

在指定数量的nodes中创建匹配policy队列镜像。如果cluster中node个数少于指定数量,则同all.如果多于指定数量,并且其中包含镜像的node挂了,那么不会在其他没有创建镜像的node中创建镜像

nodes

node names

在指定名字的node中创建匹配policy队列的镜像。如果cluster中不包含任何指定的node,不会引发错误。如果指定的node在队列声明时都不在线,那么队列将会在client连接的那个node上创建。


      案例:


      创建一个名字以ha.开头的队列的镜像到集群中所有的nodes中

     

rabbitmqctl

rabbitmqctl set_policy ha-all "^ha\." '{"ha-mode":"all"}'

rabbitmqctl (Windows)

rabbitmqctl set_policy ha-all "^ha\." "{""ha-mode"":""all""}"

HTTP API

PUT /api/policies/%2f/ha-all {"pattern":"^ha\.", "definition":{"ha-mode":"all"}}

Web UI

  • Navigate to Admin > Policies > Add / update a policy.

  • Enter "ha-all" next to Name, "^ha\." next to Pattern, and "ha-mode" = "all" in the first line next to Policy.

Click Add policy.


       创建一个名字以two.开头的队列的镜像到集群中任意2个nodes中:


      

rabbitmqctl

rabbitmqctl set_policy ha-two "^two\." \

   '{"ha-mode":"exactly","ha-params":2}'

rabbitmqctl (Windows)

rabbitmqctl set_policy ha-two "^two\." ^

   "{""ha-mode"":""exactly"",""ha-params"":2}"

HTTP API

PUT /api/policies/%2f/ha-two {"pattern":"^two\.", "definition":{"ha-mode":"exactly", "ha-params":2}}

Web UI

  • Navigate to Admin > Policies > Add / update a policy.

  • Enter "ha-two" next to Name and "^two\." next to Pattern.

  • Enter "ha-mode" = "exactly" in the first line next to Policy, then "ha-params" = 2 in the second line, and set the type on the second line to "Number".

Click Add policy.











本文转自 曾哥最爱 51CTO博客,原文链接:http://blog.51cto.com/zengestudy/1886596,如需转载请自行联系原作者

相关实践学习
快速体验阿里云云消息队列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
目录
相关文章
|
8月前
|
边缘计算 负载均衡 NoSQL
FreeMQTT Plus: 一个新型 MQTT Broker 集群的实现
FreeMQTT Plus 是一款基于 MQTT 协议的高性能消息中间件,采用分布式架构解决单点瓶颈问题。其核心由 Nginx 负载均衡器、黑(A)节点(MQTT Broker)、白(B)节点(消息路由)和日志(L)节点组成。通过无主从设计,支持高可用性、负载均衡与灵活扩展。针对会话同步、消息路由等挑战,FreeMQTT Plus 利用 MQTT5 特性定义元命令,实现节点间高效通信,无需依赖第三方组件。适用于物联网海量设备接入与高并发场景,为未来边缘计算和多级集群部署提供坚实基础。
1417 74
|
9月前
|
消息中间件 监控 RocketMQ
Docker部署RocketMQ5.2.0集群
本文详细介绍了如何使用Docker和Docker Compose部署RocketMQ 5.2.0集群。通过创建配置文件、启动集群和验证容器状态,您可以快速搭建起一个RocketMQ集群环境。希望本文能够帮助您更好地理解和应用RocketMQ,提高消息中间件的部署和管理效率。
1277 91
|
传感器 网络协议 物联网
手把手教你在 Windows 环境中搭建 MQTT 服务器
手把手教你在 Windows 环境中搭建 MQTT 服务器
1729 0
EMQ
|
物联网 Linux C语言
在 Windows 平台搭建 MQTT 服务
NanoMQ 有着强大的跨平台和可兼容能力,不仅可以用于以 Linux 为基础的各类平台,也为 Windows 平台提供了 MQTT 服务的新选择。
EMQ
425 87
在 Windows 平台搭建 MQTT 服务
|
11月前
|
消息中间件 存储 运维
2024最全RabbitMQ集群方案汇总
本文梳理了RabbitMQ集群的几种方案,主要包括普通集群、镜像集群(高可用)、Quorum队列(仲裁队列)、Streams集群模式(高可用+负载均衡)和插件方式。重点介绍了每种方案的特点、优缺点及适用场景。搭建步骤包括安装Erlang和RabbitMQ、配置集群节点、修改hosts文件、配置Erlang Cookie、启动独立节点并创建集群,以及配置镜像队列以提高可用性和容错性。推荐使用Quorum队列与Streams模式,其中Quorum队列适合高可用集群,Streams模式则同时支持高可用和负载均衡。此外,还有Shovel和Federation插件可用于特定场景下的集群搭建。
2397 2
|
11月前
|
消息中间件 RocketMQ
2024最全RocketMQ集群方案汇总
在研究RocketMQ集群方案时,发现网上存在诸多不一致之处,如组件包含NameServer、Broker、Proxy等。通过查阅官方文档,了解到v4.x和v5.x版本的差异。v4.x部署模式包括单主、多主、多主多从(异步复制、同步双写),而v5.x新增Local与Cluster模式,主要区别在于Broker和Proxy是否同进程部署。Local模式适合平滑升级,Cluster模式适合高可用需求。不同模式下,集群部署方案大致相同,涵盖单主、多主、多主多从等模式,以满足不同的高可用性和性能需求。
1617 0
|
消息中间件 存储 负载均衡
|
消息中间件 存储 负载均衡
"RabbitMQ集群大揭秘!让你的消息传递系统秒变超级英雄,轻松应对亿级并发挑战!"
【8月更文挑战第24天】RabbitMQ是一款基于AMQP的开源消息中间件,以其高可靠性、扩展性和易用性闻名。面对高并发和大数据挑战时,可通过构建集群提升性能。本文深入探讨RabbitMQ集群配置、工作原理,并提供示例代码。集群由多个通过网络连接的节点组成,共享消息队列,确保高可用性和负载均衡。搭建集群需准备多台服务器,安装Erlang和RabbitMQ,并确保节点间通信顺畅。核心步骤包括配置.erlang.cookie文件、使用rabbitmqctl命令加入集群。消息发布至任一节点时,通过集群机制同步至其他节点;消费者可从任一节点获取消息。
228 2
|
消息中间件 RocketMQ
MetaQ/RocketMQ 原理问题之当消费集群规模较大时,处理分配不到队列的Consumer的问题如何解决
MetaQ/RocketMQ 原理问题之当消费集群规模较大时,处理分配不到队列的Consumer的问题如何解决
201 4
|
消息中间件 Prometheus 监控
消息队列 MQ使用问题之如何将旧集群的store目录迁移到新集群
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。

热门文章

最新文章