集群部署方式rabbitmq一共有三种部署分布式集群系统的方式。ClusterFederationShovel开始学习Cluster。我们通常使用单机模式进行本地开发。这仅供本地使用。生产环境一般是Cluster集群。Cluster集群一般分为两种,普通集群模式和镜像集群模式。使用cluster集群一般有一些前提:属于同一网段的LAN节点不支持跨网段Rabbitmq和erlang版本需要相同不同rabbitmq节点使用的'.erlang.cookie'需要consistent理解一些概念。节点类型磁盘节点(disc):在磁盘中存储元数据,单节点系统只允许磁盘类型的节点,以防止RabbitMQ重启时系统配置信息丢失。·内存节点(ram):内存节点将队列、交换机、绑定、用户、权限和虚拟主机的所有元数据定义存储在内存中。优点是可以更快地进行开关和队列声明等操作。集群元数据RabbitMQ内部有各种基本组件,包括队列、交换机、绑定、虚拟主机等,这些组件以元数据的形式存在:队列元数据:队列的名称和声明队列时设置的属性(是否ispersistent是否自动删除,队列所属的节点)Exchange元数据:交换机的名称、类型、属性(是否持久化等)Binding元数据:一个简单的表,显示如何将消息路由到队列。包含的列包括Exchange名称、Exchange类型、routing\_key、queue\_name等。vhost元数据:为vhost中的队列、交换机和绑定提供命名空间和安全属性。一般rabbitmq启动时默认是磁盘节点。1,普通普通模式模式rabbitmq01divabbitmq02disc在兔子在rabbitmq02上上进行进行进行,执行执行执行集群####rabbitmqctlstop_appstoppingrabbit应用程序xnklxnklxnklxnklxnkl@rabbitmq02...xnkl@rabbitmq02...完成了3个插件。#看rabbitmq02控制台,显示加入集群正常,然后在rabbitmq02上操作,添加exchange。可以看到在添加交换机的时候,并没有节点配置的选项。这是因为rabbitmq集群所有节点上exchange的元数据都是一样的,并没有说属于某个节点。然后添加一个队列,可以看到添加队列的时候可以选择一个节点配置。意思是指定这个队列的属主节点。然后在rabbitmq01的控制台查看,rabbitmq02上添加的exchange和queue可以同步到rabbitmq01上。通过PHP脚本发布消息(PHP脚本连接rabbitmq01节点),发现rabbitmq01和rabbitmq02都可以查看消息,然后在rabbitmq01上设置consumer取出消息并ack,发现两个节点的队列'queue02'没有消息。说明此时消息同步正常。为了测试,将5条消息发布到队列“queue02”中,所有这些消息都是持久消息。继续测试异常。因为'queue02'属于节点rabbitmq02,现在关闭rabbitmq02服务。当rabbitmq02服务异常时,可以在rabbitmq01的控制台看到'queue02'队列的状态为'down',无法正常查看队列详情。并通过控制台开关列表,查看队列的绑定关系,发现绑定暂时消失了。此时通过PHP脚本发布消息,发现无法正常投递(basic_publish),触发'return_listener'。以下是PHP脚本记录的日志内容。如果再次声明队列(queue_declare),会报错“NOT_FOUND-homenode'xnkl@rabbitmq02'ofdurablequeue'queue02'invhost'/'isdownorinaccessible”。如果设置消费者消费队列(basic_consume),会报错NOT_FOUND-nopreviouslydeclaredqueue2020-04-2317:15:03.579[ERROR]-[23]-[App\Utility\RabbitMQ\MQCommon.App\Utility\RabbitMQ\{closure}.(/www/mqs/App/Utility/RabbitMQ/MQCommon.php:323)]:MQS_MSG_PUBLISH_ERROR|消息未传送到目标队列|replyCode:312|replyText:NO_ROUTE|exchangeName:exchange02|routingKey:exchange02|logMark:|msg:createTime:1587633303usedCount:0当队列的owner节点服务失败时,其他节点无法操作队列(包括队列声明、队列消费、消息投递),而出现一些异常情况(包括队列状态为‘down’,队列的绑定会暂时消失),只能等待节点服务恢复正常,这是普通集群模式的不足之处。当rabbitmq02服务恢复正常后,在控制台面板观察情况,队列元数据、绑定元数据、队列消息都恢复正常。·····Rabbitmq02在上面的测试中是磁盘节点,现在换成内存节点再测试。在更改磁盘节点类型之前,需要先停止rabbitmq服务,否则会报错。执行以下命令:##rabbitmqctlchange_cluster_node_typeramError:此命令需要在目标节点上停止“rabbit”应用程序。使用“rabbitmqctlstop_app”停止它。给出的参数:change_cluster_node_typeramUsagerabbitmqctl[--node
