大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 RabbitMQ集群搭建

RabbitMQ集群搭建

更新時(shí)間:2021-12-14 10:16:23 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1263次

1.前提

erlang安裝版本一致

RabbitMQ安裝版本一致

以下示例使用 192.168.73.134 和 192.168.73.135 構(gòu)建 Rabbitmq 集群

2.RabbitMQ集群

RabbitMQ 是用 erlang 開發(fā)的。Cluster 非常方便,因?yàn)?erlang 本質(zhì)上是一種分布式語言,但它不支持負(fù)載均衡。在第一次模擬考試中,Rabbit模式可以分為三種:單模、共模和鏡像模式。

第一次模擬考試:最簡單的情況,非集群模式。

普通模式:默認(rèn)集群模式。

  about Queue Message實(shí)體只存在于一個(gè)節(jié)點(diǎn),A,B這兩個(gè)節(jié)點(diǎn)只有相同的元數(shù)據(jù),即隊(duì)列結(jié)構(gòu)。  
  當(dāng)消息進(jìn)入A節(jié)點(diǎn)的Queue中后,consumer從B節(jié)點(diǎn)被拉取時(shí),RabbitMQ會(huì)臨時(shí)在A、B之間傳遞消息,B中的消息實(shí)體發(fā)送給consumer。 
  因此消費(fèi)者嘗試連接每個(gè)節(jié)點(diǎn)并從中獲取消息。也就是說,對于同一個(gè)邏輯隊(duì)列,需要在多個(gè)節(jié)點(diǎn)建立物理隊(duì)列。否則不管是A還是B的消費(fèi)者,出口總是在A,會(huì)有瓶頸。  
  這個(gè)模型有問題 A 節(jié)點(diǎn)故障后, B 節(jié)點(diǎn)無法檢索到 A 節(jié)點(diǎn)中尚未消費(fèi)的消息實(shí)體。 
  如果消息持久化完成,則等待A節(jié)點(diǎn)恢復(fù)后才能被消費(fèi);如果沒有持久化,那么將不會(huì)有更多的節(jié)點(diǎn)

鏡像模式:將需要的隊(duì)列做成鏡像隊(duì)列,存在于多個(gè)節(jié)點(diǎn)中。屬于RabbitMQ的HA方案。

  該模式解決了上述問題。其本質(zhì)與普通模式的區(qū)別在于消息實(shí)體會(huì)主動(dòng)在鏡像節(jié)點(diǎn)之間同步,而不是在鏡像節(jié)點(diǎn)消費(fèi)者取數(shù)據(jù)時(shí)臨時(shí)拉取數(shù)據(jù)。  
  這種模式的副作用也很明顯。除了降低系統(tǒng)性能外,如果圖像隊(duì)列數(shù)量過多,大量消息進(jìn)入,集群內(nèi)的網(wǎng)絡(luò)帶寬也會(huì)被這種同步通信大量消耗。
  因此適用于對可靠性要求較高的場合(后面會(huì)詳細(xì)介紹這種模式,我們目前搭建的環(huán)境就屬于這種模式)。

(1)集群中的基本概念

RabbitMQ 的集群節(jié)點(diǎn)包括內(nèi)存節(jié)點(diǎn)和磁盤節(jié)點(diǎn)。

顧名思義,內(nèi)存節(jié)點(diǎn)將所有數(shù)據(jù)放在內(nèi)存中,而磁盤節(jié)點(diǎn)將數(shù)據(jù)放在磁盤上。但是,如上所述,如果在傳遞消息時(shí)開啟消息持久化,即使是內(nèi)存節(jié)點(diǎn),數(shù)據(jù)仍然安全地放置在磁盤上。

RabbitMQ 集群可以共享用戶、虛擬主機(jī)、隊(duì)列、交換器等。必須在所有節(jié)點(diǎn)上復(fù)制所有數(shù)據(jù)和狀態(tài)。例外是當(dāng)前屬于創(chuàng)建它的節(jié)點(diǎn)的消息隊(duì)列,盡管它們是可見的并且可以被所有節(jié)點(diǎn)讀取。RabbitMQ 節(jié)點(diǎn)可以動(dòng)態(tài)加入集群。一個(gè)節(jié)點(diǎn)可以加入集群,也可以從集群環(huán)集群進(jìn)行基本的負(fù)載均衡。

