RabbitMQ 集群

打印 上一主题 下一主题

主题 887|帖子 887|积分 2661



  
媒介

RabbitMQ 作为消息中心件,可以与多个生产者和消费者进行绑定,但是如何只有一台 RabbitMQ 服务的话,那么这个 RabbitMQ 就需要处置处罚很多的哀求,假如该 RabbitMQ 节点挂掉了之后,那么所有与之相关的操作都无法进行了。我们可以升级 RabbitMQ 的硬件设施,提升 RabbitMQ 的处置处罚本领,但是硬件的升级成本是很高的,比力好的解决方法就是搭建 RabbitMQ 集群。
单机多节点搭建集群

一般的集群是指在多个不同的主机上搭建,为什么我这里选择单机多节点搭建集群呢?说白了就是我没有谁人经济实力,我手上没有那么多的云服务器,但是呢,知道了单机多节点的搭建,那么多机集群的搭建也就很简单了,步调基本上是相同的。
我们先来看看主机上已经存在的 RabbitMQ 服务rabbimqctl status:

可以看到我当前主机上已经存在一个 RabbitMQ 服务,他绑定的端口是 5672、15672和25672,这里绑定的端口的作用是啥就不具体先容了,要是不知道的可以看看前面的文章。
创建RabbitMQ节点

然后我们搭建的单机多节点就是一主两从的情况,以是我们需要再启动两个 RabbitMQ 节点:
Node NameAMQP协议端口号Web管理页面端口rabbit2567315673rabbit3567415674
  1. RABBITMQ_NODE_PORT=5673 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management
  2. listener [{port,15673}]" RABBITMQ_NODENAME=rabbit2 rabbitmq-server -detached
  3. RABBITMQ_NODE_PORT=5674 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management
  4. listener [{port,15674}]" RABBITMQ_NODENAME=rabbit3 rabbitmq-server -detached
复制代码
RABBITMQ_NODE_PORT 指定启动的 RabbitMQ 的端口,RABBITMQ_SERVER_START_ARGS 是 RabbitMQ 的配置选项,rabbitmq_management listener 指定管理页面绑定的端口,RABBITMQ_NODENAME 是节点的名称。
那么如何查抄我们新的 RabbitMQ 启动成功了呢?我们可以打开云服务器的 15673和15674端口,然后看看管理页面是否能打开:


这时我们一台主机上就存在三个 RabbitMQ 节点了,接下来我们就将这三个几点加入到一个集群中。
制止服务并重置

在添加集群之前,我们需要制止 RabbitMQ 服务,并对其进行重置:
  1. rabbitmqctl -n rabbit2 stop_app
  2. rabbitmqctl -n rabbit2 reset
  3. rabbitmqctl -n rabbit3 stop_app
  4. rabbitmqctl -n rabbit3 reset
复制代码

将节点加入到集群中

我们将最先启动的 rabbit 节点作为主节点,然后 rabbit2 和 rabbit3 作为从节点:
  1. rabbitmqctl -n rabbit2 join_cluster rabbit@iZ2ze5bzkbeuwwqowjzo27Z
  2. rabbitmqctl -n rabbit3 join_cluster rabbit@iZ2ze5bzkbeuwwqowjzo27Z
复制代码
rabbit@iZ2ze5bzkbeuwwqowjzo27Z 是我们主节点的节点名称,可以通过 rabbitmqctl status 查看节点名称:

我们输入下令的时候大概会出现告诫,但是我们如今呢就先不管:

将节点加入到集群之后呢,我们重新启动 rabbit2 和 rabbit3:
  1. rabbitmqctl -n rabbit2 start_app
  2. rabbitmqctl -n rabbit3 start_app
复制代码
查看集群状态

RabbitMQ 节点加入集群之后,我们通过 rabbitmqctl cluster_status -n rabbit 来查看集群的状态:


然后登录到管理页面也是可以查看集群状态的:

宕机

我们分别用 rabbit 和 rabbit2 节点来添加两个队列:


用一个节点添加的队列,然后观察其他节点可以发如今其他的节点中也存在这些创建的队列:

然后我们向队列中发送消息:

然后在其他的节点中也是可以看到这个发送的消息:

然后我们关闭主节点 rabbit rabbitmqctl -n rabbit stop_app:
从其他节点的管理平台可以看到我们的 rabbit 节点是挂掉了。

并且,我们的 testQueue 是由 rabbit 节点创建的,当 rabbit 节点挂掉之后,testQueue 中的消息在其他节点中也不存在了,而不是由 rabbit 节点创建的队列则还存在:

也就是说,由哪个节点创建的队列,队列中的消息只会在这个节点中存在,那么如何解决这个问题呢?这就需要引入我们的 “仲裁队列” 了。
结论

感谢各位朋友们能够看到末端,找不到工作?某直聘已读不回?不妨看看这里超快复兴,助力每一位步伐员早日找到理想的工作

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

滴水恩情

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表