<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Rabbitmq集群高可用部署詳細(xì)

          共 4200字,需瀏覽 9分鐘

           ·

          2020-12-24 00:46

          點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號(hào)”

          優(yōu)質(zhì)文章,第一時(shí)間送達(dá)

          ? 作者?|??張龍豪

          來(lái)源 |? urlify.cn/67fequ

          66套java從入門(mén)到精通實(shí)戰(zhàn)課程分享

          序言? ??

          清風(fēng)萬(wàn)里的季節(jié),周末本該和親人朋友一起消遣這爛漫的花花草草,或是懶洋洋的曬個(gè)太陽(yáng)聽(tīng)聽(tīng)風(fēng)聲?shū)B(niǎo)鳴。無(wú)奈工作使然,理想使然,我回到啦公司,敲起啦鍵盤(pán),擼起啦代碼,程序狗的世界一片黯然,一片黯然,愿天下所有努力的程序狗都?jí)粝氤烧姘桑。? ?

          回到正題,為什么搭建rabbitmq集群?rabbitmq集群有那些模式?如何搭建Rabbitmq集群?rabbitmq鏡像高可用策略有那些?

          1、首先這款產(chǎn)品本身的優(yōu)點(diǎn)眾多,大家最看好的便是他的異步化提高系統(tǒng)抗峰值能力,然后便是系統(tǒng)及功能結(jié)構(gòu)解耦,那么照此兩點(diǎn)來(lái)說(shuō),他的在整個(gè)系統(tǒng)中的作用還是至關(guān)重要的,那么如此重要,當(dāng)然要考慮他的高可用性,那么便有啦第一個(gè)問(wèn)題的解答。

          2、rabbitmq有3種模式,但集群模式是2種。詳細(xì)如下:

          • 單一模式:即單機(jī)情況不做集群,就單獨(dú)運(yùn)行一個(gè)rabbitmq而已。

          • 普通模式:默認(rèn)模式,以?xún)蓚€(gè)節(jié)點(diǎn)(rabbit01、rabbit02)為例來(lái)進(jìn)行說(shuō)明。對(duì)于Queue來(lái)說(shuō),消息實(shí)體只存在于其中一個(gè)節(jié)點(diǎn)rabbit01(或者rabbit02),rabbit01和rabbit02兩個(gè)節(jié)點(diǎn)僅有相同的元數(shù)據(jù),即隊(duì)列的結(jié)構(gòu)。當(dāng)消息進(jìn)入rabbit01節(jié)點(diǎn)的Queue后,consumer從rabbit02節(jié)點(diǎn)消費(fèi)時(shí),RabbitMQ會(huì)臨時(shí)在rabbit01、rabbit02間進(jìn)行消息傳輸,把A中的消息實(shí)體取出并經(jīng)過(guò)B發(fā)送給consumer。所以consumer應(yīng)盡量連接每一個(gè)節(jié)點(diǎn),從中取消息。即對(duì)于同一個(gè)邏輯隊(duì)列,要在多個(gè)節(jié)點(diǎn)建立物理Queue。否則無(wú)論consumer連rabbit01或rabbit02,出口總在rabbit01,會(huì)產(chǎn)生瓶頸。當(dāng)rabbit01節(jié)點(diǎn)故障后,rabbit02節(jié)點(diǎn)無(wú)法取到rabbit01節(jié)點(diǎn)中還未消費(fèi)的消息實(shí)體。如果做了消息持久化,那么得等rabbit01節(jié)點(diǎn)恢復(fù),然后才可被消費(fèi);如果沒(méi)有持久化的話,就會(huì)產(chǎn)生消息丟失的現(xiàn)象。

          • 鏡像模式:把需要的隊(duì)列做成鏡像隊(duì)列,存在與多個(gè)節(jié)點(diǎn)屬于RabbitMQ的HA方案。該模式解決了普通模式中的問(wèn)題,其實(shí)質(zhì)和普通模式不同之處在于,消息實(shí)體會(huì)主動(dòng)在鏡像節(jié)點(diǎn)間同步,而不是在客戶(hù)端取數(shù)據(jù)時(shí)臨時(shí)拉取。該模式帶來(lái)的副作用也很明顯,除了降低系統(tǒng)性能外,如果鏡像隊(duì)列數(shù)量過(guò)多,加之大量的消息進(jìn)入,集群內(nèi)部的網(wǎng)絡(luò)帶寬將會(huì)被這種同步通訊大大消耗掉。所以在對(duì)可靠性要求較高的場(chǎng)合中適用。

          準(zhǔn)備集群環(huán)境安裝RabbitMQ

          我的環(huán)境如下:

          1、兩臺(tái)Centos7的機(jī)器,hostname分別為:F , G .

          2、IP地址分別為:F—172.18.8.229 , G—172.18.8.224。

          3、修改hosts文件如下,下面是G這臺(tái)機(jī)器的hosts文件內(nèi)容,F(xiàn)也需要如下配置:

          [root@G?bin]#?cat?/etc/hosts
          127.0.0.1?G??localhost?localhost.localdomain?localhost4?localhost4.localdomain4?
          ::1???????G??localhost?localhost.localdomain?localhost6?localhost6.localdomain6?

          172.18.8.224?G
          172.18.8.229?F

          4、保證兩臺(tái)機(jī)器都能夠相互ping通,如下圖:

          好啦,環(huán)境到此就就能滿(mǎn)足啦,接下來(lái)我們把rabbitmq裝在2臺(tái)機(jī)器上。

          學(xué)習(xí)不看官方文檔,那就別學(xué)啦,地址如下:http://www.rabbitmq.com/install-rpm.html

          安裝rabbitmq依賴(lài)erlang環(huán)境,所以我們要先安裝erlang環(huán)境。

          安裝完成之后,下載rabbitmq的rpm包ivh即可。如果實(shí)在不會(huì)安裝,Linux系統(tǒng)(二)軟件的安裝與卸載?里面有安裝rabbitmq的實(shí)例,看官笑納,實(shí)在不會(huì)裝那加入左上方群,或者點(diǎn)擊網(wǎng)頁(yè)右上方的X吧,一定要相信不是你的錯(cuò),是你與rabbitmq緣分不到。

          安裝啟動(dòng)過(guò)程中如果出現(xiàn)error,那可參考下面幾個(gè)方案試試:

          • vim /etc/rabbitmq/enable_plugins :刪除文件中的內(nèi)容。

          • 查看hosts文件是否配置完善,相互是否可以ping通

          • 查看相關(guān)端口是否被占用,如若占用kill掉

          • 如果已經(jīng)集群,那么要查看所有集群中的/var/lib/rabbitmq/.erlang.cookie是否一致。

          • 如果不存在上述文件,echo $HOME ,打開(kāi)此文件夾,查看cookie文件是否一致。

          • 重啟電腦,防止緩存數(shù)據(jù)配置未更新過(guò)來(lái)。

          這里安裝啟動(dòng)成功之后,來(lái)幾個(gè)常用的操作。

          [root@G?bin]#?./rabbitmq-server?-deched??--后臺(tái)啟動(dòng)服務(wù)
          [root@G?bin]#?./rabbitmqctl?start_app??--啟動(dòng)服務(wù)
          [root@G?bin]#?./rabbitmqctl?stop_app??--關(guān)閉服務(wù)
          [root@G?bin]#?./rabbitmq-plugins?enable?rabbitmq_management?--啟動(dòng)web管理插件
          [root@G?bin]#?./rabbitmqctl?add_user?zlh?zlh??--添加用戶(hù),密碼
          [root@G?bin]#?./rabbitmqctl?set_user_tags?zlh?administrator?--設(shè)置zlh為administrator權(quán)限

          如果你看到如下操作,即表明啟動(dòng)成功啦,并且web管理頁(yè)面的插件也啟動(dòng)成功,如果下面的6為0,則需要啟動(dòng)web管理插件

          那具體rabbitmqctl 的命令詳細(xì)還要看官網(wǎng)文檔:http://www.rabbitmq.com/man/rabbitmqctl.1.man.html

          搭建rabbitmq的一般模式集群

          ?在上述的兩臺(tái)機(jī)器上安裝rabbitmq完成之后,你可以看到你的機(jī)器中有如下1個(gè)文件。路徑在$HOME中或者在/var/lib/rabbitmq中,文件名稱(chēng)為.erlang.cookie,他是一個(gè)隱藏文件。那么這文件存儲(chǔ)的內(nèi)容是什么,是做什么用的呢?

          這樣說(shuō)吧:RabbitMQ的集群是依賴(lài)erlang集群,而erlang集群是通過(guò)這個(gè)cookie進(jìn)行通信認(rèn)證的,因此我們做集群的第一步就是干cookie。怎么干?

          1、必須使集群中也就是F,G這兩臺(tái)機(jī)器的.erlang.cookie文件中cookie值一致,且權(quán)限為owner只讀。

          機(jī)器G中的Cookie:?機(jī)器F中的Cookie:

          修改文件權(quán)限如下:

          [root@F?~]#?chmod?600?.erlang.cookie

          2、查看集群狀態(tài),我的是已經(jīng)做好的。

          [root@F?bin]#?./rabbitmqctl?cluster_status
          Cluster?status?of?node?rabbit@F?...
          [{nodes,[{disc,[rabbit@G]},{ram,[rabbit@F]}]},
          ?{running_nodes,[rabbit@G,rabbit@F]},
          ?{cluster_name,<<"rabbit@F">>},
          ?{partitions,[]},
          ?{alarms,[{rabbit@G,[]},{rabbit@F,[]}]}]

          3、停止當(dāng)前機(jī)器中rabbitmq的服務(wù)

          [root@F?bin]#?./rabbitmqctl?stop_app

          4、把G中的rabbitmq加入到集群中來(lái)

          [root@F?bin]#?./rabbitmqctl?join_cluster?--ram?rabbit@G

          5、開(kāi)啟當(dāng)前機(jī)器的rabbitmq服務(wù)

          [root@F?bin]#?./rabbitmqctl?start_app

          6、打開(kāi)網(wǎng)頁(yè)管理頁(yè)面查看nodes

          如此便可以啦,你可以做下測(cè)試,驗(yàn)證下我們序言中說(shuō)的普通模式的說(shuō)明,那必須是杠杠對(duì)的。

          搭建rabbitmq的鏡像高可用模式集群

          寫(xiě)到這里,接下來(lái),有朋友要請(qǐng)我吃飯啦,我就速戰(zhàn)速?zèng)Q赴會(huì)去啦,即便如此該有的也會(huì)都有的。go,go,go。

          這一節(jié)要參考的文檔是:http://www.rabbitmq.com/ha.html

          首先鏡像模式要依賴(lài)policy模塊,這個(gè)模塊是做什么用的呢?

          policy中文來(lái)說(shuō)是政策,策略的意思,那么他就是要設(shè)置,那些Exchanges或者queue的數(shù)據(jù)需要復(fù)制,同步,如何復(fù)制同步?對(duì)就是做這些的。

          這里有點(diǎn)內(nèi)容的,我先上例子慢慢說(shuō):

          [root@G?~]#?./rabbitmqctl?set_policy?ha-all?"^"?'{"ha-mode":"all"}'

          參數(shù)意思為:

          ha-all:為策略名稱(chēng)。

          ^:為匹配符,只有一個(gè)^代表匹配所有,^zlh為匹配名稱(chēng)為zlh的exchanges或者queue。

          ha-mode:為匹配類(lèi)型,他分為3種模式:all-所有(所有的queue),exctly-部分(需配置ha-params參數(shù),此參數(shù)為int類(lèi)型比如3,眾多集群中的隨機(jī)3臺(tái)機(jī)器),nodes-指定(需配置ha-params參數(shù),此參數(shù)為數(shù)組類(lèi)型比如["3rabbit@F","rabbit@G"]這樣指定為F與G這2臺(tái)機(jī)器。)。

          參考示例如下

          當(dāng)然在web管理界面也能配置:

          配置完看隊(duì)列如下,其中表示ha-haall的說(shuō)明用我的ha-haall策略啦,屬于鏡像模式,沒(méi)有表示的就是普通模式:

          ?

          總結(jié)

          接下來(lái)是大家最喜歡的總結(jié)內(nèi)容啦,內(nèi)容有二,如下:

          1、希望能關(guān)注我其他的文章。

          2、博客里面有沒(méi)有很清楚的說(shuō)明白,或者你有更好的方式,那么歡迎加入左上方的2個(gè)交流群,我們一起學(xué)習(xí)探討。






          粉絲福利:Java從入門(mén)到入土學(xué)習(xí)路線圖

          ???

          ?長(zhǎng)按上方微信二維碼?2 秒


          感謝點(diǎn)贊支持下哈?

          瀏覽 19
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  玖玖伊人 | 亚洲人人操 | 中国人操逼视频 | 成人免费看片 无需下载 | 欧美毛片视频 |