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 表示設置為內存節點,忽略此參數默認為磁盤節點