溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Rabbitmq群集部署

發(fā)布時間:2020-07-12 08:50:16 來源:網(wǎng)絡 閱讀:462 作者:warrent 欄目:系統(tǒng)運維

博文大綱:
一、Rabbitmq概念
二、部署單臺Rabbitmq
三、部署Rabbitmq集群
四、單臺節(jié)點加入或退出群集配置

一、Rabbitmq概念

RabbitMQ是一個開源的靠AMQP協(xié)議實現(xiàn)的服務,服務器端用Erlang語言編寫,支持多種客戶端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系統(tǒng)中存儲轉(zhuǎn)發(fā)消息,在易用性、擴展性、高可用性等方面表現(xiàn)不俗。
AMQP,即Advanced Message Queuing Protocol,高級消息隊列協(xié)議,是應用層協(xié)議的一個開放標準,為面向消息的中間件設計。消息中間件主要用于組件之間的解耦,消息的發(fā)送者無需知道消息使用者的存在,反之亦然。
它可以使對應的客戶端(client)與對應的消息中間件(broker)進行交互。消息中間件發(fā)布者(publisher)那里收到消息(發(fā)布消息的應用,也稱為producer),然后將他們轉(zhuǎn)發(fā)給消費者(consumers,處理消息的應用)。由于AMQP是一個網(wǎng)絡協(xié)議,所以發(fā)布者、消費者以及消息中間件可以部署到不同的物理機器上。

Rabbitmq使用場景

消息隊列在實際應用中常用在異步處理、應用解耦、流量削鋒和消息通訊這四個場景。

二、部署單臺Rabbitmq

注:在開始之前,主機名最好為默認的localhosts(如果不是,會在啟動rabbitmq時報錯,解決方法:重啟主機,再啟動rabbitmq)

可以自行在官網(wǎng)下載所需軟件,也可以下載我網(wǎng)盤中的rpm包,然后自行上傳至服務器。

下面這臺服務器的IP為192.168.20.2。

[root@localhost src]# ls      #確認所需RPM包
erlang-18.1-1.el6.x86_64.rpm
rabbitmq-server-3.6.6-1.el6.noarch.rpm
socat-1.7.3.2-2.el7.x86_64.rpm
[root@localhost src]# yum -y localinstall erlang-18.1-1.el6.x86_64.rpm rabbitmq-server-3.6.6-1.el6.noarch.rpm socat-1.7.3.2-2.el7.x86_64.rpm
#安裝RPM包
[root@localhost src]# chkconfig rabbitmq-server on   #rabbitmq加入開機自啟
[root@localhost src]# /etc/init.d/rabbitmq-server start    #啟動rabbitmq服務

確定rabbitmq正在運行:

[root@localhost src]# ps -ef | grep rabbitmq    

上述命令返回的結(jié)果如下:

Rabbitmq群集部署

#開啟rabbitmq的web管理插件,以便可以通過瀏覽器進行訪問
[root@localhost src]# rabbitmq-plugins enable rabbitmq_management
#創(chuàng)建登錄用戶
[root@localhost src]# rabbitmqctl add_user admin 123.com
#將創(chuàng)建的admin用戶添加至administrator組
[root@localhost src]# rabbitmqctl set_user_tags admin administrator

客戶端訪問rabbitmq服務器的15672端口,使用新創(chuàng)建的admin用戶進行登錄,登錄成功后顯示如下:

Rabbitmq群集部署

能夠訪問成功,表示單臺rabbitmq就搭建完成了。

三、部署Rabbitmq集群

Rabbitmq集群大概分為兩種方式:
1、普通模式:默認的集群模式,消息的尸體只存在一個節(jié)點上;
2、鏡像模式:把需要的隊列做成鏡像,存在于多個節(jié)點。
ha-mode:

  • all:列隊到所有節(jié)點;
  • exatly:隨機鏡像到其他節(jié)點上;
  • nodes:鏡像到指定節(jié)點上。

集群節(jié)點模式:
1、內(nèi)存節(jié)點:工作在內(nèi)存上;
2、磁盤節(jié)點:工作在磁盤上;
例外:內(nèi)存節(jié)點和磁盤節(jié)點共同存在,提高訪問速度的同時增加數(shù)據(jù)持久化。

