CentOS8 搭建RabbitMQ普通叢集

規劃

主機名

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

這一步,因為記憶體上的資料本身就不是持久化的。

CentOS8 搭建RabbitMQ普通叢集

rabbitmqctl start_app

//

啟動

rabbit

應用

CentOS8 搭建RabbitMQ普通叢集

叢集已經搭建成功,此時可以在任意節點上使用

rabbitmqctl cluster_status

命令檢視叢集狀態

CentOS8 搭建RabbitMQ普通叢集

CentOS8 搭建RabbitMQ普通叢集

圖形介面檢視

CentOS8 搭建RabbitMQ普通叢集

此時這個

基本的

RabbitMQ

叢集不是高可用的,雖然叢集共享佇列,但在預設情況下,訊息只會被路由到某一個節點的符合條件的佇列上,並不會同步到其他節點的相同佇列上。假設訊息路由到

node1

my-queue

佇列上,但是

node1

突然宕機了,那麼訊息就會丟失,想要解決這個問題,需要開啟佇列映象,將叢集中的佇列彼此之間進行映象,此時訊息就會被複製到處於同一個映象分組中的所有佇列上。