RabbitMQ集群 Docker一鍵部署


以下內容來自網絡轉載

步驟1. 安裝docker

以centos7為例,https://docs.docker.com/engine/installation/linux/centos/

步驟2. 創建節點互聯基礎

#創建Docker私有網絡
docker network create rabbitmqnet

步驟3. 創建節點

#使用Docker Networking,分別創建三個節點
docker run -d \
--name=rabbitmq1 \
-p 5672:5672 \
-p 15672:15672 \
-e RABBITMQ_NODENAME=rabbitmq1 \
-e RABBITMQ_ERLANG_COOKIE='YZSDHWMFSMKEMBDHSGGZ' \
-h rabbitmq1 \
--net=rabbitmqnet \
rabbitmq:3.5-management
docker run -d \ 
--name=rabbitmq2 \ 
-p 5673:5672 \ 
-p 15673:15672 \ 
-e RABBITMQ_NODENAME=rabbitmq2 \ 
-e RABBITMQ_ERLANG_COOKIE='YZSDHWMFSMKEMBDHSGGZ' \ 
-h rabbitmq2 \ 
--net=rabbitmqnet \ 
rabbitmq:3.5-management

 

docker run -d \ 
--name=rabbitmq3 \ 
-p 5674:5672 \ 
-p 15674:15672 \ 
-e RABBITMQ_NODENAME=rabbitmq3 \ 
-e RABBITMQ_ERLANG_COOKIE='YZSDHWMFSMKEMBDHSGGZ' \ 
-h rabbitmq3 \ 
--net=rabbitmqnet \ 
rabbitmq:3.5-management

步驟4. 加入集群

#磁盤節點
docker exec rabbitmq2 bash -c \
"rabbitmqctl stop_app && \
rabbitmqctl reset && \
rabbitmqctl join_cluster rabbitmq1@rabbitmq1 && \
rabbitmqctl start_app"
#內存節點
docker exec rabbitmq3 bash -c \
"rabbitmqctl stop_app && \
rabbitmqctl reset && \
rabbitmqctl join_cluster --ram rabbitmq1@rabbitmq1 && \
rabbitmqctl start_app"

步驟5. 設置鏡像隊列

設置所有隊列為鏡像隊列,除了amq開頭的交換器綁定隊列。  生成環境不建議這種處理, 應該設置部分隊列為鏡像隊列
docker exec rabbitmq1 rabbitmqctl set_policy HA '^(?!amq\.).*' '{"ha-mode": "all"}'

步驟6. 退出集群

docker exec rabbitmq3 bash -c \
"rabbitmqctl stop_app && \
rabbitmqctl reset && \
rabbitmqctl start_app"

集群重啟

集群節點的關閉順序與節點的啟動順序相反,即最后關閉的最先啟動,並且最后關閉的節點必須是磁盤節點。請務必遵守按此步驟處理,否則可能造成集群無法啟動,造成元數據,消息丟失的情況。
Docker容器不同於虛擬機或主機,容器內部署的應用無法啟動,基本上這個容器就廢了。Docker現在不允許做一些已創建容器的啟動參數調整。

集群部署、運行准則

1.  保證集群中至少有一個在線,那怕這個節點是內存節點.
2.  如果關閉整個集群節點,必須按照順序逐個關閉,並且最后一個關閉節點務必為磁盤節點。在啟動時倒着順序啟動。(如關閉順序r1,r2,r3.那么啟動順序為r3,r2,r1).
3.  集群中如果使用了虛擬技術(Docker,VM),虛擬節點不能全在同一台物理機中。(你不能保證物理機不會宕機,如果宕機基本上集群是啟動不了的.你不知道關閉順序,你就無法確定啟動順序,並且宕機關閉時間可能RabbitMQ節點都沒有反應過來,無法做一些集群狀態處理。) 

參考資料

  1. RabbitMQ Doc - Clustering Guide
  2. RabbitMQ Doc - Highly Available Queues
  3. RabbitMQ 實戰 - 第五章 集群並處理失敗


持續更新地址:http://www.thinkingnote.com/archives/18


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM