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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM