rabbitMQ的集群方式和镜像队列
一、rabbitMQ的集群方式
(1)先配置集群每台机器的hosts文件:
[root@yangjuanying sbin]# vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.139.128 yangjuanying
192.168.139.129 yangjuanying1
192.168.139.130 yangjuanying2
(2)确保每台机的 $home/.erlang.cookie 文件的值一致
Rabbitmq的集群是依附于erlang的集群来工作的,所以必须先构建起erlang的集群景象。Erlang的集群中各节点是经由过程一个magic cookie来实现的,这个cookie存放在 $home/.erlang.cookie 中(像我的root用户安装的就是放在我的root/.erlang.cookie中),文件是400的权限。所以必须包管各节点cookie对峙一致,不然节点之间就无法通信。
复制cookie内容
打开文件然后需要先把其中的一台服务器的.erlang.cookie中的内容复制到别的机器上,最好是复制内容,因为文件权限不对的话会出现问题,在最后退出保存的时候使用wq!用!来进行强制保存即可.
(3)集群配置
Master:
[root@yangjuanying sbin]# rabbitmq-server start &
[root@yangjuanying sbin]# rabbitmqctl stop_app
Stopping node rabbit@yangjuanying ...
[root@yangjuanying sbin]# rabbitmqctl reset
Resetting node rabbit@yangjuanying ...
[root@yangjuanying sbin]# rabbitmqctl start_app
Starting node rabbit@yangjuanying ...
Slave1:
[root@yangjuanying1 sbin]# rabbitmq-server start &
[root@yangjuanying1 sbin]# rabbitmqctl stop_app
Stopping node rabbit@yangjuanying1 ...
[root@yangjuanying1 sbin]# rabbitmqctl reset
Resetting node rabbit@yangjuanying1 ...
[root@yangjuanying1 sbin]# rabbitmqctl change_cluster_node_type ram
[root@yangjuanying1 sbin]# rabbitmqctl join_cluster rabbit@yangjuanying
Clustering node rabbit@yangjuanying1 with rabbit@yangjuanying ...
[root@yangjuanying1 sbin]# rabbitmqctl start_app
Starting node rabbit@yangjuanying1 ...
[root@yangjuanying1 sbin]#
Slave2:
[root@yangjuanying2 sbin]# rabbitmq-server start &
[root@yangjuanying2 sbin]# rabbitmqctl stop_app
Stopping node rabbit@yangjuanying2 ...
[root@yangjuanying2 sbin]# rabbitmqctl reset
Resetting node rabbit@yangjuanying2 ...
[root@yangjuanying2 sbin]# rabbitmqctl change_cluster_node_type ram
[root@yangjuanying2 sbin]# rabbitmqctl join_cluster rabbit@yangjuanying
Clustering node rabbit@yangjuanying2 with rabbit@yangjuanying ...
[root@yangjuanying2 sbin]# rabbitmqctl start_app
Starting node rabbit@yangjuanying2 ...
遇到问题:
由于搭建完集群没有正常关闭rabbitmq节点而直接对3台虚拟机关机,导致第二天启动虚拟机并启动rabbitmq节点时起不来,报错找不到从节点yangjuanying1和yangjuanying2,由于自己安装的rabbitmq是绿色版的,目前暂时的做法是把rabbitmq安装文件夹删除并重新解压配置,解决方法有待改进。
要是错误信息中提示有主节点冲突的话,可以进入到一下目录修改相应的文件
可尝试解决方式:
[root@yangjuanying bin]# cd /usr/local/soft/rabbitmq/rabbitmq_server-3.5.3/var/lib/rabbitmq/mnesia/
[root@yangjuanying mnesia]# vi rabbit\@yangjuanying/cluster_nodes.config
编辑集群配置文件cluster_nodes.config,或者直接将这个目录里的文件全都删除,这个是集群的配置文件和持久化的数据存储位置,能改则改实在是迫不得已再删除
======================================
查看集群状态:
[root@yangjuanying sbin]# rabbitmqctl cluster_status
Cluster status of node rabbit@yangjuanying ...
[{nodes,[{disc,[rabbit@yangjuanying,rabbit@yangjuanying1,
rabbit@yangjuanying2]}]},
{running_nodes,[rabbit@yangjuanying2,rabbit@yangjuanying1,
rabbit@yangjuanying]},
{cluster_name,<<"rabbit@yangjuanying">>},
{partitions,[]}]
[root@yangjuanying sbin]#
[root@yangjuanying1 sbin]# rabbitmqctl cluster_status
Cluster status of node rabbit@yangjuanying1 ...
[{nodes,[{disc,[rabbit@yangjuanying,rabbit@yangjuanying1,
rabbit@yangjuanying2]}]},
{running_nodes,[rabbit@yangjuanying2,rabbit@yangjuanying,
rabbit@yangjuanying1]},
{cluster_name,<<"rabbit@yangjuanying">>},
{partitions,[]}]
[root@yangjuanying1 sbin]#
[root@yangjuanying2 sbin]# rabbitmqctl cluster_status
Cluster status of node rabbit@yangjuanying2 ...
[{nodes,[{disc,[rabbit@yangjuanying,rabbit@yangjuanying1,
rabbit@yangjuanying2]}]},
{running_nodes,[rabbit@yangjuanying,rabbit@yangjuanying1,
rabbit@yangjuanying2]},
{cluster_name,<<"rabbit@yangjuanying">>},
{partitions,[]}]
[root@yangjuanying2 sbin]#
看到每台机的状态几乎一致,普通的集群模式已经建立完成了。
二、rabbitMQ的镜像队列
上述配置的RabbitMQ默认集群模式,但并不包管队列的高可用性,尽管互换机、绑定这些可以复制到集群里的任何一个节点,然则队列内容不会复制,固然该模式解决一项目组节点压力,但队列节点宕机直接导致该队列无法应用,只能守候重启,所以要想在队列节点宕机或故障也能正常应用,就要复制队列内容到集群里的每个节点,须要创建镜像队列。
镜像队列是基于普通的集群模式的,所以你还是得先配置普通集群,然后才能设置镜像队列.
我是通过网页的管理端来设置的镜像队列,也可以通过命令,官方有例子. http://www.rabbitmq.com/ha.html 打开之后翻到最下边有两个例子,可以参考看看,这里只说其中的网页设置的
>1.点击admin菜单-->右侧的Policies选项-->左侧最下下边的Add / update a policy
>2.按照图中的内容根据自己的需求填写
>3.点击Add policy添加策略
此时你就会来你的两台rabbitmq服务器的网页管理端amind菜单下看见刚才创建的队列了.
下面我们来添加一个queues队列来看看效果,这里只是测试结果,其它的先不填写
注意红框中的 x-ha-policy = all 这个,网上说没有这个不会进行复制,但是我测试的时候好像可以复制的,至少queues队列是可以的,先添上吧.
在这里边添加的时候你是可以指定Node选项也就是把这个queues放在哪个node节点上,不过做镜像的时候就没有必要了
添加完成后你会看到这个效果(添加队列时,Auto Delete勾选为Yes,就会是HA方式的镜像队列)
当鼠标移到+2,可以看到ab这个队列做了镜像队列,所以yangjuanying,yangjuanying1和yangjuanying2上各有一个队列,当yangjuanying,yangjuanying1和yangjuanying2任意一台机器挂掉的时候,标志+2会消失,变成+1或消失(剩下n个正常的节点,就显示其中一个正常节点以及【+n-1】),等节点恢复以后,也恢复成+2(总共3个节点),如果不做镜像队列,如ba和bb,当节点挂了就消失了,重启后依旧消失
相关推荐
2. 节点同步:RabbitMQ使用镜像队列策略,确保消息在集群中多个节点间同步,保证数据一致性。 3. 故障转移:当某个节点故障时,集群能自动将该节点上的工作负载转移到其他正常节点,保证服务不间断。 4. 集群扩展...
这些节点通过 RabbitMQ HA 队列(镜像队列)进行消息队列结构复制。本方案中搭建 3 个节点,并且两个内存节点一个磁盘节点(所有节点状态保持一致,节点完全对等),只要有任何一个节点能够工作,RabbitMQ 集群...
3. **数据一致性**:在RabbitMQ集群中,数据一致性是通过镜像队列实现的。镜像队列会在所有集群节点上复制,确保即使某个节点失效,消息也不会丢失。 4. **节点类型**:RabbitMQ节点有三种类型: disc节点、ram节点...
在RabbitMQ集群中,客户端可以直接连接到包含目标队列的节点进行消息的发布和订阅。如果客户端连接到非目标队列所在的节点,那么该节点会将请求转发给实际的队列节点。 例如,假设客户端连接到节点N2,而目标队列Q...
实战篇还将涵盖高级主题,如死信队列(Dead Letter Queue)、延迟队列(Delayed Queue)、高可用集群(Clustering)和镜像队列(Mirrored Queues)等。这些都是在生产环境中确保RabbitMQ稳定性和高可用性的关键配置...
总的来说,RabbitMQ的镜像队列通过策略配置和特定的进程结构实现了跨节点的消息镜像,增强了集群的高可用性和数据一致性。对于需要高可靠性的业务场景,镜像队列是确保服务连续性和数据安全的有效手段。
RabbitMQ集群的建立得益于Erlang的分布式特性,通过同步各个节点间的“magic cookie”来实现节点间的通信和认证。集群的主要目标是提供高可用性,当一个节点故障时,其他节点可以接管服务,确保业务连续性。此外,...
1. **镜像队列**:为了保证高可用,可以设置镜像队列,使消息在多个节点间复制。即使某个节点失败,其他节点仍能提供服务。 2. **自动故障恢复**:RabbitMQ 支持自动故障检测和恢复,当节点故障时,其上的队列会被...
- 在分布式系统中,RabbitMQ支持集群和镜像队列,提供高可用性和数据冗余,确保消息不丢失。 8. **AMQP协议**: - AMQP是标准的消息传递协议,它定义了消息的格式和传输机制,确保跨平台兼容性。 总结,这个资源...
2. **AMQP协议**:AMQP是面向消息的中间件协议,支持多种语言和平台,定义了通用的消息模型,包括信道、交换器、队列和绑定等概念,使得消息的路由和处理更为灵活。 3. **RabbitMQ架构**:RabbitMQ由服务器、客户端...
- 镜像队列功能可以保证队列的数据在集群中的多个节点间同步,确保故障切换时无数据丢失。 综上所述,通过下载并安装提供的Erlang和RabbitMQ安装包,你可以构建一个稳定的消息队列系统,利用其优势来优化你的应用...
总的来说,这个压缩包提供了一个完整的流程,从安装Erlang、RabbitMQ,到构建镜像集群,再到配置HAProxy和Keepalived,最后到管理RabbitMQ的服务,覆盖了搭建高可用RabbitMQ集群的全过程。每个步骤都需要仔细理解和...
- **高可用性**:通过集群和镜像队列实现跨节点的数据复制,确保服务的连续性。 - **多种协议支持**:除了AMQP外,还支持STOMP、MQTT等多种消息协议。 - **多语言客户端**:提供了丰富的编程语言客户端,包括Java...
- Federation和Shovel:跨集群的解决方案,用于消息在不同RabbitMQ集群间传输。 5. **最佳实践** - 消息确认:启用消息确认机制,确保消息已被正确处理,防止消息丢失。 - 消费者确认:消费者确认模式可以保证...
- **镜像队列**:为了提高数据安全性,可以配置镜像队列,使得队列的数据在集群的所有节点上都存在副本。然而,这会增加网络延迟,因此建议仅在本地局域网内使用。 - **Erlang Cookie**:所有要连接到同一个RabbitMQ...
可变数量的生产者和消费者将与跨集群的两个节点的镜像队列进行交互。 这些节点会根据场景突然关闭并恢复。 我们确保所有预期的消息都将被生产和消费,而不会造成任何服务中断。 自动生成图表以进行跟踪和分析: ...
* 高可用的队列:RabbitMQ支持队列的镜像和复制,确保消息的安全和可靠性。 RabbitMQ的应用场景包括: * 消息队列:RabbitMQ可以用来实现消息队列,用于异步处理和推送通知。 * 工作队列:RabbitMQ可以用来实现...
此外,还会讨论如何设置镜像队列,进一步提高数据的安全性和一致性。 消息路由和交换机是RabbitMQ的核心功能之一。书中会深入讲解各种类型的交换机(如Direct、Fanout、Topic和Header),以及它们在不同场景下的...
集群能够扩展RabbitMQ的处理能力,镜像队列则提供了主备复制,保证即使节点故障,服务也能不间断。 最后,书中还会涉及RabbitMQ与其他系统的集成,如Spring框架中的整合,以及如何通过监控和日志来优化和排查问题。...