rabbitmq的内存节点和磁盘节点

RabbitMQ集群里有内存节点与磁盘节点之分。

所谓内存节点,就是将元数据(metadata)都放在内存里,磁盘节点就是放在磁盘上。(内存节点将全部的队列,交换器,绑定关系,用户,权限,和vhost的元数据信息保存在内存中。)

如果RabbitMQ是单节点运行,默认就是磁盘节点。

在RabbitMQ集群里,至少有一个磁盘节点,它用来持久保存元数据。
新的节点加入集群后,会从磁盘节点上拷贝数据。但是,集群里也不必要每个节点都是磁盘节点,这主要是性能问题。例如,压力大的RPC服务,每秒都要创建和销毁数百个队列,如果集群里都是磁盘节点,意味着队列定义在每个节点上,都要写入磁盘才算成功,这样就会非常慢。

如果集群里只有一个磁盘节点,这个节点挂了,会发生什么?此时消息路由机制仍可正常进行(可以正常投递和消费消息),但是不能做如下事:

  • create queues
  • create exchanges
  • create bindings
  • add users
  • change permissions
  • add or remove cluster nodes

所以,考虑到高可用性,推荐在集群里保持2个磁盘节点,这样一个挂了,另一个还可正常工作。但上述最后一点,往集群里增加或删除节点,要求2个磁盘节点同时在线。

创建内存节点

基于这篇文章来进行:https://www.cnblogs.com/sanduzxcvbnm/p/13912980.html

绑定集群

重置myrabbit1节点
$ docker exec -it myrabbit1 /bin/bash
$ rabbitmqctl stop_app && rabbitmqctl reset && rabbitmqctl start_app

加入myrabbit2节点到集群中
$ docker exec -it myrabbit2 /bin/bash
$ rabbitmqctl stop_app && rabbitmqctl reset && rabbitmqctl join_cluster --ram rabbit@rabbit1 && rabbitmqctl start_app

    加入myrabbit3节点到集群中

$ docker exec -it myrabbit3 /bin/bash
$ rabbitmqctl stop_app && rabbitmqctl reset && rabbitmqctl join_cluster --ram rabbit@rabbit1 && rabbitmqctl start_app
主要参数:
--ram 表示设置为内存节点,忽略此参数默认为磁盘节点
posted @ 2021-09-28 10:21  哈喽哈喽111111  阅读(2106)  评论(0编辑  收藏  举报