RabbitMQ的高可用集群部署

2022-06-25 23:03:21 字數 3590 閱讀 6002

標籤(空格分隔): 訊息佇列 部署

單機情況下不做集群, 僅僅執行乙個rabbitmq.

# docker-compose.yml

version: '3.1'

services:

rabbitmq:

restart: always

image: rabbitmq:management

container_name: rabbitmq

ports:

- 5672:5672

- 15672:15672

environment:

tz: asia/shanghai

rabbitmq_default_user: admin

rabbitmq_default_pass: 123456

volumes:

- ./data:/var/lib/rabbitmq

預設模式,以兩個節點(rabbits01,rabbits02)為例來說明. 對於queue來說,訊息實體只存在於其中乙個節點rabbit01(或者rabbit02),rabbit01rabbit02兩個節點僅有相同的元資料,即佇列的結構. 當訊息進入rabbit01節點的queue後,consumerrabbit02消費的時候,rabbitmq會臨時在rabbit01,rabbit02之間進行訊息傳輸, 把a中的訊息實體取出並經過b傳送給consumer. 所以consumer應該盡量鏈結每乙個節點, 從中取出訊息. 即對於同乙個邏輯佇列, 要在多個節點建立物理queue. 否則無論consumer鏈結rabbit01還是rabbit02,出口總在rabbit01這樣就會產生瓶頸, 當rabbit01節點故障之後 ,rabbit02無法取到rabbit01節點中還未消費的訊息實體. 如果做了訊息持久化, 那麼得等rabbit01節點恢復才可以被消費, 如果沒有持久化的話 就會出現訊息丟失的情況.

version: '3.1'

services:

myrabbit01:

restart: always

image: rabbitmq:management

container_name: myrabbit01

ports:

- 5672:5672

- 15672:15672

environment:

tz: asia/shanghai

rabbitmq_default_user: admin

rabbitmq_default_pass: 123456

rabbitmq_erlang_cookie: rabbitcookie

volumes:

- ./data:/var/lib/rabbitmq

hostname:

rabbit01

network_mode: bridge

version: '3.1'

services:

myrabbit02:

restart: always

image: rabbitmq:management

container_name: myrabbit02

ports:

- 5673:5672

- 15673:15672

environment:

tz: asia/shanghai

rabbitmq_default_user: admin

rabbitmq_default_pass: 123456

rabbitmq_erlang_cookie: rabbitcookie

volumes:

- ./data:/var/lib/rabbitmq

extra_hosts:

- rabbit01 myrabbit01:172.17.0.2

hostname:

rabbit02

network_mode: bridge

# 新增 集群

docker exec -it myrabbit02 bash

rabbitmqctl reset

rabbitmqctl join_cluster --ram rabbit@rabbit01

exit

spring:

name: spring-boot-amqp

rabbitmq:

username: admin

password: 123456

addresses: 192.168.219.151:5673,192.168.219.151:5672

把需要的佇列做成映象佇列, 這樣不管連線那個節點, 都可以順利的訪問資料, 解決了普通模式的問題.

缺點也很明顯, 這樣在不同的節點內複製資料會明顯的降低系統效能, 集群內的網路頻寬會被大大的消耗掉.

映象模式首先要依賴policy模組, 這個模組是怎麼用的呢?

rabbitmqctl set_policy ha-all "^" ''
引數意思:ha-all-為策略名稱.^,^zlh為匹配名稱為zlhexchange或者queue.

ha-mode: 為匹配型別, 他分為三種模式:all-所有(所有的queue),exctly-部分(需配置ha-params引數,此引數為int型別比如3,眾多集群中的隨機3臺機器),nodes-指定(需配置ha-params引數,此引數為陣列型別比如["3rabbit@f","rabbit@g"]這樣指定為fg2臺機器。)。

現在的各種雲還是比較穩定的, 使用普通模式其實就已經夠用了.

RabbitMQ搭建高可用集群

修改主機名 首先修改 etc hostname檔案,設定主機名,然後修改hosts檔案,新增所有要進入集群的主機的主機名和ip位址的對映 root mq1 cat etc hosts 127.0.0.1 localhost 192.168.60.196 qh1 192.168.60.197 qh2 ...

RabbitMQ高可用集群介紹

主備模式 用來實現rabbitmq的高可用集群,一般是在併發和資料不是特別多的時候使用,當主節點掛掉以後會從備份節點中選擇乙個節點出來作為主節點對外提供服務。遠端模式 主要用來實現雙活,簡稱為shovel模式,所謂的shovel模式就是讓我們可以把訊息複製到不同的資料中心,讓兩個跨地域的集群互聯。映...

RabbitMQ 集群與高可用配置

此文 未實驗過 通過 erlang 的分布式特性 通過 magic cookie 認證節點 進行 rabbitmq 集群,各 rabbitmq 服務為對等節點,即每個節點都提供服務給客戶端連線,進行訊息傳送與接收。這些節點通過 rabbitmq ha 佇列 映象佇列 進行訊息佇列結構複製。本方案中搭...