規劃
主機名
IP
地址
部署服務
作業系統
iZ8vbgpdral5u7jpslofqoZ
172。20。154。36
RabbitMQ + HAProxy + KeepAlived
CentOS 8
iZ8vbgpdral5u7jpslofqnZ
172。20。154。37
RabbitMQ + HAProxy + KeepAlived
CentOS 8
iZ8vbgpdral5u7jpslofqpZ
172。20。154。38
RabbitMQ
CentOS 8
1、節點名:
rabbit@iZ8vbgpdral5u7jpslofqoZ
rabbit@iZ8vbgpdral5u7jpslofqnZ
rabbit@iZ8vbgpdral5u7jpslofqpZ
2、分別啟動話務元件
rabbitmq-plugins enable rabbitmq_stomp
3、
複製erlang。cookie
該
cookie
檔案相當於金鑰令牌,叢集中的
RabbitMQ
節點需要透過交換金鑰令牌以獲得相互認證,因此處於同一叢集的所有節點需要具有相同的金鑰令牌,否則在搭建過程中會出現
Authentication Fail
錯誤。
scp -r /var/lib/rabbitmq/。erlang。cookie root@xxxx:/var/lib/rabbitmq/。erlang。cookie
scp -r /var/lib/rabbitmq/。erlang。cookie root@xxxx:/var/lib/rabbitmq/。erlang。cookie
4、將iZ8vbgpdral5u7jpslofqnZ、iZ8vbgpdral5u7jpslofqnZ作為記憶體節點加入iZ8vbgpdral5u7jpslofqoZ節點叢集中
在
iZ8vbgpdral5u7jpslofqnZ
、
iZ8vbgpdral5u7jpslofqnZ
執行如下命令:
rabbitmqctl stop_app //
停掉
rabbit
應用
因為修改了
。erlang。cookie
,會報錯。
Authentication failed (rejected by the remote node), please check the Erlang cookie
ps aux|grep rabbitmq
殺掉程序即可。
rabbitmq-server -detached
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster ——ram rabbit@iZ8vbgpdral5u7jpslofqoZ
//
加入到磁碟節點
join_cluster
命令有一個可選的引數
——ram
,該引數代表新加入的節點是記憶體節點,預設是磁碟節點。如果是記憶體節點,則所有的佇列、交換器、繫結關係、使用者、訪問許可權和
vhost
的元資料都將儲存在記憶體中,如果是磁碟節點,則儲存在磁碟中。記憶體節點可以有更高的效能,但其重啟後所有配置資訊都會丟失,因此
RabbitMQ
要求在叢集中至少有一個磁碟節點,其他節點可以是記憶體節點。當記憶體節點離開叢集時,它可以將變更通知到至少一個磁碟節點;然後在其重啟時,再連線到磁碟節點上獲取元資料資訊。除非是將
RabbitMQ
用於
RPC
這種需要超低延遲的場景,否則在大多數情況下,
RabbitMQ
的效能都是夠用的,可以採用預設的磁碟節點的形式。這裡為了演示,
rabbit-node3
我就設定為記憶體節點。
另外,如果節點以磁碟節點的形式加入,則需要先使用
reset
命令進行重置,然後才能加入現有群集,重置節點會刪除該節點上存在的所有的歷史資源和資料。採用記憶體節點的形式加入時可以略過
reset
這一步,因為記憶體上的資料本身就不是持久化的。
rabbitmqctl start_app
//
啟動
rabbit
應用
叢集已經搭建成功,此時可以在任意節點上使用
rabbitmqctl cluster_status
命令檢視叢集狀態
圖形介面檢視
此時這個
基本的
RabbitMQ
叢集不是高可用的,雖然叢集共享佇列,但在預設情況下,訊息只會被路由到某一個節點的符合條件的佇列上,並不會同步到其他節點的相同佇列上。假設訊息路由到
node1
的
my-queue
佇列上,但是
node1
突然宕機了,那麼訊息就會丟失,想要解決這個問題,需要開啟佇列映象,將叢集中的佇列彼此之間進行映象,此時訊息就會被複製到處於同一個映象分組中的所有佇列上。