博文大綱:
一、Rabbitmq概念
二、部署單臺Rabbitmq
三、部署Rabbitmq集群
四、單臺節(jié)點加入或退出群集配置創(chuàng)新互聯(lián)網(wǎng)站建設服務商,為中小企業(yè)提供成都做網(wǎng)站、網(wǎng)站設計、外貿(mào)營銷網(wǎng)站建設服務,網(wǎng)站設計,網(wǎng)站托管、服務器托管等一站式綜合服務型公司,專業(yè)打造企業(yè)形象網(wǎng)站,讓您在眾多競爭對手中脫穎而出創(chuàng)新互聯(lián)。
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ā)布者、消費者以及消息中間件可以部署到不同的物理機器上。
消息隊列在實際應用中常用在異步處理、應用解耦、流量削鋒和消息通訊這四個場景。
注:在開始之前,主機名最好為默認的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的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集群大概分為兩種方式:
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ù)的持久化。
其中192.168.20.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
[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/
在所有要加入群集的服務器上執(zhí)行以下命令進行重啟(包括rabbitmq01)。
[root@localhost ~]# init 6 #重啟后就會發(fā)現(xiàn)主機名已經(jīng)更改為hosts文件中定義的了
若重啟的時后被卡在某個界面,那么需要強制重啟。
[root@rabbitmq01 ~]# ps -ef | grep rabbit #重啟后確定已經(jīng)啟動
[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é)點名稱
[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
[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會進行報警
由于節(jié)點被reset重置了,所以用戶也需要重新創(chuàng)建。
[root@rabbitmq01 ~]# rabbitmqctl add_user admin 123.com
[root@rabbitmq01 ~]# rabbitmqctl set_user_tags admin administrator
群集內(nèi)任意節(jié)點的IP+15672端口都可以進行登錄:
可以在下面的頁面看到群集節(jié)點的信息:
進入創(chuàng)建的虛擬主機:
然后配置如下:
設置完成后再次查看虛擬主機:
設置匹配策略:
發(fā)布消息:
設置發(fā)布消息內(nèi)容:
然后刷新當前頁面,即可看到在當前虛擬主機中的隊列總數(shù):
由于我在上面部署群集時,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加入到群集:
[root@rabbitmq04 ~]# rabbitmqctl stop_app
[root@rabbitmq04 ~]# rabbitmqctl -n rabbit@rabbitmq01 forget_cluster_node rabbit@rabbitmq04
# -n:指定節(jié)點名稱
# forget_cluster_node:后面跟要刪除的節(jié)點名稱
———————— 本文至此結(jié)束,感謝閱讀 ————————