集群中有兩種類型的節(jié)點(diǎn):

內(nèi)存節(jié)點(diǎn):只將狀態(tài)保存到內(nèi)存(例外:持久隊(duì)列的持久內(nèi)容會(huì)保存到磁盤)

磁盤節(jié)點(diǎn):將狀態(tài)保存到內(nèi)存和磁盤。

內(nèi)存節(jié)點(diǎn)不寫入磁盤,但性能優(yōu)于磁盤節(jié)點(diǎn)。在一個(gè)集群中,只需要一個(gè)磁盤節(jié)點(diǎn)來保存狀態(tài),

如果集群中只有內(nèi)存節(jié)點(diǎn),則不能停止,否則所有的狀態(tài)、消息等都會(huì)丟失。

思路:

為了實(shí)現(xiàn)RabbitMQ的高可用,我們先搭建普通集群模式,再配置鏡像模式,實(shí)現(xiàn)高可用。在Rabbit集群前面增加了一個(gè)反向代理,生產(chǎn)者和消費(fèi)者通過反向代理訪問RabbitMQ集群。

架構(gòu)如下:

(2)集群模式配置

step1:局域網(wǎng)配置

在安裝好的三個(gè)節(jié)點(diǎn)服務(wù)器中,分別修改/etc/hosts文件
1. vim /etc/hosts
192.168.73.134 節(jié)點(diǎn) 1
192.168.73.135 節(jié)點(diǎn) 2

step2:為不同節(jié)點(diǎn)之間的相同認(rèn)證設(shè)置Erlang Cookie

Erlang 集群中每個(gè)節(jié)點(diǎn)的魔法 cookie 來實(shí)現(xiàn),這個(gè) cookie 存儲(chǔ)在 /var/lib/rabbitmq/.erlang.cookie 中,該文件的權(quán)限為 400。
因此,必須保證每個(gè)節(jié)點(diǎn)的 cookie 一致,否則節(jié)點(diǎn)之間將無法通信。
從主節(jié)點(diǎn)采用 copy 的方式來保持 Cookie 的一致性:
1. chmod 777 /var/lib/rabbitmq/.erlang.cookie
2. scp -p 22 /var/lib/rabbitmq/.erlang.cookie root@192.168.73.135:/var/lib/rabbitmq/
復(fù)制后,檢查文件的用戶、組和權(quán)限是否符合要求。如果沒有,請修改它。在.erlang.cookie之后恢復(fù),否則可能會(huì)遇到錯(cuò)誤:
3. chown rabbitmq:rabbitmq .erlang.cookie
4. chmod 400 /var/lib/rabbitmq/.erlang.cookie

step3:使用-分離運(yùn)行每個(gè)節(jié)點(diǎn)

在RabbitMQ重啟后設(shè)置cookie:
1. cd /sbin
2.rabbitmqctl停止
3. rabbitmq-server 啟動(dòng)
這里正常重啟可能會(huì)提示節(jié)點(diǎn)實(shí)例再次運(yùn)行。如果出現(xiàn),使用以下命令啟動(dòng):
1. ps -aux | 格雷厄爾
2. kill -9 {pid}
3. RABBITMQ_NODE_PORT=5678 RABBITMQ_NODENAME=rabbit@node1 ./rabbitmq-server -detached
    RABBITMQ_NODE_PORT=5678 RABBITMQ_NODENAME=rabbit@node2 ./rabbitmq-server -detached
ps:上面的5678是因?yàn)閞abbitmq端口改成了5678,而且nodename和hosts的設(shè)置是一致的。
    依次啟動(dòng)所有節(jié)點(diǎn)。

step4:查看各個(gè)節(jié)點(diǎn)的狀態(tài)