相比內(nèi)存節(jié)點雖然不寫入磁盤,但是它執(zhí)行比磁盤節(jié)點要好,集群中,只需要一個磁盤來保存狀態(tài)就足夠了,如果集群中只有內(nèi)存節(jié)點,那么節(jié)點一旦宕機,所有的狀態(tài)、消息都會丟失,無法實現(xiàn)數(shù)據(jù)的持久化。

1、部署環(huán)境如下:

Rabbitmq群集部署

其中192.168.20.2是基于上面的單臺rabbitmq來做的。

2、安裝rabbitmq服務

在192.168.20.3和20.4兩個節(jié)點(20.5節(jié)點后面再用到)進行以下操作,以便部署rabbitmq服務:

#上傳所需rpm包
[root@localhost src]# ls      
erlang-18.1-1.el6.x86_64.rpm
rabbitmq-server-3.6.6-1.el6.noarch.rpm
socat-1.7.3.2-2.el7.x86_64.rpm
#安裝rabbitmq
[root@localhost src]# yum -y localinstall erlang-18.1-1.el6.x86_64.rpm rabbitmq-server-3.6.6-1.el6.noarch.rpm socat-1.7.3.2-2.el7.x86_64.rpm 
#啟動rabbitmq并加入開機自啟
[root@localhost src]# /etc/init.d/rabbitmq-server start
[root@localhost src]# chkconfig rabbitmq-server on

3、配置主機192.168.20.2

[root@localhost ~]# tail -4 /etc/hosts     #配置本地解析(主機名直接寫想要自定義的即可)
192.168.20.2 rabbitmq01
192.168.20.3 rabbitmq02
192.168.20.4 rabbitmq03
192.168.20.5 rabbitmq04
#將hosts文件復制到其他節(jié)點
[root@localhost ~]# scp /etc/hosts root@192.168.20.3:/etc/
[root@localhost ~]# scp /etc/hosts root@192.168.20.4:/etc/
[root@localhost ~]# scp /etc/hosts root@192.168.20.5:/etc/
#將rabbitmq01的cookie節(jié)點信息復制到其他需要加入群集的節(jié)點
#部署群集的時候需要節(jié)點cookie信息一致
[root@localhost ~]# scp /var/lib/rabbitmq/.erlang.cookie root@192.168.20.3:/var/lib/rabbitmq/
[root@localhost ~]# scp /var/lib/rabbitmq/.erlang.cookie root@192.168.20.4:/var/lib/rabbitmq/

4、重啟所有要加入群集的節(jié)點服務器

在所有要加入群集的服務器上執(zhí)行以下命令進行重啟(包括rabbitmq01)。

[root@localhost ~]# init 6       #重啟后就會發(fā)現(xiàn)主機名已經(jīng)更改為hosts文件中定義的了

若重啟的時后被卡在某個界面,那么需要強制重啟。

[root@rabbitmq01 ~]# ps -ef | grep rabbit    #重啟后確定已經(jīng)啟動

5、在rabbitmq01上配置群集

[root@rabbitmq01 ~]# rabbitmqctl  stop_app   #停止rabbitmq節(jié)點服務
[root@rabbitmq01 ~]#  rabbitmqctl reset     #重置rabbitmq節(jié)點
[root@rabbitmq01 ~]# rabbitmqctl start_app    #啟動rabbit節(jié)點服務
Starting node rabbit@rabbitmq01 ... #復制返回的節(jié)點名稱

6、配置rabbitmq02、03加入rabbitmq01群集

[root@rabbitmq02 ~]# rabbitmqctl stop_app   #停止節(jié)點服務
[root@rabbitmq02 ~]# rabbitmqctl reset     #重置節(jié)點
[root@rabbitmq02 ~]# rabbitmqctl join_cluster --ram rabbit@rabbitmq01          #以內(nèi)存方式加入群集,后面是復制的rabbitmq01的節(jié)點名
[root@rabbitmq02 ~]# rabbitmqctl start_app   
[root@rabbitmq02 ~]# rabbitmq-plugins enable rabbitmq_management

7、在rabbitmq01上查看節(jié)點狀態(tài)

