rabbitmq集群


參考:https://www.cnblogs.com/knowledgesea/p/6535766.html

 

   考慮 rabbitmq 的高可用性,我們需要給 RabbitMQ 搭建集群環境。

 

一、rabbitmq 有3種模式,集群模式是2種。

  1. 單一模式:即單機情況不做集群,就單獨運行一個 rabbitmq 

  2. 普通模式:默認模式,以兩個節點(rabbit01、rabbit02)為例來說明。對於 queue 來說,消息實體只存在於其中一個節點,rabbit01 和 rabbit02 兩個節點僅有相同的元數據,及隊列的結構。當消息進入 rabbit01 節點的 queue 后,consumer 從 rabbit02 節點消費時,RabbitMQ 會臨時在 rabbit01、rabbit02 間進行消息傳輸,把 A 中的消息實體取出並經過 B 發送給 consumer。所以 consumer 應盡量連接每一個節點,從中取消息。即對於同一個邏輯隊列,要在多個節點建立物理 queue。否則無論 consumer 連 rabbit01 或者 rabbit02,出口總在 rabbit01,會產生瓶頸。當 rabbit01 節點故障后,rabbit02 節點無法取到 rabbit01 節點中還未消費的消息實體。如果做了消息持久化,那么等rabbit01 節點恢復,然后才可被消費;如果沒有持久化,就會產生消息丟失的現象。

  3. 鏡像模式:把需要的隊列做成鏡像隊列,與多個節點屬於 RabbitMQ 的 HA 方案。該模式解決了普通模式中的問題,其實質和普通模式不同之處在於,消息實體會主動在鏡像節點間同步,而不是在客戶端取數據時臨時拉取。該模式帶來的副作用也很明顯,除了降低系統性能外,如果鏡像隊列數量過多,加之大量消息進入,集群內部的網絡帶寬將會被這種同步通訊大大消耗掉。所以在對可靠性要求較高的場合中適用。

 

二、搭建 RabbitMQ 的普通模式集群

  1. 環境准備

  1)兩台 CentOS7 的機器(cat /etc/redhat-release),hostname 分別是: 

  cat /etc/hosts

  

 

  保證兩台機器都能互相 ping 通。

 

  2. 分別在兩個機器上安裝 rabbitmq

  /usr/lib/rabbitmq/bin

 

   安裝成功后有些常用操作

  ./rabbitmq-server -deched  --后台啟動服務
  ./rabbitmqctl start_app --啟動服務
  ./rabbitmqctl stop_app --關閉服務
  ./rabbitmq-plugins enable rabbitmq_management --啟動web管理插件
  ./rabbitmqctl add_user zlh zlh --添加用戶,密碼
  ./rabbitmqctl set_user_tags zlh administrator --設置zlh為admin權限

 

  3. 設置 .erlang.cookie

  RabbitMQ 的集群是依賴 erlang 集群,而 erlang 集群是通過這個 cookie 進行通信認證的,因此,我們做集群第一步就是修改 cookie。

  在 $HOME 或者 /var/lib/rabbitmq 中,文件名稱為 .erlang.cookie,他是一個隱藏文件。修改兩個機器中的 .erlang.cookie 文件中 cookie 值一致,且權限為 owner 只讀。

  chmod 600 .erlang.cookie

 

  4. 查看集群狀態,我的已經做好了

  

 

 

  5. 常用命令

  1)停止當前機器中 rabbitmq 服務

  ./rabbitmqctl stop_app

  2)加入集群

  ./rabbitmqctl join_cluster --ram rabbit@mini2

  3)開啟當前機器的 rabbitmq 服務

  ./rabbitmqctl start_app

 

  6. 打開網頁查看 nodes

  

 

 

三、搭建 rabbitmq 的鏡像高可用模式集群

  鏡像模式要依賴 policy 模塊。

  policy 中文是政策,策略的意思,那么他就是要設置,哪些 exchanges 或者 queue 的數據需要復制同步,如何復制同步。

  ./rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

參數意思為:

  ha-all:策略名稱

  ^:匹配符。只有一個 ^ 代表匹配所有,^zl 為匹配名稱為 zl 的 exchanges 或者 queue

  ha-mode:為匹配類型,分為3種模式:all- 所有 queue,exctly- 部分(需配置 ha-params參數,此參數為 int 類型,比如 3,眾多集群中的隨機 3 台機器),node- 指定(需配置 ha-params參數,此參數為數組類型,比如 ["rabbit@mini1","rabbit@mini2"] 這樣指定為 F與G這 2 台機器)。

 

  在 web 管理界面也能配置

  

 


免責聲明!

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



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