1. 程式人生 > 實用技巧 >RabbitMQ訊息佇列叢集配置-1

RabbitMQ訊息佇列叢集配置-1

RabbitMQ是什麼?

MQ(Message Queue,訊息佇列)訊息中介軟體,一般以叢集方式部署,主要提供訊息的接受和傳送,實現各微服務之間的訊息同步。

原理介紹

rabbitmq是依據erlang的分散式特性(RabbitMQ底層是通過Erlang架構來實現的,所以rabbitmqctl會啟動Erlang節點,並基於Erlang節點來使用Erlang系統連線RabbitMQ節點,在連線過程中需要正確的Erlang Cookie和節點名稱,Erlang節點通過交換Erlang Cookie以獲得認證)來實現的,所以部署rabbitmq分散式叢集時要先安裝erlang,並把其中一個服務的cookie複製到另外的節點

rabbitmq叢集中,各個rabbitmq為對等節點,即每個節點均提供給客戶端連線,進行訊息的接收和傳送。節點分為記憶體節點和磁碟節點,一般的,均應建立為磁碟節點,為了防止機器重啟後的訊息消失;

RabbitMQ的Cluster叢集模式一般分為兩種,普通模式和映象模式。訊息佇列通過rabbitmq HA映象佇列進行訊息佇列實體複製


1.普通模式下,以兩個節點(rabbit01、rabbit02)為例來進行說明。對於Queue來說,訊息實體只存在於其中一個節點rabbit01(或者rabbit02),rabbit01和rabbit02兩個節點僅有相同的元資料,即佇列的結構。當訊息進入rabbit01節點的Queue後,consumer從rabbit02節點消費時,RabbitMQ會臨時在rabbit01、rabbit02間進行訊息傳輸,把A中的訊息實體取出並經過B傳送給consumer。所以consumer應儘量連線每一個節點,從中取訊息。即對於同一個邏輯佇列,要在多個節點建立物理Queue。否則無論consumer連rabbit01或rabbit02,出口總在rabbit01,會產生瓶頸。

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


RabbitMQ的結構圖

環境部署

IP地址主機名作業系統用途
192.168.92.145 mq01 CentOS 7.4x86_64 磁碟節點
192.168.92.156 mq02 CentOS 7.4x86_64 記憶體節點
192.168.92.157 mq03 CentOS 7.4x86_64 記憶體節點

開始部署

1.關閉防火牆和selinux(3臺伺服器都要關)
systemctl stop firewalld.service
setenforce 0
2.修改主機名

1.mq01伺服器

hostnamectl set-hostname mq01.localdomain

2.mq02伺服器

hostnamectl set-hostname mq02.localdomain

3.mq03伺服器

hostnamectl set-hostname mq03.localdomain
3.修改三個節點hosts檔案,將以下內容分別加入三臺伺服器上。
192.168.92.145 mq01
192.168.92.156 mq02
192.168.92.157 mq03

4.三個節點配置epel源,安裝rabbitmq軟體包
yum install epel-release -y
yum install rabbitmq-server -y
5.建立軟連線
ln -s /usr/lib/rabbitmq/bin/* /usr/bin
6.檢視外掛的資訊
rabbitmq-plugins list

7.啟用rabbitmq_management服務

rabbitmq-plugins enable rabbitmq_management
8.啟動rabbitmq服務
systemctl start rabbitmq-server.service
9.使用以下命令檢查三臺的叢集狀態,目前相互獨立,沒有形成叢集
rabbitmqctl cluster_status



10.使用以下命令檢視埠開放說明正常。(其中15672和55672都是rabbitmq的管理埠,5672則是和生產者、消費者通訊的埠。)
netstat -ntap | grep 5672

11.停止三臺伺服器
systemctl stop rabbitmq-server.service
12.把mq01的cookie值複製到mq02和mq03伺服器
vim /var/lib/rabbitmq/.erlang.cookie



13.開啟3臺rabbitmq服務
systemctl start rabbitmq-server.service
14.以下操作只在mq02伺服器和mq03伺服器上操作

1.關閉rabbitmq應用

rabbitmqctl stop_app

2.分別在mq02伺服器、mq03伺服器上把mq02、mq03作為記憶體節點與mq01磁碟節點連線起來。

rabbitmqctl join_cluster --ram rabbit@mq01

3.啟動rabbitmq應用

rabbitmqctl start_app

分別檢視3臺rabbitmq伺服器的狀態


通過瀏覽器輸入http://192.168.175.132:15672訪問RabbitMQ(預設使用者名稱:guest 密碼:guest)