RabbitMQ教程 | 該不會(huì)還有人不會(huì)使用HAProxy搭建RabbitMQ高可用集群吧,袁庭新安排上
小伙伴們,袁老師又來(lái)啦,今天我要給大家分享的內(nèi)容是如何搭建RabbitMQ高可用集群。我們都知道RabbitMQ是采用Erlang語(yǔ)言開(kāi)的,而Erlang語(yǔ)言天生具備分布式的特點(diǎn),所以RabbitMQ天然支持集群,不需要通過(guò)引入ZooKeeper就能實(shí)現(xiàn)數(shù)據(jù)同步。

今天袁老師會(huì)手把手地教大家來(lái)搭建高可用的RabbitMQ集群環(huán)境,我們這就開(kāi)始吧。
01 RabbitMQ集群環(huán)境搭建
首先,我們需要準(zhǔn)備一臺(tái)IP地址為192.168.230.131的CentOS 7.X的虛擬機(jī),然后在該臺(tái)主機(jī)上克隆出兩臺(tái)新的虛擬機(jī),分別將IP設(shè)置為192.168.230.132和192.168.230.133,這樣我們就準(zhǔn)備好了三臺(tái)Linux服務(wù)器。
在192.168.230.131服務(wù)器上,修改/etc/hosts映射文件。
在192.168.230.132服務(wù)器上,修改/etc/hosts映射文件。
兩臺(tái)Linux主機(jī)修改完host文件后,需重啟Linux服務(wù)器。
在RabbitMQ集群環(huán)境下,節(jié)點(diǎn)間相互通信時(shí),cookie必須保持一致。首先查看.erlang.cookie文件的位置。
同步RabbitMQ的cookie文件到每臺(tái)服務(wù)器,可以使用跨服務(wù)器拷貝.erlang.cookie到每臺(tái)節(jié)點(diǎn)。
兩臺(tái)服務(wù)器同步完cookie文件后,需重啟Linux服務(wù)器。
reboot
在兩臺(tái)服務(wù)器上分別停止防火墻,并啟動(dòng)RabbitMQ服務(wù)。
加入集群節(jié)點(diǎn)(組成集群)。
集群配置好后,可以在RabbitMQ任意節(jié)點(diǎn)上執(zhí)行下面的命令來(lái)查看是否集群配置成功。
在搭建RabbitMQ集群之前,所創(chuàng)建的交換機(jī)、隊(duì)列、用戶都屬于單一結(jié)構(gòu),將在新的RabbitMQ集群環(huán)境中是不能用的。所以在新的集群中重新手動(dòng)添加用戶即可(任意節(jié)點(diǎn)添加,所有節(jié)點(diǎn)共享)。
注意:當(dāng)節(jié)點(diǎn)脫離RabbitMQ集群還原成單一結(jié)構(gòu)后,交換機(jī)、隊(duì)列和用戶等數(shù)據(jù)都會(huì)重新回來(lái)。
創(chuàng)建虛擬機(jī)。選擇【Admin】-【Virtual Hosts】-【Add virtual host】選項(xiàng),添加一個(gè)虛擬機(jī)。

控制臺(tái)查看是否集群成功。

此時(shí),集群搭建完畢,但是默認(rèn)采用的模式普通模式,可靠性不高。因此,需將RabbitMQ改為鏡像模式。
02 鏡像模式
1.鏡像模式介紹
將所有隊(duì)列設(shè)置為鏡像隊(duì)列,即隊(duì)列會(huì)被復(fù)制到各個(gè)節(jié)點(diǎn),各個(gè)節(jié)點(diǎn)狀態(tài)一致。語(yǔ)法結(jié)構(gòu)見(jiàn)下:
參數(shù)含義解析:
name:表示策略名,名稱自定義。
pattern:隊(duì)列的匹配模式,使用正則表達(dá)式進(jìn)行匹配。"^"表示匹配所有的隊(duì)列。
definition:鏡像定義,包括三個(gè)部分ha-mode、ha-params和ha-sync-mode。
ha-mode:High Available高可用,簡(jiǎn)稱HA。指明鏡像隊(duì)列的模式,有效值為all/exactly/nodes。
ha-params:表示ha-mode模式需要用到的參數(shù)。
ha-sync-mode:進(jìn)行隊(duì)列中消息的同步方式,有效值為automatic和manual。
2.鏡像模式實(shí)現(xiàn)
通過(guò)命令的方式設(shè)置鏡像模式策略,在任意一個(gè)節(jié)點(diǎn)上執(zhí)行下面的命令。
鏡像配置參考:http://www.rabbitmq.com/ha.html#replication-factor。
也可以通過(guò)RabbitMQ可視化管理頁(yè)面設(shè)置鏡像模式策略。

