<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ì)介紹

          共 4022字,需瀏覽 9分鐘

           ·

          2019-12-16 23:22

          5b51067e18e1d81205f98d2538f7916e.webp

          11a09336c9eb03e926e03f36d528d908.webp

          鏈接:cnblogs.com/knowledgesea/p/6535766.html

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

          回到正題,為什么搭建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)模式,以兩個(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)間同步,而不是在客戶端取數(shù)據(jù)時(shí)臨時(shí)拉取。該模式帶來(lái)的副作用也很明顯,除了降低系統(tǒng)性能外,如果鏡像隊(duì)列數(shù)量過(guò)多,加之大量的消息進(jìn)入,集群內(nèi)部的網(wǎng)絡(luò)帶寬將會(huì)被這種同步通訊大大消耗掉。所以在對(duì)可靠性要求較高的場(chǎng)合中適用。


          我的環(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通,如下圖:

          8ef6a88f024b2e8ce80943e71e3af0cb.webp

          好啦,環(huán)境到此就就能滿足啦,接下來(lái)我們把rabbitmq裝在2臺(tái)機(jī)器上。學(xué)習(xí)不看官方文檔,那就別學(xué)啦,地址如下:http://www.rabbitmq.com/install-rpm.html安裝rabbitmq依賴erlang環(huán)境,所以我們要先安裝erlang環(huán)境。

          dcd076f88a141f26700c7b9beacdd817.webp

          安裝完成之后,下載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 ,打開此文件夾,查看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 --添加用戶,密碼
          [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管理插件

          c90daa3ad8836a45c11ff61b1b2c916a.webp

          那具體rabbitmqctl 的命令詳細(xì)還要看官網(wǎng)文檔:http://www.rabbitmq.com/man/rabbitmqctl.1.man.html?在上述的兩臺(tái)機(jī)器上安裝rabbitmq完成之后,你可以看到你的機(jī)器中有如下1個(gè)文件。路徑在$HOME中或者在/var/lib/rabbitmq中,文件名稱為.erlang.cookie,他是一個(gè)隱藏文件。那么這文件存儲(chǔ)的內(nèi)容是什么,是做什么用的呢?這樣說(shuō)吧:RabbitMQ的集群是依賴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:

          c8606bbb38abd0837033d34c1919c88d.webp

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

          b9a9b86eb8936eec889a3190a84618ca.webp

          修改文件權(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、開啟當(dāng)前機(jī)器的rabbitmq服務(wù)
          [root@F bin]# ./rabbitmqctl start_app
          6、打開網(wǎng)頁(yè)管理頁(yè)面查看nodes

          bd951319caa3becb1b974738ac73fe75.webp

          如此便可以啦,你可以做下測(cè)試,驗(yàn)證下我們序言中說(shuō)的普通模式的說(shuō)明,那必須是杠杠對(duì)的。寫到這里,接下來(lái),有朋友要請(qǐng)我吃飯啦,我就速戰(zhàn)速?zèng)Q赴會(huì)去啦,即便如此該有的也會(huì)都有的。go,go,go。這一節(jié)要參考的文檔是:http://www.rabbitmq.com/ha.html首先鏡像模式要依賴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:為策略名稱。^:為匹配符,只有一個(gè)^代表匹配所有,^zlh為匹配名稱為zlh的exchanges或者queue。ha-mode:為匹配類型,他分為3種模式:all-所有(所有的queue),exctly-部分(需配置ha-params參數(shù),此參數(shù)為int類型比如3,眾多集群中的隨機(jī)3臺(tái)機(jī)器),nodes-指定(需配置ha-params參數(shù),此參數(shù)為數(shù)組類型比如["3rabbit@F","rabbit@G"]這樣指定為F與G這2臺(tái)機(jī)器。)。參考示例如下

          354dc4446616409845dce245f380b531.webp

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

          558097eb675da547082ca75efa2f3cb7.webp

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

          c7fad95a88f5454020a0f83d65e3691f.webp



          - End -

          36e830c456558ae1581e23f42dbc1351.webp

          術(shù)點(diǎn)轉(zhuǎn)


          面試題系列教程??點(diǎn)擊-->?面試題技術(shù)干貨連載目錄?跳轉(zhuǎn)


          Maven系列教程??點(diǎn)擊-->?Maven技術(shù)干貨連載目錄?跳轉(zhuǎn)


          MyBatis系列教程??點(diǎn)擊-->?MyBatis技術(shù)干貨連載目錄?跳轉(zhuǎn)


          JVM調(diào)優(yōu)總結(jié)系列教程??點(diǎn)擊-->?JVM調(diào)優(yōu)技術(shù)干貨連載目錄?跳轉(zhuǎn)





          點(diǎn),?ae15046a07d5ca9fb95a0bb85641398d.webp

          瀏覽 41
          點(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>
                  熟女阿av一区二区三区 | 黄片视频网站免费观看 | 国产 最新 视频 | 一级A片在线免费 | 色婷婷综合视频 |