您好,登錄后才能下訂單哦!
下文給大家?guī)鞷abbitMQ集群架構(gòu)模式及搭建Rabbitmq-Mirror鏡像集群,希望能夠給大家在實(shí)際運(yùn)用中帶來一定的幫助,負(fù)載均衡涉及的東西比較多,理論也不多,網(wǎng)上有很多書籍,今天我們就用億速云在行業(yè)內(nèi)累計(jì)的經(jīng)驗(yàn)來做一個(gè)解答。
那么對(duì)于Rabbitmq是單點(diǎn)應(yīng)用來說,如果rabbitmq整個(gè)消息mq都會(huì)攤掉,所有在mq的消息高可用部分,就顯得尤為重要了,那么在mq中提供了四種集群架構(gòu)方案:
1、主備模式 (Warren)
2、鏡像模式 (Mirror)
3、遠(yuǎn)程模式 (Shovel)
4、多活模式 (Federation)
(猜你喜歡:RabbitMQ集群的原理是什么)
在我們開發(fā)中最直接的模式就是主備模式:主要實(shí)現(xiàn)RabbitMQ的高可用集群,一般在并發(fā)和數(shù)據(jù)量不高的情況下,這種模型非常的好用且簡(jiǎn)單,主備模式也稱為Warren模式
(猜你喜歡:rabbitmq 中鏡像與集群的區(qū)別)
也就是一主一備,對(duì)于集群來說至少有兩臺(tái)云服務(wù)器,那么這兩臺(tái)服務(wù)器一臺(tái)在工作,一臺(tái)在閑置,注意,這個(gè)的主備和我們之前的主從是不一樣的,主從的話是一臺(tái)作為主服務(wù)器,一臺(tái)作為從服務(wù)器,雖然這兩臺(tái)是數(shù)據(jù)同步,主負(fù)責(zé)讀寫,而從只負(fù)責(zé)只讀,而主備是一臺(tái)工作一臺(tái)閑著,如果一臺(tái)服務(wù)器宕機(jī)了,那么備服務(wù)器切換過來,可能的話,這種對(duì)于負(fù)載均衡的話一臺(tái)只忙著干活,一臺(tái)只閑著,這種的生產(chǎn)中用的也很少,這種會(huì)造成我們資源的一個(gè)浪費(fèi)。
鏡像模式:集群模式非常經(jīng)典的就是Mirror鏡像模式,保證100%數(shù)據(jù)不丟失,在實(shí)際工作中也是用的最多的,而且實(shí)現(xiàn)集群也非常簡(jiǎn)單,一般互聯(lián)網(wǎng)大廠都會(huì)構(gòu)建這種鏡像集群模式,原理主要是在主備的基礎(chǔ)上進(jìn)行了擴(kuò)展,集群中所有的節(jié)點(diǎn)設(shè)備都是同步的,每一個(gè)隊(duì)列,交換機(jī)里面的配置信息和我們的數(shù)據(jù)都是同步的,對(duì)于這些鏡像在底層同時(shí)進(jìn)行工作,前面的話采用一個(gè)負(fù)載均衡器,采用nginx或者h(yuǎn)aproxy也好,進(jìn)行負(fù)載均衡。
遠(yuǎn)程模式:遠(yuǎn)程模式可以實(shí)現(xiàn)雙活的一種模式,簡(jiǎn)稱Shovel模式,所謂Shovel就是我們可以把消息進(jìn)行不同數(shù)據(jù)中心的復(fù)制工作,我們可以跨地域的讓兩個(gè)MQ集群互聯(lián),比如說一個(gè)集群,我們都會(huì)放在一個(gè)機(jī)房里面,那么如果北京的機(jī)房出現(xiàn)了一些事故停電,或者自然災(zāi)害,那么這個(gè)集群都會(huì)宕機(jī)了,那么在我們對(duì)數(shù)據(jù)要求極高的大型應(yīng)用我們需要設(shè)置多活或者雙活的模式,也就是要搭建多個(gè)數(shù)據(jù)中心,或者多套集群,那么這些集群可以一個(gè)會(huì)放在上海,一個(gè)放在北京,還有應(yīng)放在廣州,三個(gè)集群數(shù)據(jù)都是同步的,中間有任何一個(gè)集群出現(xiàn)了問題,馬上靈活的切換,那么這三個(gè)集群都是可以訪問的話,我們可能會(huì)按照距離,或者訪問速度來進(jìn)行優(yōu)先選擇哪組集群,或者數(shù)據(jù)中心進(jìn)行訪問,所有多活模式,在銀行開發(fā)的時(shí)候一般也叫做容災(zāi)的機(jī)制,至少構(gòu)建兩套集群放在不同的地域,一個(gè)有問題了,立馬進(jìn)行切換,不至于整個(gè)系統(tǒng)宕機(jī),這就是多活模式,在多活模式中MQ也提供了相應(yīng)的實(shí)現(xiàn)方式,早期使用的Shovel模式,這個(gè)模式是mq自帶的一種模式,主要就是可以把消息在不同的數(shù)據(jù)中心進(jìn)行負(fù)載分發(fā),主要就是可以實(shí)現(xiàn)跨地域的讓兩個(gè)mq集群進(jìn)行互聯(lián)。
那么這個(gè)shovel模式需要統(tǒng)一的版本,網(wǎng)絡(luò)達(dá)到一個(gè)什么樣的水平,配置的話也是有些復(fù)雜,這種的話目前已經(jīng)淘汰了,在真正的數(shù)據(jù)復(fù)制的情況下,會(huì)使用多活模式。
多活模式:這種模式也是實(shí)現(xiàn)異地?cái)?shù)據(jù)復(fù)制的主流模式,這種模式是依賴rabbimq的fedrtation插件的模式
本身不是mq自帶的東西,是在mq上進(jìn)行了擴(kuò)展,而這種擴(kuò)展是實(shí)現(xiàn)的可靠的AMQP的數(shù)據(jù)通信,因此配置起來也比較容易,相當(dāng)于配置簡(jiǎn)單化之后的shovel
配置
mq和erlang版本
RabbitMQ使用Erlang開發(fā)
Erlang(['?:l??])是一種通用的面向并發(fā)的編程語言, Erlang是一個(gè)結(jié)構(gòu)化,動(dòng)態(tài)類型編程語言,內(nèi)建并行計(jì)算支持。
使用Erlang來編寫分布式應(yīng)用要簡(jiǎn)單的多,Erlang運(yùn)行時(shí)環(huán)境是一個(gè)虛擬機(jī),有點(diǎn)像Java虛擬機(jī),這樣代碼一經(jīng)編譯,同樣可以隨處運(yùn)行。
下載地址:https://www.rabbitmq.com/download.html
直接下載最新的rabbitmq到本地
rabbitmq還需要依賴erlang的運(yùn)行環(huán)境
https://www.erlang-solutions.com/resources/download.html
選擇centos,找到22.2.5最新的版本下載到本地
[root@m2 mq-soft]# ls
esl-erlang_22.2.8-1~centos~7_amd64.rpm rabbitmq-server-3.8.3-1.el7.noarch.rpm
關(guān)閉防火墻:
#systemctl stop firewalld
#systemctl disable firewalld
關(guān)閉selinux:
#sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
#setenforce 0 # 臨時(shí)
2臺(tái)安裝好Rabbitmq的Centos環(huán)境,啟動(dòng)的時(shí)候使用后臺(tái)啟動(dòng)
后臺(tái)啟動(dòng)mq命令:rabbitmq-server -detached
這里我是提前部署好的MQ,如果想知道怎么部署MQ可以看上一篇文章
修改hostnamectl set-hostname m1/m2
加入主機(jī)列表 vim /etc/hosts
[root@localhost ~]# more /etc/hosts
192.168.30.27 m1
192.168.30.29 m2
mq對(duì)主機(jī)名非常的敏感,即使使用hostnamectl set-hostname m1主機(jī)名之后不重啟的話也是造成集群的不通信的問題
reboot重啟
二、復(fù)制.erlang.cookie
.erlang.cookie是erlang分布式的token文件,集群內(nèi)所有設(shè)備要
持有相同的.erlang.cookie文件才允許彼此通信。
也就是相當(dāng)于你有學(xué)生證它也有學(xué)生證,你們就是學(xué)生,那么就可以一起上學(xué),也就是一個(gè)token文件
找到這個(gè).cookie結(jié)尾的文件,里面看到的是一個(gè)字符串,也就是兩個(gè)主機(jī)需要持有相同的erlang的cookie文件才能進(jìn)行彼此通信
[root@m1 ~]# find / -name *.cookie
/var/lib/rabbitmq/.erlang.cookie
[root@m1 ~]# more /var/lib/rabbitmq/.erlang.cookie
ZCSNJQYQPNPPLIYWOVBJ
進(jìn)行拷貝,將cookie文件拷貝過去
m1 # scp /var/lib/rabbitmq/.erlang.cookie root@192.168.30.24:/var/lib/rabbitmq/
root@192.168.30.24's password:
在兩臺(tái)電腦上執(zhí)行chmod進(jìn)行授權(quán),400對(duì)擁有者才能讀取
m1 chmod 400 /var/lib/rabbitmq/.erlang.cookie
m2 chmod 400 /var/lib/rabbitmq/.erlang.cookie
三、配置鏡像集群
在m2服務(wù)器上執(zhí)行下面的命令將與m1服務(wù)器進(jìn)行復(fù)制
– rabbitmqctl stop_app 暫停服務(wù)
– rabbitmqctl join_cluster rabbit@m1 加入到m1的集群
– rabbitmqctl start_app 啟動(dòng)服務(wù)
– rabbitmqctl cluster_status 驗(yàn)證集群結(jié)果
終止與啟動(dòng)應(yīng)用
rabbitmqctl start_app 啟動(dòng)應(yīng)用
rabbitmqctl stop_app 終止應(yīng)用
在mq2上操作
[root@m2 ~]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@m2 ...
[root@m2 ~]# rabbitmqctl join_cluster rabbit@m1
Clustering node rabbit@m2 with rabbit@m1
[root@m2 ~]# rabbitmqctl start_app
Starting node rabbit@m2 ...
[root@m2 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@m2 ...
Basics
Cluster name: rabbit@m1
Disk Nodes
rabbit@m1
rabbit@m2
Running Nodes
rabbit@m1
rabbit@m2
Versions
rabbit@m1: RabbitMQ 3.8.3 on Erlang 22.2.8
rabbit@m2: RabbitMQ 3.8.3 on Erlang 22.2.8
查看已經(jīng)注冊(cè)進(jìn)來,一般生產(chǎn)中的話,要不就是禁用這個(gè)guest用戶,要不就是跟它修改一個(gè)比較復(fù)雜的密碼
創(chuàng)建test查看m2也會(huì)同步進(jìn)來
一般在程序中我們需要連接一個(gè)IP地址,那么這個(gè)地方就需要這么一個(gè)負(fù)載均衡去實(shí)現(xiàn),這里我們使用HAproxy去實(shí)現(xiàn)
四、鏡像模式遇到的問題
當(dāng)配好兩個(gè)mq的時(shí)候,對(duì)于客戶端也就是java當(dāng)我們?nèi)ミB接的時(shí)候就需要一個(gè)統(tǒng)一的入口來進(jìn)行系統(tǒng)或者消息直接的調(diào)用,也就是需要連接哪臺(tái)服務(wù)器進(jìn)行數(shù)據(jù)的處理,如果是這種情況的話,當(dāng)m1掛的話,我們就需要手動(dòng)的去修改Java客戶端的地址了,另外還有有一個(gè)問題就是m1猛干活,m2閑著沒事做,而對(duì)我們的資源利用也是不合理的,那么負(fù)載均衡器就應(yīng)運(yùn)而生了。
而當(dāng)有haproxy的時(shí)候它會(huì)將這個(gè)請(qǐng)求進(jìn)行具體的轉(zhuǎn)發(fā)到m1或者m2上進(jìn)行分工,比如安裝簡(jiǎn)單的算法輪詢模式,將任務(wù)進(jìn)行均攤,這樣資源就會(huì)被合理的利用了,對(duì)于Java客戶端直接可以配置proxy的地址了,而haproxy可以通過心跳的感知哪些服務(wù)器是可以發(fā)送消息的,比如遇到m2的機(jī)器宕機(jī)了,它就會(huì)自動(dòng)的將我們的服務(wù)退出,來使用其他的節(jié)點(diǎn)也進(jìn)行提供服務(wù)
HAProxy 代理服務(wù)器
HAProxy 是一款提供高可用性、負(fù)載均衡以及基于TCP(第四層)
和HTTP(第七層)應(yīng)用的代理軟件,支持虛擬主機(jī),它是免費(fèi)、
快速并且可靠的一種解決方案。
RabbitMQ集群鏡像模式中,HAProxy用于做Tcp,提供節(jié)點(diǎn)負(fù)載
均衡(LB-LoadBalance)與故障發(fā)現(xiàn)。
安裝haproxyyum -y install haproxy
配置文件的地址
[root@haproxy ~]# find / -name haproxy.cfg
/etc/haproxy/haproxy.cfg
編譯配置文件
#---------------------------------------------------------------------
#common defaults that all the 'listen' and 'backend' sections will
#use if not designated in their block
#---------------------------------------------------------------------
下面的不要了,然后配置以下內(nèi)容
#對(duì)MQ集群進(jìn)行監(jiān)聽
對(duì)MQ的集群的監(jiān)聽HAproxy配置地址我放在了倉(cāng)庫(kù)中,有需要的需要將公鑰發(fā)給我
git clone git@gitee.com:zhaocheng172/rabbitmq-haproxy.git
生效配置文件[root@haproxy ~]# haproxy -f /etc/haproxy/haproxy.cfg
連接haproxy訪問地址是上面設(shè)置的連接密碼rabbitmq,這里在配置文件中去登錄的密碼,和url地址
登錄進(jìn)來可以看到我們的MQ進(jìn)行監(jiān)控到了,如果使用JAVA發(fā)送系統(tǒng)調(diào)用的消息之后那么就會(huì)進(jìn)行消息的提供與消費(fèi)。
看了以上關(guān)于RabbitMQ集群架構(gòu)模式及搭建Rabbitmq-Mirror鏡像集群,如果大家還有什么地方需要了解的可以在億速云行業(yè)資訊里查找自己感興趣的或者找我們的專業(yè)技術(shù)工程師解答的,億速云技術(shù)工程師在行業(yè)內(nèi)擁有十幾年的經(jīng)驗(yàn)了。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。