親測可用,超詳細RabbitMQ消息隊列集羣配置

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的結構圖

親測可用,超詳細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

親測可用,超詳細RabbitMQ消息隊列集羣配置

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

親測可用,超詳細RabbitMQ消息隊列集羣配置

7.啓用rabbitmq_management服務

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

親測可用,超詳細RabbitMQ消息隊列集羣配置
親測可用,超詳細RabbitMQ消息隊列集羣配置
親測可用,超詳細RabbitMQ消息隊列集羣配置

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

親測可用,超詳細RabbitMQ消息隊列集羣配置

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

親測可用,超詳細RabbitMQ消息隊列集羣配置
親測可用,超詳細RabbitMQ消息隊列集羣配置
親測可用,超詳細RabbitMQ消息隊列集羣配置

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

1.關閉rabbitmq應用

rabbitmqctl stop_app

親測可用,超詳細RabbitMQ消息隊列集羣配置

2.分別在mq02服務器、mq03服務器上把mq02、mq03作爲內存節點與mq01磁盤節點連接起來。

rabbitmqctl join_cluster --ram rabbit@mq01

3.啓動rabbitmq應用

rabbitmqctl start_app

分別查看3臺rabbitmq服務器的狀態

親測可用,超詳細RabbitMQ消息隊列集羣配置
親測可用,超詳細RabbitMQ消息隊列集羣配置

親測可用,超詳細RabbitMQ消息隊列集羣配置

通過瀏覽器輸入http://192.168.175.132:15672訪問RabbitMQ(默認用戶名:guest 密碼:guest)

親測可用,超詳細RabbitMQ消息隊列集羣配置
親測可用,超詳細RabbitMQ消息隊列集羣配置

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章