天天看點

Docker安裝RabbitMQ叢集_親測成功

先安裝Docker

Centos7離線安裝Docker

華為雲arm架構安裝Docker

RabbitMQ叢集模式介紹

RabbitMQ叢集搭建和測試總結_親測

RabbitMQ 有三種模式:單機模式,普通叢集模式,鏡像叢集模式。單機模式即單獨運作一個 rabbitmq 執行個體,而叢集模式需要建立多個 rabbitmq執行個體

第一種 普通叢集模式:rabbitmq叢集與其他叢集有些不同,rabbitmq叢集同步指的是複制隊列,中繼資料資訊的同步,即同步的是資料存儲資訊;消息的存放隻會存儲在建立該消息隊列的那個節點上。并非在節點上都存儲一個完整的資料。在通過非資料所在節點擷取資料時,通過中繼資料資訊,路由轉發到存儲資料節點上,進而得到資料 。

第二種 鏡像叢集模式:與普通叢集模式差別 主要是消息實體會主動在鏡像節點間同步資料,而不是隻存儲資料元資訊。 故普通叢集模式 但凡資料節點挂了,容易造成資料丢失但鏡像叢集模式可以保證叢集隻要不全部挂掉,資料就不會丢失,當相對于性能來說,鏡像叢集模式會比普通叢集模式多出消耗資料的傳輸。故取決于業務場景進行取舍。

Docker搭建普通叢集模式

在一台機器上使用Docker搭建RabbitMQ叢集

#拉取鏡像
docker pull rabbitmq:3.8.2-management

#啟動三個容器
docker run -d --hostname rabbitmq01 --name rabbitmqCluster01 -p 15672:15672 -p 5672:5672 -p 1883:1883 -e RABBITMQ_ERLANG_COOKIE='rabbitmqCookie' rabbitmq:3.8.2-management

docker run -d --hostname rabbitmq02 --name rabbitmqCluster02 -p 15673:15672 -p 5673:5672 -p 1884:1883 -e RABBITMQ_ERLANG_COOKIE='rabbitmqCookie' --link rabbitmqCluster01:rabbitmq01 rabbitmq:3.8.2-management

docker run -d --hostname rabbitmq03 --name rabbitmqCluster03 -p 15674:15672 -p 5674:5672 -p 1885:1883 -e RABBITMQ_ERLANG_COOKIE='rabbitmqCookie' --link rabbitmqCluster01:rabbitmq01 --link rabbitmqCluster02:rabbitmq02  rabbitmq:3.8.2-management
           

主要參數:

-p 15672:15672 management 界面管理通路端口

-p 5672:5672 amqp 通路端口

-p 1883:1883 mqtt通路端口

也可以把容器裡的資料共享到主控端上

-v /home/soft/rabbitmqcluster/rabbitmq01:/var/lib/rabbitmq

–link 容器之間連接配接

Erlang Cookie 值必須相同,也就是一個叢集内 RABBITMQ_ERLANG_COOKIE 參數的值必須相同。因為 RabbitMQ 是用Erlang實作的,Erlang Cookie 相當于不同節點之間通訊的密鑰,Erlang節點通過交換 Erlang Cookie 獲得認證。

通路:檢視是否正常啟動成功

http://localhost:15672/

http://localhost:15673/

http://localhost:15674/

賬号/密碼:guest / guest

容器節點加入叢集

#進入第一個容器
docker exec -it rabbitmqCluster01 bash

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
exit
           
#進入第二個容器
docker exec -it rabbitmqCluster02 bash
rabbitmqctl stop_app
rabbitmqctl reset

#加入叢集
rabbitmqctl join_cluster --ram [email protected]
rabbitmqctl start_app
exit
           
#進入第三個容器
docker exec -it rabbitmqCluster03 bash
rabbitmqctl stop_app
rabbitmqctl reset

#加入叢集
rabbitmqctl join_cluster --ram [email protected]
rabbitmqctl start_app
exit
           

主要參數:

–ram 表示設定為記憶體節點,忽略此參數預設為磁盤節點。該配置啟動了3個節點,1個磁盤節點和2個記憶體節點。

設定好之後,使用任意容器,比如:http://localhost:15672/ 進行通路,預設賬号密碼:guest/guest

Docker安裝RabbitMQ叢集_親測成功

可以看到,已經有多個節點了。叢集搭建成功了

鏡像叢集模式

鏡像叢集模式是基于普通叢集模式上配置政策來實作

1、政策policy概念

使用RabbitMQ鏡像功能,需要基于RabbitMQ政策來實作,政策policy是用來控制和修改群集範圍的某個vhost隊列行為和Exchange行為。政策policy就是要設定哪些Exchange或者queue的資料需要複制、同步,以及如何複制同步。

為了使隊列成為鏡像隊列,需要建立一個政策來比對隊列,設定政策有兩個鍵“ha-mode和 ha-params(可選)”。ha-params根據ha-mode設定不同的值,下表說明這些key的選項。

Docker安裝RabbitMQ叢集_親測成功

2、添加政策

登入rabbitmq管理頁面 ——> Admin ——> Policies ——> Add / update a policy

Docker安裝RabbitMQ叢集_親測成功

name:随便取,政策名稱

Pattern:^ 比對符,隻有一個^代表比對所有

Definition:ha-mode=all 為比對類型,分為3種模式:all(表示所有的queue)

或者使用如下指令:在cluster中任意節點啟用政策,政策會自動同步到叢集節點

#進入容器
docker exec -it rabbitmqCluster01 bash

#建立政策
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

rabbitmqctl set_policy-p/ha-all"^"'{"ha-mode":"all"}'

rabbitmqctl set_policy-p/ha-all"^message"'{"ha-mode":"all"}'
“^message” 這個規則要根據自己修改,這個是指同步“message”開頭的隊列名稱,我們配置時使用的應用于所有隊列,是以表達式為“^”
           

3、檢視效果

此政策會同步所在同一VHost中的交換器和隊列資料。設定好policy之後,使用 http://localhost:15672 再次進行通路,可以看到隊列鏡像同步。

Docker安裝RabbitMQ叢集_親測成功

spring cloud stream rabbitmq 使用叢集方式

但每次連第一台,沒有負載均衡,要用nginx等負載均衡一下
如果停止第一台,會自動連接配接到第二台上去處理

addresses: 127.0.0.1:5672,127.0.0.1:5673,127.0.0.1:5674
username: admin
password: admin
virtual-host: /
           

參考連結:

https://www.cnblogs.com/alan6/p/11691229.html

https://blog.csdn.net/belonghuang157405/article/details/83540148