集群
一、多台單節點

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之間做出選擇。
