Rabbitmq叢集詳解
Rabbitmq簡介
1、什麼是rabbitmq?
MQ全稱為MessageQueue,訊息佇列(MQ)是一種應用程式對應用程式的通訊方法。應用程式通過寫和檢索出入列隊的針對應用程式的資料(訊息)來通訊,而無需專用連線來連結它們。
RabbitMQ 是一個由 Erlang 語言開發的 AMQP(高階訊息佇列協議) 的開源實現。RabbitMQ 屬於訊息中介軟體,主要用於元件之間的解耦,訊息的傳送者無需知道訊息使用者的存在,反之亦然。
2、rabbitmq特點
- 可靠性(Reliability)
RabbitMQ 使用一些機制來保證可靠性,如持久化、傳輸確認、釋出確認。 - 靈活的路由(Flexible Routing)
在訊息進入佇列之前,通過 Exchange 來路由訊息的。 - 訊息叢集(Clustering)
多個 RabbitMQ 伺服器可以組成一個叢集,形成一個邏輯 Broker 。 - 高可用(Highly Available Queues)
佇列可以在叢集中的機器上進行映象,使得在部分節點出問題的情況下佇列仍然可用。 - 多種協議(Multi-protocol)
RabbitMQ 支援多種訊息佇列協議,比如 STOMP、MQTT 等等。 - 多語言客戶端(Many Clients)
RabbitMQ 幾乎支援所有常用語言,比如 Java、.NET、Ruby 等等。 - 管理介面(Management UI)
RabbitMQ 提供了一個易用的使用者介面,使得使用者可以監控和管理訊息 Broker 的許多方面。 - 跟蹤機制(Tracing)
如果訊息異常,RabbitMQ 提供了訊息跟蹤機制,使用者可以找出發生了什麼。 - 外掛機制(Plugin System)
RabbitMQ 提供了許多外掛,來從多方面進行擴充套件,也可以編寫自己的外掛。3、rabbitmq的內部結構
- Message
訊息,訊息是不具名的,它由訊息頭和訊息體組成。 - Publisher
訊息的生產者,也是一個向交換器釋出訊息的客戶端應用程式。 - Exchange
交換器,用來接收生產者傳送的訊息並將這些訊息路由給伺服器中的佇列。 - Binding
繫結,用於訊息佇列和交換器之間的關聯。 - Queue
訊息佇列,用來儲存訊息直到傳送給消費者。它是訊息的容器,也是訊息的終點。一個訊息可投入一個或多個佇列。 - Connection
網路連線,比如一個TCP連線。 - Channel
通道,多路複用連線中的一條獨立的雙向資料流通道。 - Consumer
訊息的消費者,表示一個從訊息佇列中取得訊息的客戶端應用程式。 - Virtual Host
虛擬主機,表示一批交換器、訊息佇列和相關物件。虛擬主機是共享相同的身份認證和加密環境的獨立伺服器域。 - Broker
表示訊息佇列伺服器實體。Rabbitmq應用
rabbit應用模式
單一模式
普通模式(預設叢集模式)
映象模式(佇列做成映象佇列,存在多個節點)
Rabbitmq的叢集節點包括記憶體節點、磁碟節點,支援訊息持久化、也就是資料寫在磁碟上。
rabbit工作過程
(1)客戶端連線到訊息佇列伺服器,開啟一個channel。
(2)客戶端宣告一個exchange,並設定相關屬性。
(3)客戶端宣告一個queue,並設定相關屬性。
(4)客戶端使用routing key,在exchange和queue之間建立好繫結關係。
(5)客戶端投遞訊息到exchange。
(6)Exchange接收到訊息根據訊息的key和已經設定的binding,進行訊息路由,將訊息投遞到queues中,應用程式雙方就實現了通訊。
Rabbitmq部署
實驗說明:
一個叢集中有三臺伺服器,其中一臺使用磁碟模式,另外兩臺是記憶體模式。客戶端通過前端反向代理去連線兩臺記憶體模式伺服器。注意將三臺伺服器都連上網際網路並安裝軟體包。
實驗環境:
主機名 | 作業系統 | IP地址 | 用途 |
---|---|---|---|
mq01 | CentOS7 | 192.168.37.128 | 磁碟節點 |
mq02 | CentOS7 | 192.168.37.130 | 記憶體節點 |
mq03 | CentOS7 | 192.168.37.131 | 記憶體節點 |
實驗過程:
++++++三臺伺服器相同操作++++++
1、關閉防火牆、安全功能
systemctl stop firewalld.service
setenforce 0
2、首先修改三臺伺服器的主機名和hosts檔案
hostnamectl set-hostname mq01
bash
vim /etc/hosts
192.168.37.128 mq01
192.168.37.130 mq02
192.168.37.131 mq03
3、yum安裝軟體包
yum install -y epel-release #epel為擴充套件軟體包
yum install -y rabbitmq-server #rabbitmq軟體包
4、建立軟連線
ln -s /usr/lib/rabbitmq/bin/* /usr/bin/
5、檢視外掛安裝情況
rabbitmq-plugins list
6、開啟管理服務
rabbitmq-plugins enable rabbitmq_management
7、開啟rabbitmq服務
systemctl start rabbitmq-server.service
netstat -ntap |grep 5672
8、檢視各自的群集狀態
rabbitmqctl cluster_status
mq01
mq02
mq03
9、關閉服務,複製配置檔案後開啟
systemctl stop rabbitmq-server.service
//隱藏檔案,三臺配置一樣,將磁碟節點上的檔案內容複製到其他2臺
vim /var/lib/rabbitmq/.erlang.cookie
systemctl start rabbitmq-server.service
++++++以下操作在記憶體節點上++++++
1、將mq02、mq03記憶體節點伺服器分別加入到磁碟節點
rabbitmqctl stop_app
rabbitmqctl join_cluster --ram [email protected] #加入到磁碟節點
#ram:以記憶體節點形式新增,不加磁碟形式
rabbitmqctl cluster_status #驗證叢集狀態
mq02
mq03
2、檢視mq01磁碟節點伺服器的叢集狀態
rabbitmqctl cluster_status
++++++rabbit圖形化操作++++++
1、登入磁碟節點伺服器
http://192.168.37.128:15672/ 預設使用者:guest 密碼:guest
2、在磁碟節點伺服器上建立策略
name: my_ha
pattern: ^a
Apply to : Exchange and queues
definition: ha-mode all
3、檢視策略(三臺伺服器同步)
mq01
mq02
mq03
4、在磁碟節點伺服器上增加訊息佇列
Name: aa
Durabiliy: Durable
Node: [email protected]
Auto delete: No
5、在新建佇列中寫入訊息
mode: 2-persistent
headers: a = 123
properties: id=1
payload: hello,world!
6、檢視佇列訊息