天天看點

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 表示設定為記憶體節點,忽略此參數預設為磁盤節點