1.查看啟動(dòng)端口:netstat -lntp 
    活動(dòng) Internet 連接(僅限服務(wù)器)
    Proto Recv-Q Send-Q 本地地址 外地址 狀態(tài) PID/程序名稱    
    tcp 0 0 0.0.0.0:4369 0.0.0.0:* 聽 27321/epmd          
    tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 760/sshd            
    tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1066/master         
    tcp 0 0 0.0.0.0:15678 0.0.0.0:* 聽 27862/beam.smp      
    tcp 0 0 0.0.0.0:25672 0.0.0.0:* 聽 27862/beam.smp      
    tcp6 0 0 :::5678 :::* 聽 27862/beam.smp      
    tcp6 0 0 :::8080 :::* 聽 964/java            
    tcp6 0 0 :::4369 :::* 聽 27321/epmd          
    tcp6 0 0 :::22 :::* LISTEN 760/sshd            
    tcp6 0 0 ::1:25 :::* LISTEN 1066/master         
    tcp6 0 0 127.0.0.1:8005 :::* 聽 964/java            
    tcp6 0 0 :::8009 :::* 聽 964/java
2.查看rabbitmq啟動(dòng)狀態(tài):  
    rabbitmqctl -n rabbit1@node1 狀態(tài)
    rabbitmqctl -n rabbit1@node2 狀態(tài)  
3.訪問http://bbitraq后臺(tái)打開后,可以查看網(wǎng)頁是否可以訪問

step5:創(chuàng)建和部署集群

以rabbit@rabbitmq2和rabbit@rabbitmq1組成集群,rabbitmq2作為內(nèi)存節(jié)點(diǎn)(一個(gè)硬盤節(jié)點(diǎn)就夠了);
兔子MQ2:
    1.停止節(jié)點(diǎn)2的應(yīng)用:rabbitmqctl -n rabbit@node2 stop_app
            在節(jié)點(diǎn) rabbit@rabbitmq2 上停止兔子應(yīng)用程序
    2.添加節(jié)點(diǎn)1作為內(nèi)存節(jié)點(diǎn)rabbitmqctl -n rabbit@node2 join_cluster --ram rabbit@node1
            集群節(jié)點(diǎn) rabbit@node2 與 rabbit@node1
    3、啟動(dòng)節(jié)點(diǎn)2的應(yīng)用:rabbitmqctl -n rabbit@node2 start_app
            起始節(jié)點(diǎn)rabbit@node2

step6:查看集群狀態(tài)

1.查看節(jié)點(diǎn)1的集群狀態(tài):rabbitmqctl -n rabbit@node1 cluster_status
        節(jié)點(diǎn)rabbit@node1的集群狀態(tài)
        [{nodes,[{disc,[rabbit@node1]},{ram,[rabbit@node2]}]},
         {running_nodes,[rabbit@node1]},
         {cluster_name,<<"rabbit@node1">>},
         {分區(qū),[]},
         {警報(bào),[{rabbit@node1,[]}]}] 
2.查看節(jié)點(diǎn)2的集群狀態(tài):rabbitmqctl -n rabbit@node2 cluster_status
        節(jié)點(diǎn)rabbit@node2的集群狀態(tài)
        [{nodes,[{disc,[rabbit@node1]},{ram,[rabbit@node2]}]},
         {警報(bào),[{rabbit@node1,[]}]}]
3.后臺(tái)查看集群狀態(tài):

至此,rabbitmq 集群搭建完畢。

3.RabbitMQ鏡像模式

上面配置了RabbitMQ默認(rèn)的集群模式,但是不保證隊(duì)列的高可用。雖然可以將切換和綁定復(fù)制到集群中的任何節(jié)點(diǎn),但不會(huì)復(fù)制隊(duì)列內(nèi)容。這種模式雖然解決了一些節(jié)點(diǎn)壓力,但是隊(duì)列節(jié)點(diǎn)宕機(jī)直接導(dǎo)致隊(duì)列無法使用,只能等待重啟。因此,需要關(guān)閉隊(duì)列節(jié)點(diǎn),否則故障也可以正常使用。要將隊(duì)列的內(nèi)容復(fù)制到集群中的每個(gè)節(jié)點(diǎn),需要?jiǎng)?chuàng)建一個(gè)圖像隊(duì)列。

第一步:添加負(fù)載均衡器

