RabbitMQ分布式集群架構

2021-08-19 14:32:49 字數 3927 閱讀 6407

通過增加更多的節點來擴充套件訊息通訊的吞吐量

federation:應用於廣域網,允許單台伺服器上的交換機或佇列接收發布到另一台伺服器上交換機或佇列的訊息,可以是單獨機器或集群。federation佇列類似於單向點對點連線,訊息會在聯盟佇列之間**任意次,直到被消費者接受。通常使用federation來連線internet上的中間伺服器,用作訂閱分發訊息或工作佇列。

shovel:連線方式與federation的連線方式類似,但它工作在更低層次。可以應用於廣域網。

disk node:將元資料儲存在磁碟中,單節點系統只允許磁碟型別的節點,防止重啟rabbitmq的時候,丟失系統的配置資訊。

rabbitmq的cluster集群模式一般分為兩種,普通模式和映象模式。

映象模式:將需要消費的佇列變為映象佇列,存在於多個節點,這樣就可以實現rabbitmq的ha高可用性。作用就是訊息實體會主動在映象節點之間實現同步,而不是像普通模式那樣,在consumer消費資料時臨時讀取。缺點就是,集群內部的同步通訊會占用大量的網路頻寬。

映象佇列實現了rabbitmq的高可用性(ha),具體的實現策略如下所示:

ha-params

功能all

空映象佇列將會在整個集群中複製。當乙個新的節點加入後,也會在這 個節點上覆制乙份。

exactly

count

映象佇列將會在集群上覆制count份。如果集群數量少於count時候,佇列會複製到所有節點上。如果大於count集群,有乙個節點crash後,新進入節點會做新的映象。

nodes

node name

queue_args("x-ha-policy":"all") //定義字典來設定額外的佇列宣告引數

channel.queue_declare(queue

="hello-queue",argument=queue_args)

queue_args

("x-ha-policy":"nodes",

"x-ha-policy-params":["rabbit@localhost"])

channel.queue_declare

(queue="hello-queue",argument=queue_args)

rabbitmqctl stop //先停止執行節點,再進行集群部署

rabbitmq_node_port=

5672 rabbitmq_nodename=rabbit //設定環境變數指定埠和節點名稱

rabbitmq-server

-detached

//後台啟動節點

rabbitmq_node_port=

5673 rabbitmq_nodename=rabbit_01 //設定環境變數指定埠和節點名稱

rabbitmq-server

-detached

//後台啟動節點

node_port=5672

nodename=rabbit

node_port=5673

nodename=rabbit_01

rabbitmqctl -n rabbit_01@localhost join_cluster rabbit@localhost

//將rabbit_01新增到集群節點rabbit中去

rabbitmqctl cluster_status //檢視集群節點的狀態

//可以看到如下資訊,說明節點新增成功,表明都是磁碟型別的節點

cluster status of node rabbit@localhost ...

}, ,

, ,]}]

需要有相同的erlang cookie,否則不能進行通訊,為保證cookie的完全一致,採用從乙個節點copy的方式

ip位址

工作模式

作業系統

rabbitmqcluster

186.16.195.24

disk

centos 7.0 - 64位

rabbitmqcluster01

186.16.195.25

disk

centos 7.0 - 64位

rabbitmqcluster02

186.16.195.26

disk

centos 7.0 - 64位

分別在三個節點的/etc/hosts下設定相同的配置資訊

186.16.195.24 rabbitmqcluster

186.16.195.25 rabbitmqcluster01

186.16.195.26 rabbitmqcluster02

採用從主節點copy的方式保持cookie的一致性

[root@rabbitmqcluster01]# scp /var/lib/rabbitmq/.erlang.cookie 186.16

.195

.25:/var/lib/rabbitmq

[root@rabbitmqcluster02]# scp /var/lib/rabbitmq/.erlang.cookie 186.16

.195

.26:/var/lib/rabbitmq

rabbitmqctl stop

rabbitmq-server -detached

[root@rabbitmqcluster]#rabbitmqctl cluster_status

[root@rabbitmqcluster01]#rabbitmqctl cluster_status

[root@rabbitmqcluster02]#rabbitmqctl cluster_status

[root@rabbitmqcluster01]#rabbitmqctl join_cluster rabbit@rabbitmqcluster

[root@rabbitmqcluster]#rabbitmqctl cluster_status
rpm -ivh 

.org/pub/epel/6/i386/epel-release-6-5.noarch.rpm//

yum -y install haproxy
cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg

.bak

vim /etc/haproxy/haproxy.cfg

listen rabbitmq_local_cluster 127.0.0.1:5670

//前段ip,供product和consumer來進行選擇,由於5672埠已經預設使用,這裡選擇5670埠

mode tcp //負載均衡選項

balance roundrobin //輪詢演算法將負載發給後台伺服器

server rabbit 127.0.0.1:5672

check inter 5000 rise 2 fall 3

//負載均衡中的集群節點配置,這裡選擇的rabbit節點

《rabbitmq實戰-高效部署分布式訊息佇列》[美] alvar videla,jason j.w. williams 著 汪佳南 譯

RabbitMQ分布式集群架構

設計集群的目的 1 集群配置方式 rabbitmq可以通過三種方法來部署分布式集群系統,分別是 cluster,federation,shovel federation 應用於廣域網,允許單台伺服器上的交換機或佇列接收發布到另一台伺服器上交換機或佇列的訊息,可以是單獨機器或集群。federation...

分布式集群架構

策略優點 缺點格式 uuid 實現簡單不占用頻寬 無序 不可讀 查詢慢 32位db自增 無 遞迴 db單點故障 擴充套件有瓶頸 snowflake 不占用頻寬 低位趨勢遞增 依賴伺服器時間 18位redis 無單點故障 效能優於db遞增 占用頻寬 redis集群需要維護 12位關係型資料庫都實現資料...

Neo4j分布式集群架構

從下圖可見,neo4j集群由兩個不同的角色core servers和read replicas組成,這兩個角色是任何生產部署中的基礎,但彼此之間的管理規模不同,並且在管理整個集群的容錯性和可伸縮性方面承擔著不同的角色。核心伺服器的主要責任是保護資料。核心伺服器通過使用raft協議複製所有事務來做到這...