Rabbitmq 集群搭建

2022-07-24 02:54:11 字數 4761 閱讀 7480

目錄在生產環境中經常會遇到伺服器斷電、主機板故障,吞吐量猛增,記憶體不足、磁碟不足等情況,單機節點的rabbitmq顯然無能為力,這時需要搭建乙個rabbitmq集群來解決這些問題。

通過 erlang 的分布式特性建立rabbitmq 集群,各 rabbitmq 服務為對等節點,即每個節點都提供服務給客戶端連線,進行訊息傳送與接收。集群間共享使用者、vhost、佇列,交換器、繫結和執行時引數

集群節點型別

rabbitmq要求在集群中至少有乙個磁碟節點。當節點加入或離開集群時,至少要通知到乙個磁碟節點。如果只有乙個磁碟節點,又正好崩潰了,那集群可以繼續傳送和接受訊息,但不能執行建立佇列、交換器、繫結關係、使用者,以及更改許可權、新增或刪除集群節點的操作。在建立集群時應該保證有兩個磁碟節點,建議全部使用磁碟節點。

當訊息進入rabbit01節點的queue後,consumer從rabbit02節點消費時,rabbitmq會臨時在rabbit01、rabbit02間進行訊息傳輸,把a中的訊息實體取出並經過b傳送給consumer。所以consumer應盡量連線每乙個節點,從中取訊息。即對於同乙個邏輯佇列,要在多個節點建立物理queue。否則無論consumer連rabbit01或rabbit02,出口總在rabbit01,會產生瓶頸。

主機名ip

系統node1

192.168.49.135

centos linux release 7.6.1810 (core)

node2

192.168.49.136

centos linux release 7.6.1810 (core)

node3

192.168.49.137

centos linux release 7.6.1810 (core)

參考 rabbitmq 單節點安裝

配置各主機hosts檔案,讓各個節點可以通過主機名識別對方

[root@node1 ~]# vim /etc/hosts

[root@node1 ~]# cat /etc/hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.49.135 node1

192.168.49.136 node2

192.168.49.137 node3

[root@node1 ~]#

rabbitmq的集群依賴erlang集群,而erlang集群是通過這個cookie進行通訊認證的,因此 編輯erlang的cookie檔案,確保各個節點的cookie相同

erlang.cookie的位置

【注】 先停止rabbitmq,在更改erlang.cookie的值,不然報錯

[root@node1 ~]# cat .erlang.cookie 

ndbxfmheocacwfpuguyv[root@node1 ~]#

#將.erlang.cookie 複製到其他節點過程略

[root@node1 ~]# cat .erlang.cookie 

ndbxfmheocacwfpuguyv[root@node1 ~]#

[root@node2 ~]# cat .erlang.cookie

ndbxfmheocacwfpuguyv

[root@node2 ~]#

[root@localhost ~]# cat .erlang.cookie

ndbxfmheocacwfpuguyv

[root@node3 ~]#

啟動各節點rabbitmq服務

[root@node1 ~]# rabbitmq-server -detached

[root@node2 ~]# rabbitmq-server -detached

[root@node3 ~]# rabbitmq-server -detached

通過日誌判斷各節點cookie hash是否一致

2019-05-29 00:21:36.524 [info] <0.241.0> 

node : rabbit@node1

home dir : /root

config file(s) : /opt/rabbitmq_server-3.7.15/etc/rabbitmq/rabbitmq.conf

cookie hash : d/ze3xrt478dueqdli+zia==

log(s) : /opt/rabbitmq_server-3.7.15/var/log/rabbitmq/[email protected]

: /opt/rabbitmq_server-3.7.15/var/log/rabbitmq/rabbit@node1_upgrade.log

database dir : /opt/rabbitmq_server-3.7.15/var/lib/rabbitmq/mnesia/rabbit@node1

2019-05-29 00:42:12.652 [info] <0.289.0>

node : rabbit@node2

home dir : /root

config file(s) : (none)

cookie hash : d/ze3xrt478dueqdli+zia==

log(s) : /opt/rabbitmq_server-3.7.15/var/log/rabbitmq/[email protected]

: /opt/rabbitmq_server-3.7.15/var/log/rabbitmq/rabbit@node2_upgrade.log

database dir : /opt/rabbitmq_server-3.7.15/var/lib/rabbitmq/mnesia/rabbit@node2

2019-05-29 00:42:14.563 [info] <0.289.0>

node : rabbit@node3

home dir : /root

config file(s) : (none)

cookie hash : d/ze3xrt478dueqdli+zia==

log(s) : /opt/rabbitmq_server-3.7.15/var/log/rabbitmq/[email protected]

: /opt/rabbitmq_server-3.7.15/var/log/rabbitmq/rabbit@node3_upgrade.log

database dir : /opt/rabbitmq_server-3.7.15/var/lib/rabbitmq/mnesia/rabbit@node3

這三個節點目前都是以獨立的集群,通過命令來檢視他們的狀態

[root@node1 rabbitmq]# rabbitmqctl cluster_status

cluster status of node rabbit@node1 ...

}, ,

, ,]}]

[root@node1 rabbitmq]#

[root@node2 rabbitmq]# rabbitmqctl cluster_status

cluster status of node rabbit@node2 ...

}, ,

, ,]}]

[root@node3 rabbitmq]# rabbitmqctl cluster_status

cluster status of node rabbit@node3 ...

}, ,

, ,]}]

以node1節點為基準,將node2,node3加入node1節點的集群(順序可調換)

在node2,node3 執行如下命令

[root@node2 rabbitmq]# rabbitmqctl reset

resetting node rabbit@node2 ...

[root@node2 rabbitmq]# rabbitmqctl join_cluster rabbit@node1

clustering node rabbit@node2 with rabbit@node1

starting node rabbit@node2 ...

completed with 0 plugins.

[root@node2 rabbitmq]#

此時在檢視集群狀態:

[root@node3 rabbitmq]# rabbitmqctl cluster_status

cluster status of node rabbit@node3 ...

}, ,

, ,,,]}]

[root@node3 rabbitmq]#

可以看到node2,node3已經加入集群

參考

rabbitmq集群高可用部署詳細

rabbitmq3.6.3集群搭建+haproxy1.6做負載均衡

《rabbitmq 實戰指南》

搭建rabbitmq集群

訪問管理位址http ip 15672 使用guest使用者登入 1.配置hosts檔案 10.1.10.201 controller 10.1.10.105 rabbitmq01 10.1.10.106 rabbitmq02 2.採用從主節點copy的方式保持cookie的一致性 root con...

rabbitmq集群搭建

目錄rabbitmq是用erlang語言開發的,erlang語言最初用於交換機領域,這樣就使得rabbitmq和broker server 之間進行資料互動的效能是非常優秀的,erlang有著和原生socket一樣的延遲,集群非常方便,因為erlang天生就是分布式語言,但其本身不支援負載均衡。ra...

docker搭建 rabbitmq集群

1 拉取映象 docker pull rabbitmq management 2 執行容器 docker run d hostname rabbit host1 name rabbitmq1 p 15672 15672 p 5672 5672 e rabbitmq erlang cookie rab...