[root@rabbitmq01 ~]# rabbitmqctl cluster_status       #查看節(jié)點狀態(tài)
Cluster status of node rabbit@rabbitmq01 ...
[{nodes,[{disc,[rabbit@rabbitmq01]},
         {ram,[rabbit@rabbitmq03,rabbit@rabbitmq02]}]},
 {running_nodes,[rabbit@rabbitmq03,rabbit@rabbitmq02,rabbit@rabbitmq01]},
 {cluster_name,<<"rabbit@rabbitmq01">>},
 {partitions,[]},
 {alarms,[{rabbit@rabbitmq03,[]},
          {rabbit@rabbitmq02,[]},
          {rabbit@rabbitmq01,[]}]}]
# rabbit01工作模式為磁盤節(jié)點;rabbit02和03為內(nèi)存節(jié)點模式
# running_nodes:正在運行的節(jié)點
# cluster_name:節(jié)點名稱
# alarms:發(fā)生問題時rabbit01、02、03會進行報警

8、在rabbitmq創(chuàng)建管理用戶并加入管理組

由于節(jié)點被reset重置了,所以用戶也需要重新創(chuàng)建。

[root@rabbitmq01 ~]# rabbitmqctl add_user admin 123.com
[root@rabbitmq01 ~]# rabbitmqctl set_user_tags admin administrator

9、登錄web界面訪問

群集內(nèi)任意節(jié)點的IP+15672端口都可以進行登錄:

可以在下面的頁面看到群集節(jié)點的信息:
Rabbitmq群集部署

10、配置web界面添加Vhost

Rabbitmq群集部署

進入創(chuàng)建的虛擬主機:

Rabbitmq群集部署

然后配置如下:

Rabbitmq群集部署

設置完成后再次查看虛擬主機:

Rabbitmq群集部署

設置匹配策略:

Rabbitmq群集部署

發(fā)布消息:

Rabbitmq群集部署

設置發(fā)布消息內(nèi)容:

Rabbitmq群集部署

Rabbitmq群集部署

Rabbitmq群集部署

然后刷新當前頁面,即可看到在當前虛擬主機中的隊列總數(shù):

Rabbitmq群集部署

四、單臺節(jié)點加入或退出群集配置

1、節(jié)點加入群集

由于我在上面部署群集時,hosts文件已經(jīng)可以解析群集內(nèi)的節(jié)點,所以這里就省略解析了

#在節(jié)點192.168.20.5服務器上安裝rabbitmq并配置
[root@localhost src]# yum -y localinstall erlang-18.1-1.el6.x86_64.rpm rabbitmq-server-3.6.6-1.el6.noarch.rpm socat-1.7.3.2-2.el7.x86_64.rpm 
[root@localhost src]# chkconfig rabbitmq-server on
[root@localhost src]# /etc/init.d/rabbitmq-server start
#將群集中的cookie信息復制到本地
[root@localhost src]# scp root@rabbitmq01:/var/lib/rabbitmq/.erlang.cookie /var/lib/rabbitmq/
[root@localhost src]# init 6       #重啟本機
#加入群集
[root@rabbitmq04 ~]# rabbitmqctl stop_app
[root@rabbitmq04 ~]# rabbitmqctl reset
[root@rabbitmq04 ~]# rabbitmqctl join_cluster --ram rabbit@rabbitmq01
#以內(nèi)存運行的方式加入群集,若要以磁盤的方式加入,省略“--ram”選項即可
[root@rabbitmq04 ~]# rabbitmqctl start_app
#開啟web管理頁面
[root@rabbitmq04 ~]# rabbitmq-plugins enable rabbitmq_management

查看web界面,確認rabbitmq04加入到群集:

Rabbitmq群集部署

2、單節(jié)點退出群集

1)先在rabbitmq04上面停止節(jié)點
[root@rabbitmq04 ~]# rabbitmqctl stop_app
2)回到主節(jié)點rabbitmq01上刪除節(jié)點
[root@rabbitmq04 ~]# rabbitmqctl -n rabbit@rabbitmq01 forget_cluster_node rabbit@rabbitmq04
# -n:指定節(jié)點名稱
# forget_cluster_node:后面跟要刪除的節(jié)點名稱 

———————— 本文至此結(jié)束,感謝閱讀 ————————

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI