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 表示设置为内存节点,忽略此参数默认为磁盘节点