運(yùn)行測(cè)試類中的delayMessage()測(cè)試方法,然后啟動(dòng)項(xiàng)目主類,測(cè)試在RabbitMQ集群環(huán)境下死信隊(duì)列中的消息是否可被正常消費(fèi)。
03 HAProxy實(shí)現(xiàn)鏡像隊(duì)列的負(fù)載均衡
雖然我們?cè)赗abbitMQ集群中,訪問(wèn)node1服務(wù)器可以實(shí)現(xiàn)消息的同步,將消息同步到node2服務(wù)器上;但在目前的集群架構(gòu)中,node1服務(wù)器始終處于接收消息的角色,這樣會(huì)導(dǎo)致node1服務(wù)器過(guò)于繁忙,因此需要對(duì)RabbitMQ集群進(jìn)行負(fù)載均衡配置,讓node1和node2服務(wù)器輪流接收消息,然后再做消息鏡像同步。
1.HAProxy簡(jiǎn)介
HAProxy(High Available - 高可用,Proxy - 代理),HAProxy是一款提供高可用性、負(fù)載均衡,并且基于TCP和HTTP應(yīng)用的代理軟件。HAProxy完全免費(fèi)。HAProxy可以支持?jǐn)?shù)以萬(wàn)計(jì)的并發(fā)連接。HAProxy可以簡(jiǎn)單又安全的整合進(jìn)架構(gòu)中,同時(shí)還保護(hù)Web服務(wù)器不被暴露到網(wǎng)絡(luò)上。

2.HAProxy與Nginx對(duì)比
Open System Interconnection,開(kāi)放式系統(tǒng)互聯(lián),簡(jiǎn)稱OSI。將計(jì)算機(jī)網(wǎng)絡(luò)通信的工作劃分為七層,分別是:物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會(huì)話層、表示層和應(yīng)用層。
2.1 Nginx的優(yōu)點(diǎn)
Nginx工作在OSI第七層,可以針對(duì)HTTP應(yīng)用做一些分流的策略;
Nginx對(duì)網(wǎng)絡(luò)的依賴非常小,理論上能ping通就能進(jìn)行負(fù)載均衡功能,屹立至今的絕對(duì)優(yōu)勢(shì);
Nginx安裝和配置比較簡(jiǎn)單,測(cè)試起來(lái)比較方便;
Nginx不僅僅是一款優(yōu)秀的負(fù)載均衡器/反向代理軟件,它同時(shí)也是功能強(qiáng)大的Web應(yīng)用服務(wù)器。
2.2 HAProxy的優(yōu)點(diǎn)
HAProxy工作在網(wǎng)絡(luò)四層和七層,支持TCP與HTTP協(xié)議;
支持8種負(fù)載均衡策略 ,支持心跳檢測(cè);
HAProxy僅僅只是一款負(fù)載均衡軟件;單純從效率上來(lái)講HAProxy比Nginx有更出色的負(fù)載均衡速度,在并發(fā)處理上也是優(yōu)于Nginx的。
對(duì)于HTTP協(xié)議,HAProxy處理效率比Nginx高。所以,沒(méi)有特殊要求的時(shí)候或者一般場(chǎng)景,建議使用HAProxy來(lái)做HTTP協(xié)議請(qǐng)求。如果是在Web應(yīng)用中,那么建議使用Nginx??傊蠹铱梢越Y(jié)合各自使用場(chǎng)景的特點(diǎn)來(lái)進(jìn)行合理地選擇。
3.HAProxy安裝和配置
使用瀏覽器訪問(wèn)以下地址下載HAProxy安裝包。
再準(zhǔn)備一臺(tái)CentOS服務(wù)器,將IP地址設(shè)置為192.168.230.133,將作為HAProxy服務(wù)器。
將下載好的HAProxy安裝包傳輸?shù)竭@臺(tái)CentOS系統(tǒng)中。
解壓HAProxy安裝包。
make時(shí)需要使用TARGET指定內(nèi)核及版本。
根據(jù)內(nèi)核版本選擇編譯參數(shù)。
4.編譯安裝HAProxy
1.進(jìn)入haproxy-1.8.12目錄后,進(jìn)行編譯和安裝。
2.編譯HAProxy參數(shù)說(shuō)明:

3.安裝成功后,查看HAProxy版本。
4.配置啟動(dòng)文件,復(fù)制haproxy文件到/usr/sbin目錄下 ,復(fù)制haproxy.init腳本到/etc/init.d下。
5.創(chuàng)建系統(tǒng)賬號(hào)。
6.haproxy.cfg配置文件需要自行創(chuàng)建。
7.添加配置信息到haproxy.cfg文件。
8.關(guān)閉防火墻。
5.啟動(dòng)HAProxy
1.HAProxy服務(wù)操作相關(guān)命令介紹。

2.啟動(dòng)HAProxy。
3.查看HAProxy進(jìn)程。
4.使用瀏覽器訪問(wèn)monitor監(jiān)控中心,它的地址是http://192.168.230.133:8100/monitor,查看HAProxy控制臺(tái)對(duì)node1和node2的監(jiān)控情況。

04 總結(jié)回顧
今天袁老師主要是帶各位小伙伴完成了RabbitMQ集群環(huán)境的搭建,以及為提升集群的高可用搭建了HAProxy代理。最后,我們又測(cè)試了RabbitMQ集群環(huán)境下高可用性和負(fù)載均衡的性能。
今天的內(nèi)容就到這里吧,現(xiàn)在你學(xué)會(huì)了嗎?關(guān)注「袁庭新」,干貨天天都不斷!
