RabbitMQ叢集的架構搭建全過程及JMeter壓測軟體安裝使用
什麼是RabbitMQ?
MQ全稱為Message Queue, 訊息佇列(MQ)是一種應用程式對應用程式的通訊方法。應用程式通過讀寫出入佇列的訊息(針對應用程式的資料)來通訊,而無需專用連線來連結它們。訊息傳遞指的是程式之間通過在訊息中傳送資料進行通訊,而不是通過直接呼叫彼此來通訊,直接呼叫通常是用於諸如的技術。排隊指的是應用程式通過 佇列來通訊。佇列的使用除去了接收和傳送應用程式同時執行的要求。
RabbitMQ是一個由erlang開發的AMQP(Advanved Message Queue,高階佇列訊息協議)的開源實現。
RabbitMQ應用場景:
在專案中,將一些無需即時返回且耗時的操作提取出來,進行非同步處理,而這種非同步處理的方式大大地節省了伺服器的請求響應時間,從而提高了系統的吞吐量。
架構思路:
在一個叢集裡,三臺伺服器,其中一臺使用磁碟模式,另兩臺使用記憶體模式。兩臺記憶體模式的節點無疑速度更快,因此通過客戶端連線訪問它們。但是客戶端不可能分別連線兩個記憶體節點,肯定是通過前端反向代理去輪詢釋出請求。如果擔心前端反向代理伺服器故障,可以通過keepalived做一個高可用架構。而磁碟模式的節點,由於磁碟IO相對較慢,因此僅做資料備份使用。
注意:三臺伺服器都需要連上網際網路並安裝軟體包,另外
配置表:
IP地址 | 主機名 | 作業系統 | 防火牆和SELINUX | 用途 |
192.168.80.184 | mq01 | Centos7.4 | 關閉 | 磁碟節點 |
192.168.80.185 | mq02 | Centos7.4 | 關閉 | 記憶體節點 |
192.168.80.186 | mq03 | Centos7.4 | 關閉 | 記憶體節點 |
注意:這裡主機名不可以帶 . 否則會出錯
----1.使用Centos7.4自帶的YUM源安裝軟體--三臺都一樣---需要公網環境---
service firewalld stop
setenforce 0
yum install -y epel-release
yum install -y rabbitmq-server
/usr/lib/rabbitmq/bin/rabbitmq-plugins list //檢視外掛安裝情況
/usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_management //啟用rabbitmq_management服務
vi /etc/hosts
192.168.80.181 mq01 //注意這裡的主機名mq01中不能帶.
:wq
service rabbitmq-server start
netstat -anpt | grep 5672
service rabbitmq-server stop //停止三臺伺服器是為了下面修改cookie值時不會報錯
more /var/lib/rabbitmq/.erlang.cookie //檢視三臺伺服器上的cookie,叢集場景下,三臺的值需要相同,所以需要修改三臺的cookie值為相同
vi /var/lib/rabbitmq/.erlang.cookie
......
:wq
service rabbitmq-server start //此時啟動三臺伺服器,再去驗證三臺伺服器cookie值是否一致
rabbitmqctl cluster_status //檢查三臺的叢集狀態,目前相互獨立,沒有形成叢集。
mq01這臺伺服器情況顯示如下:
Cluster status of node [email protected] ...
[{nodes,[{disc,[[email protected]]}]},
{running_nodes,[[email protected]]},
{cluster_name,<<"[email protected]">>},
{partitions,[]}]
...done.
---------2.在mq02和mq03上操作---記憶體節點------------
rabbitmqctl stop_app //僅關閉應用,不關閉節點
rabbitmqctl join_cluster --ram [email protected] //把mq02和mq03節點加入到磁碟節點mq01
rabbitmqctl start_app //開啟應用
rabbitmqctl cluster_status //驗證叢集狀態如下
Cluster status of node [email protected] ...
[{nodes,[{disc,[[email protected]]},{ram,[[email protected]]}]},
{running_nodes,[[email protected],[email protected]]},
{cluster_name,<<"[email protected]">>},
{partitions,[]}]
...done.
去瀏覽器中訪問:
http://192.168.80.184:15672/ //預設使用者名稱:guest 密碼:guest,埠會自動將5672變成15672
--------新增一個策略---------
admin->policies->add/update a policy
name:策略名稱
pattern: ^a //以a開頭
definition:ha-mode all //使用ha-mode模式中的all,也就是同步所有匹配的佇列
Priority:優先順序,預設是0,值越大優先順序越高
add policy 完成
---------以下簡單增加訊息佇列-----
queues->
add queue 完成
--------------再新建一個bb佇列--arguments項不填寫-----------
add queue 完成
-----------以下在aa和bb佇列中新建訊息--------
點aa->Publish message
close 完成
以同樣的方法給bb也建立訊息,檢視訊息記錄如下:
------------以下做破壞性測試-----------
[[email protected] ~]# service rabbitmq-server stop //把mq01關閉
http://192.168.80.185:15672/ //在02或03上測試訊息是否存在。而且bb訊息佇列已經不在了,說明沒有做映象模式。
[[email protected] ~]# service rabbitmq-server stop //再把02關閉在03上檢視應該訊息還在,注意地址
http://192.168.80.186:15672/
service rabbitmq-server start //把01和02都啟動,訊息不同步
此時若想同步訊息佇列:
[[email protected] ~]# rabbitmqctl sync_queue aa //在任意節點手動同步佇列
[[email protected] ~]# ll /var/lib/rabbitmq/mnesia/rabbit\@mq01/queues/ //在mq01上檢視訊息佇列中的資訊
[[email protected] ~]# ll /var/lib/rabbitmq/mnesia/rabbit\@mq02/queues/ //在mq02上檢視訊息佇列中的資訊
[[email protected] ~]# ll /var/lib/rabbitmq/mnesia/rabbit\@mq03/queues/ //在mq03上檢視訊息佇列中的資訊
再去客戶端檢視:
-----------以下JMeter壓力測試軟體------------
下載-Binaries 包網址:https://jmeter.apache.org/download_jmeter.cgi
-------在微軟系統下配置JAVA環境-------
安裝jdk-8u161-windows-x64
右擊電腦-》屬性-》高階-》環境變數-》系統變數-》PATH-》編輯-》新建-》加入下面的路徑-》確定
C:\Program Files (x86)\Java\jdk1.7.0_55\bin
cmd檢視版本資訊:
Java -version
解壓JMeter,然後到解壓目錄中的bin目錄下執行,jmeter.bat 啟動程式
在選項中選擇語言環境。
使用技巧,查詢相關資料。