1. 程式人生 > >Rabbitmq叢集詳解

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的內部結構

    Rabbitmq叢集詳解

  • Message
    訊息,訊息是不具名的,它由訊息頭和訊息體組成。
  • Publisher
    訊息的生產者,也是一個向交換器釋出訊息的客戶端應用程式。
  • Exchange
    交換器,用來接收生產者傳送的訊息並將這些訊息路由給伺服器中的佇列。
  • Binding
    繫結,用於訊息佇列和交換器之間的關聯。
  • Queue
    訊息佇列,用來儲存訊息直到傳送給消費者。它是訊息的容器,也是訊息的終點。一個訊息可投入一個或多個佇列。
  • Connection
    網路連線,比如一個TCP連線。
  • Channel
    通道,多路複用連線中的一條獨立的雙向資料流通道。
  • Consumer
    訊息的消費者,表示一個從訊息佇列中取得訊息的客戶端應用程式。
  • Virtual Host
    虛擬主機,表示一批交換器、訊息佇列和相關物件。虛擬主機是共享相同的身份認證和加密環境的獨立伺服器域。
  • Broker
    表示訊息佇列伺服器實體。

    Rabbitmq應用

    rabbit應用模式

    單一模式
    普通模式(預設叢集模式)
    映象模式(佇列做成映象佇列,存在多個節點)
    Rabbitmq的叢集節點包括記憶體節點、磁碟節點,支援訊息持久化、也就是資料寫在磁碟上。

rabbit工作過程

Rabbitmq叢集詳解

(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

Rabbitmq叢集詳解
Rabbitmq叢集詳解
Rabbitmq叢集詳解
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

Rabbitmq叢集詳解
6、開啟管理服務

rabbitmq-plugins enable rabbitmq_management

Rabbitmq叢集詳解

7、開啟rabbitmq服務

systemctl start rabbitmq-server.service
netstat -ntap |grep 5672

Rabbitmq叢集詳解
8、檢視各自的群集狀態

rabbitmqctl cluster_status

mq01
Rabbitmq叢集詳解
mq02
Rabbitmq叢集詳解
mq03
Rabbitmq叢集詳解
9、關閉服務,複製配置檔案後開啟

systemctl stop rabbitmq-server.service
//隱藏檔案,三臺配置一樣,將磁碟節點上的檔案內容複製到其他2臺
vim /var/lib/rabbitmq/.erlang.cookie
systemctl start rabbitmq-server.service

Rabbitmq叢集詳解
++++++以下操作在記憶體節點上++++++
1、將mq02、mq03記憶體節點伺服器分別加入到磁碟節點

rabbitmqctl stop_app
rabbitmqctl join_cluster --ram [email protected] #加入到磁碟節點
#ram:以記憶體節點形式新增,不加磁碟形式
rabbitmqctl cluster_status #驗證叢集狀態

mq02
Rabbitmq叢集詳解
mq03
Rabbitmq叢集詳解
2、檢視mq01磁碟節點伺服器的叢集狀態

rabbitmqctl cluster_status

Rabbitmq叢集詳解
++++++rabbit圖形化操作++++++
1、登入磁碟節點伺服器

http://192.168.37.128:15672/ 預設使用者:guest 密碼:guest

Rabbitmq叢集詳解
2、在磁碟節點伺服器上建立策略

name: my_ha
pattern: ^a
Apply to : Exchange and queues
definition: ha-mode all

Rabbitmq叢集詳解
3、檢視策略(三臺伺服器同步)
mq01
Rabbitmq叢集詳解
mq02
Rabbitmq叢集詳解
mq03
Rabbitmq叢集詳解
4、在磁碟節點伺服器上增加訊息佇列
Name: aa
Durabiliy: Durable
Node: [email protected]
Auto delete: No
Rabbitmq叢集詳解
5、在新建佇列中寫入訊息
mode: 2-persistent
headers: a = 123
properties: id=1
payload: hello,world!
Rabbitmq叢集詳解
6、檢視佇列訊息
Rabbitmq叢集詳解