单个RabbitMQ必须无法实现高可用性。如果您想可用,则还必须转到集群。
今天,我将与您谈谈RabbitMQ群集的构建。
当涉及簇时,第一个问题可能是,如果我有兔子集群,它是否保存了我的新闻集群中的每个实例之一?
实际上,这涉及两种模式的RabbitMQ群集:
普通的群集模式是将RabbitMQ部署到多个服务器。每个服务器启动兔子实例并在多个实例之间进行通信。
其他队列。
当我们消耗消息时,如果我们连接到另一个实例,则该实例将定位队列通过元数据的位置,然后访问队列所在的实例,请拉动数据将其发送给消费者。
该集群可以改善RabbitMQ的新闻吞吐量,但不能保证可用,因为一旦悬挂了RabbitMQ实例,就无法访问该消息。如果新闻队列耐用,那么在恢复了RabbitMQ示例之后,您可以继续采访;如果新闻队列不耐用,那么新闻将会丢失。
一般流程图如下所示:
IT和普通群集之间的最大区别是Q Q QIUE数据和原始数据不再仅存储在一台计算机上,而是同时存储在多台计算机上。数据)。每个时间写消息,数据将自动同步到多个实例。这样,一旦一台机器失效,其他机器就会有一个复制数据,以继续提供服务,这将获得高可用性。
一般流程图如下所示:
RabbitMQ中有两种类型的节点:
RabbitMQ在集群中至少需要一个磁盘节点。所有其他节点都可以是内存节点。当添加节点或留下群集时,必须将更改通知至至少一个磁盘节点。如果群集中唯一的磁盘节点倒塌,则仍然可以维护群集,但是无法执行其他操作(添加,删除,删除和删除和删除和更改)直到节点恢复为止。按顺序确保群集信息的可靠性,或者当磁盘节点或内存节点不确定时,建议直接使用磁盘节点。
粗糙的结构理解,然后我们将设置群集。从普通簇开始,我们使用Docker来构建。
在施工之前,每个人都需要了解两种准备知识:
执行以下命令创建三个RabbitMQ容器:
运行结果如下:
这三个节点现在启动。请注意,在MQ02和MQ03中,参数用于实现容器连接。关于此参数,如果您不明白,可以在公共帐户中的少量降雨背景中回复docker。指出MQ03容器必须能够连接到MQ01或MQ02。
接下来,输入MQ02容器,首先检查主机文件。您可以看到我们配置的容器连接已生效:
将来,在MQ02容器中,您可以通过MyLink01或Rabbit01访问MQ01容器。
接下来,我们开始群集的配置。
执行以下命令将MQ02容器连接到群集:
接下来,输入以下命令,我们可以查看集群的状态:
可以看出,集群中已经有两个节点。
接下来,以相同的方式将MQ03添加到集群中:
接下来,我们可以查看群集信息:
可以看出,此时群集中已经有三个节点。
实际上,目前,我们还可以通过网页查看群集信息。在三个RabbitMQ实例的网络末端主页上,我们可以看到以下内容:
让我们简要测试这个集群。
我们创建一个名为MQ_CLUSTER_DEMO的父工程,然后在其中创建两个sub -project。
第一个子项目称为提供商。这是一个消息生产商,在创建时引入Web和RabbitMQ依赖项,如下:
然后配置适用于properties,内容如下(请注意群集配置):
接下来提供一个简单的队列,如下:
这无话可说,所有这些都是基本内容。下一个
成功发送此消息后,在RabbitMQ的Web管理端,我们将看到三个RabbitMQ实例上会有一个消息,但实际上,该消息本身仅存在于RabbitMQ实例中。
接下来,我们创建一个消息消费者。消息消费者的依赖性和配置和消息生产者完全相同。我不会重复。消息消费者添加了一个消息接收器:
当消息消费者成功启动时,此方法中只收到了一条消息,该消息进一步验证了我们构建的RabbitMQ群集是可以的。
接下来,Song兄弟给了另外两个对策,以证明该消息与其他RabbitMQ实例没有同步。
确保三个RabbitMQ实例是启动,关闭消费者,然后通过提供商发送消息。发送成功后,关闭了MQ01实例,然后将启动消费者实例。此时,连接无法连接,此示例可以表明该消息已在MQ01上,并且尚未与其他两个MQS.在相反的情况下同步,如果提供商成功发送消息,我们没有关闭MQ01实例与其关闭MQ02实例,您会发现消息的消耗不受影响。
SO称为的镜像群集模式不需要构建,我们只需要将队列配置为镜子队列即可。
可以通过网页或命令行配置配置此配置,我们可以单独查看它。
让我们看一下如何在网页上配置镜像队列。
单击“管理员”选项卡,然后单击右侧的策略,然后单击,如下所示:
接下来,添加一个策略,如下所示:
每个参数的含义如下:
配置完成后,单击下面的按钮以完成添加的策略,如下:
添加后,我们可以执行一个简单的测试。
首先确认所有三个RabbitMQ均已启动,然后使用上述提供商将消息发送到消息队列。
发布后,关闭MQ01实例。
接下来,开始消费者。目前,发现消费者可以完成消息的消耗(请注意,它与反向测试区分开),这表明镜像队列已成功建立。
命令行的配置格式如下:
采用简单的配置案例:
好吧,这是兄弟歌和所有人共享的Rabbitmq中的集群。有兴趣的朋友,快点尝试?