在負(fù)載均衡器方面,F(xiàn)5的BIG-IP、Radware的AppDirector等商用產(chǎn)品都是硬件架構(gòu)的產(chǎn)品,可以實(shí)現(xiàn)高處理能力。但是這些產(chǎn)品的高價(jià)會(huì)讓人望而卻步,所以我們也有軟件負(fù)載均衡解決方案。互聯(lián)網(wǎng)公司常用的軟件LB有LVS、HAProxy、Nginx等,LVS是內(nèi)核層產(chǎn)品,主要負(fù)責(zé)第四層的數(shù)據(jù)包轉(zhuǎn)發(fā),使用比較復(fù)雜。HAProxy 和 Nginx 是應(yīng)用層產(chǎn)品,但 Nginx 主要用于處理 HTTP,因此選擇 HAProxy 作為 RabbitMQ 前端的 lb。

1.安裝HAProxy(在192.168.73.136安裝在HAProxy上)
    yum -y 安裝haproxy
2.修改haproxy.config進(jìn)行配置
    vim /etc/haproxy/haproxy.config
    添加以下配置:
    聽rabbitmq_cluster 0.0.0.0:5678
        模式tcp
        平衡循環(huán)
        服務(wù)器rabbitmaster 192.168.73.134:5678 檢查inter 2000 上升2 下降3
        服務(wù)器rabbitslave 192.168.73.135:5678 檢查inter 2000 上升2 下降3

修改HaProxy配置后,重啟可能會(huì)提示端口綁定失敗。在這種情況下,請執(zhí)行以下命令:

 setebool -P haproxy_connect_any=1

負(fù)載均衡器將監(jiān)聽 192.168.73.136 的 5678 端口,并輪詢我們 192.168.73.134 和 192.168.73.135 的 5678 端口這兩個(gè)節(jié)點(diǎn)。這樣磁盤節(jié)點(diǎn)不會(huì)同時(shí)受到影響,除了故障。

第二步:配置Rabbitmq策略

在任意節(jié)點(diǎn)上執(zhí)行:

    rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
    上面的命令會(huì)將所有隊(duì)列設(shè)置為鏡像隊(duì)列,即隊(duì)列會(huì)被復(fù)制到每個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)的狀態(tài)會(huì)保持一致

第三步:使用負(fù)載服務(wù)器發(fā)送消息

客戶端使用負(fù)載服務(wù)器172.16.3.110(panyuntao3)發(fā)送消息,隊(duì)列復(fù)制到所有節(jié)點(diǎn)。到這里我們就完成了RabbitMQ集群的高可用配置。

通過上述相信大家對RabbitMQ集群搭建已經(jīng)有所了解,如果您想了解更多相關(guān)知識(shí),可以關(guān)注一下動(dòng)力節(jié)點(diǎn)的RabbitMQ教程,里面的內(nèi)容細(xì)致全面,由淺到深,適合小白學(xué)習(xí),希望對大家的學(xué)習(xí)能夠有所幫助。

提交申請后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 欧美成人免费在线观看 | 亚洲精品久久久久福利网站 | 4hu最新网址 | 深夜福利国产福利视频 | 亚洲成人网页 | 久久99精品国产99久久6男男 | 成年人视频在线免费 | 亚洲 激情| 国产伦久视频免费观看视频 | 男人免费网站 | 三级大黄 | 97se亚洲综合 | 久操久热 | 奇米777色| 综合国产在线 | 天天干夜夜骑 | 亚洲精品乱码久久久久久麻豆 | 天天骑天天射 | 精品亚洲永久免费精品 | 国产乱码精品一区二区三区卡 | 在线a网| 久久91精品国产一区二区 | 深夜成人 | 久久精品国产74国产 | 天堂日韩 | 免费一区二区三区免费视频 | 第一福利在线视频 | 亚洲精品美女久久久久 | 国产性videostv另类极品 | 色婷婷精品大全在线视频 | 青青久久久国产线免观 | 中文字幕二区 | 国产精品极品 | 欧美日韩国产成人综合在线影院 | 日本一级一片免在线观看 | 国产国拍亚洲精品福利 | 四虎影院久久久 | 日韩视频不卡 | 亚洲精品久久久久久久久久ty | 黑人欧美一级毛片 | 福利一区在线观看 |