RabbitMQ高可用


集群

 一、多台單節點

1、准備兩台服務器,安裝一模一樣的rabbitmq

A服務器節點

B服務器節點

 

2、修改配置文件

rabbitmq配置文件

主要加入集群節點

C:\Users\Administrator\AppData\Roaming\RabbitMQ

[
{rabbit, [
        {vm_memory_high_watermark_paging_ratio, 0.4},
        {vm_memory_high_watermark, 0.4},
        {cluster_nodes, ['rabbit@WIN-BN52SEDCTKA', 'rabbit@WIN-0H2D8V9NVNT']}
        ]
}
].

 

 

 

3、hosts配置文件

A,B服務器均做這個配置

 C:\Windows\System32\drivers\etc

 

A服務器:   192.168.140.167 rabbit@WIN-BN52SEDCTKA
B服務器:   192.168.140.142 rabbit@WIN-0H2D8V9NVNT

 

4、rabbitmq配置環境變量文件

 A服務器:添加文件  rabbitmq-env.conf

NODENAME=rabbit@WIN-BN52SEDCTKA
NODE_IP_ADDRESS=192.168.140.167
NODE_PORT=5672
RABBITMQ_MNESIA_BASE=C:\Users\Administrator\AppData\Roaming\RabbitMQ\db
RABBITMQ_LOG_BASE=C:\Users\Administrator\AppData\Roaming\RabbitMQ\log

 

B服務器:添加文件   rabbitmq-env.conf

NODENAME=rabbit@WIN-0H2D8V9NVNT
NODE_IP_ADDRESS=192.168.140.142
NODE_PORT=5672
RABBITMQ_MNESIA_BASE=C:\Users\Administrator\AppData\Roaming\RabbitMQ\db
RABBITMQ_LOG_BASE=C:\Users\Administrator\AppData\Roaming\RabbitMQ\log

 

5、erlang.cookie文件統一

將A服務器中C:\Users\Administrator中的.erlang.cookie 的文件替換掉B服務器中 C:\Users\Administrator

和C:\Windows\System32\config\systemprofile 目錄中的 .erlang.cookie。

保證不同節點可以相互通信的密鑰,要保證集群中的不同節點相互通信必須共享相同的Erlang Cookie

重啟服務配置集群

B服務器

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app

A服務器

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@WIN-0H2D8V9NVNT
rabbitmqctl start_app
rabbitmqctl join_cluster命令必須關閉應用,以及B服務器中對應端口必須通。

 登錄管理界面,看到配置成功

需要注意的是,搭建集群建議最少設置一個磁盤節點,防止機器意外關機等、丟失數據。(上面兩個都是磁盤節點)

rabbitmq集群有兩種節點 磁盤節點和內存節點。字面上了解,磁盤節點的數據存儲在磁盤,內存節點的數據存儲的內存中。因此存儲速度方面內存節點有優勢,數據安全方面磁盤節點有優勢。

 

內存節點集群時的命令  

rabbitmqctl join_cluster --ram rabbit@WIN-0H2D8V9NVNT

 

二、單台多節點

https://blog.csdn.net/zhang_jian__/article/details/69589047

消息鏡像/同步

目的就是集群之間隊列中信息同步 ,給A服務器發一條消息,自動同步到B服務器。

鏡像是通過策略實現,把指定好的策略應用到隊列。 策略的好處就是可以批量的匹配。

https://www.rabbitmq.com/ha.html

1、Ha-mode Ha-params 設置鏡像隊列

 Ha-mode=all   

同步到所有節點。當一個新的節點加入后,也會在這 個節點上復制一份。

Ha-params  

鏡像隊列將會在集群上復制count份。如果集群數量少於count時候,隊列會復制到所有節點上。如果大於Count集群,有一個節點crash后,新進入節點也不會做新的鏡像。(一般ha-mode設置為all,這個就不設置就可以)

2、Ha-sync-mode 新從節點加入時 數據同步策略  

 ha-sync-mode=automatic  (自動)

manually “手動”是默認的

自動同步會使隊列在一段時間內無響應,這可能不太好取決於隊列的用例.並且,只要有新的從屬連接,就會發生自動同步.如果存在大量從屬加入,則隊列將在相當長的一段時間內無響應,除非隊列相當空或網絡非常快.

 

 

 

 

HA負載

 HAProxy:在集群機制基礎上可以指定集群內任意數量隊列組成鏡像隊列,隊列消息會在多節點間復制

 https://blog.csdn.net/zhuyu19911016520/article/details/80206202

RabbitMQ腦裂

1、RabbitMQ 集群的網絡分區容錯性並不是非常高,在網絡經常發生分區時會有些問題。

2、RabbitMQ 提供了三種配置:
  ignore:默認配置,發生網絡分區時不作處理,當認為網絡是可靠時選用該配置
  autoheal:各分區協商后重啟客戶端連接最少的分區節點,恢復集群(CAP 中保證 AP,有狀態丟失)
  pause_minority:分區發生后判斷自己所在分區內節點是否超過集群總節點數一半,如果沒有超過則暫停這些節點(保證 CP,總節點數為奇數個)

 

 

CAP理論

 

一致性(C):在分布式系統中的所有數據備份,在同一時刻是否同樣的值。(等同於所有節點訪問同一份最新的數據副本)

可用性(A):在集群中一部分節點故障后,集群整體是否還能響應客戶端的讀寫請求。(對數據更新具備高可用性)

分區容錯性(P):以實際效果而言,分區相當於對通信的時限要求。系統如果不能在時限內達成數據一致性,就意味着發生了分區的情況,必須就當前操作在C和A之間做出選擇。

 


免責聲明!

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



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