亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

RabbitMQ集群如何搭建

發布時間:2022-09-27 16:30:41 來源:億速云 閱讀:181 作者:iii 欄目:開發技術

這篇文章主要講解了“RabbitMQ集群如何搭建”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“RabbitMQ集群如何搭建”吧!

1.前提

erlang安裝版本一致

RabbitMQ安裝版本一致

以下示例使用 192.168.73.134 和 192.168.73.135 構建 Rabbitmq 集群

2.RabbitMQ集群

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

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

普通模式:默認集群模式。

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

鏡像模式:將需要的隊列做成鏡像隊列,存在于多個節點中。屬于RabbitMQ的HA方案。

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

(1)集群中的基本概念

RabbitMQ 的集群節點包括內存節點和磁盤節點。

顧名思義,內存節點將所有數據放在內存中,而磁盤節點將數據放在磁盤上。但是,如上所述,如果在傳遞消息時開啟消息持久化,即使是內存節點,數據仍然安全地放置在磁盤上。

RabbitMQ 集群可以共享用戶、虛擬主機、隊列、交換器等。必須在所有節點上復制所有數據和狀態。例外是當前屬于創建它的節點的消息隊列,盡管它們是可見的并且可以被所有節點讀取。RabbitMQ 節點可以動態加入集群。一個節點可以加入集群,也可以從集群環集群進行基本的負載均衡。

集群中有兩種類型的節點:

內存節點:只將狀態保存到內存(例外:持久隊列的持久內容會保存到磁盤)

磁盤節點:將狀態保存到內存和磁盤。

內存節點不寫入磁盤,但性能優于磁盤節點。在一個集群中,只需要一個磁盤節點來保存狀態,

如果集群中只有內存節點,則不能停止,否則所有的狀態、消息等都會丟失。

思路:

為了實現RabbitMQ的高可用,我們先搭建普通集群模式,再配置鏡像模式,實現高可用。在Rabbit集群前面增加了一個反向代理,生產者和消費者通過反向代理訪問RabbitMQ集群。

架構如下:

RabbitMQ集群如何搭建

(2)集群模式配置

step1:局域網配置

在安裝好的三個節點服務器中,分別修改/etc/hosts文件1. vim /etc/hosts
192.168.73.134 節點 1
192.168.73.135 節點 2

step2:為不同節點之間的相同認證設置Erlang Cookie

Erlang 集群中每個節點的魔法 cookie 來實現,這個 cookie 存儲在 /var/lib/rabbitmq/.erlang.cookie 中,該文件的權限為 400。
因此,必須保證每個節點的 cookie 一致,否則節點之間將無法通信。
從主節點采用 copy 的方式來保持 Cookie 的一致性:1. chmod 777 /var/lib/rabbitmq/.erlang.cookie2. scp -p 22 /var/lib/rabbitmq/.erlang.cookie root@192.168.73.135:/var/lib/rabbitmq/復制后,檢查文件的用戶、組和權限是否符合要求。如果沒有,請修改它。在.erlang.cookie之后恢復,否則可能會遇到錯誤:3. chown rabbitmq:rabbitmq .erlang.cookie4. chmod 400 /var/lib/rabbitmq/.erlang.cookie

step3:使用-分離運行每個節點

在RabbitMQ重啟后設置cookie:1. cd /sbin
2.rabbitmqctl停止3. rabbitmq-server 啟動
這里正常重啟可能會提示節點實例再次運行。如果出現,使用以下命令啟動: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 -detachedps:上面的5678是因為rabbitmq端口改成了5678,而且nodename和hosts的設置是一致的。    依次啟動所有節點。

step4:查看各個節點的狀態

1.查看啟動端口:netstat -lntp 
    活動 Internet 連接(僅限服務器)
    Proto Recv-Q Send-Q 本地地址 外地址 狀態 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/java2.查看rabbitmq啟動狀態:  
    rabbitmqctl -n rabbit1@node1 狀態
    rabbitmqctl -n rabbit1@node2 狀態  
3.訪問http://bbitraq后臺打開后,可以查看網頁是否可以訪問

step5:創建和部署集群

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

step6:查看集群狀態

1.查看節點1的集群狀態:rabbitmqctl -n rabbit@node1 cluster_status
        節點rabbit@node1的集群狀態
        [{nodes,[{disc,[rabbit@node1]},{ram,[rabbit@node2]}]},
         {running_nodes,[rabbit@node1]},
         {cluster_name,<<"rabbit@node1">>},
         {分區,[]},
         {警報,[{rabbit@node1,[]}]}] 
2.查看節點2的集群狀態:rabbitmqctl -n rabbit@node2 cluster_status
        節點rabbit@node2的集群狀態
        [{nodes,[{disc,[rabbit@node1]},{ram,[rabbit@node2]}]},
         {警報,[{rabbit@node1,[]}]}]3.后臺查看集群狀態:

RabbitMQ集群如何搭建

至此,rabbitmq 集群搭建完畢。

3.RabbitMQ鏡像模式

上面配置了RabbitMQ默認的集群模式,但是不保證隊列的高可用。雖然可以將切換和綁定復制到集群中的任何節點,但不會復制隊列內容。這種模式雖然解決了一些節點壓力,但是隊列節點宕機直接導致隊列無法使用,只能等待重啟。因此,需要關閉隊列節點,否則故障也可以正常使用。要將隊列的內容復制到集群中的每個節點,需要創建一個圖像隊列。

第一步:添加負載均衡器

在負載均衡器方面,F5的BIG-IP、Radware的AppDirector等商用產品都是硬件架構的產品,可以實現高處理能力。但是這些產品的高價會讓人望而卻步,所以我們也有軟件負載均衡解決方案。互聯網公司常用的軟件LB有LVS、HAProxy、Nginx等,LVS是內核層產品,主要負責第四層的數據包轉發,使用比較復雜。HAProxy 和 Nginx 是應用層產品,但 Nginx 主要用于處理 HTTP,因此選擇 HAProxy 作為 RabbitMQ 前端的 lb。

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

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

 setebool -P haproxy_connect_any=1

負載均衡器將監聽 192.168.73.136 的 5678 端口,并輪詢我們 192.168.73.134 和 192.168.73.135 的 5678 端口這兩個節點。這樣磁盤節點不會同時受到影響,除了故障。

第二步:配置Rabbitmq策略

在任意節點上執行:

    rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
    上面的命令會將所有隊列設置為鏡像隊列,即隊列會被復制到每個節點,每個節點的狀態會保持一致

第三步:使用負載服務器發送消息

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

感謝各位的閱讀,以上就是“RabbitMQ集群如何搭建”的內容了,經過本文的學習后,相信大家對RabbitMQ集群如何搭建這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宁波市| 龙井市| 张北县| 潍坊市| 民县| 高阳县| 南木林县| 南丹县| 津市市| 伊金霍洛旗| 呈贡县| 甘孜| 宁波市| 屯昌县| 南皮县| 双桥区| 永年县| 无为县| 增城市| 阳东县| 威信县| 松潘县| 苍溪县| 浦北县| 含山县| 嘉峪关市| 建水县| 博白县| 新建县| 左云县| 改则县| 兴山县| 和林格尔县| 育儿| 凤阳县| 大名县| 团风县| 若羌县| 黎川县| 麦盖提县| 衢州市|