通過增加更多的節點來擴充套件訊息通訊的吞吐量
1 集群配置方式
federation:應用於廣域網,允許單台伺服器上的交換機或佇列接收發布到另一台伺服器上交換機或佇列的訊息,可以是單獨機器或集群。federation佇列類似於單向點對點連線,訊息會在聯盟佇列之間**任意次,直到被消費者接受。通常使用federation來連線internet上的中間伺服器,用作訂閱分發訊息或工作佇列。
shovel:連線方式與federation的連線方式類似,但它工作在更低層次。可以應用於廣域網。
2 節點型別
定義儲存在記憶體中,好處是可以使得像交換機和佇列宣告等操作更加的快速。
disk node:將元資料儲存在磁碟中,單節點系統只允許磁碟型別的節點,防止重啟rabbitmq的時候,丟失系統的配置資訊。
3 erlang cookie
4 映象佇列
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)
1 單機多節點部署
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 ...
}, ,
, ,]}]
2 多機多節點部署
需要有相同的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
從目前來看,基於rabbitmq的分布式通訊框架主要包括兩部分內容,一是要確保可用性和效能,另乙個就是編寫當節點發生故障時知道如何重連到集群的應用程式。負載均衡就是解決處理節點的選擇問題。
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分布式集群搭建
採用兩台centos7機器搭建普通模式的rabbitmq機器 mq01 主機名 192.168.100.177 mq02 主機名 192.168.100.200 檢視當前的hostname 編輯network檔案修改hostname行 重啟生效 centos7新增hostnamectl工具,修改後即...
RabbitMQ分布式集群架構
設計集群的目的 1 集群配置方式 rabbitmq可以通過三種方法來部署分布式集群系統,分別是 cluster,federation,shovel federation 應用於廣域網,允許單台伺服器上的交換機或佇列接收發布到另一台伺服器上交換機或佇列的訊息,可以是單獨機器或集群。federation...
RabbitMQ分布式集群架構
通過增加更多的節點來擴充套件訊息通訊的吞吐量 federation 應用於廣域網,允許單台伺服器上的交換機或佇列接收發布到另一台伺服器上交換機或佇列的訊息,可以是單獨機器或集群。federation佇列類似於單向點對點連線,訊息會在聯盟佇列之間 任意次,直到被消費者接受。通常使用federation...