以下內容來自網絡轉載
步驟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現在不允許做一些已創建容器的啟動參數調整。
Docker容器不同於虛擬機或主機,容器內部署的應用無法啟動,基本上這個容器就廢了。Docker現在不允許做一些已創建容器的啟動參數調整。
集群部署、運行准則
1.
保證集群中至少有一個在線,那怕這個節點是內存節點.
2. 如果關閉整個集群節點,必須按照順序逐個關閉,並且最后一個關閉節點務必為磁盤節點。在啟動時倒着順序啟動。(如關閉順序r1,r2,r3.那么啟動順序為r3,r2,r1).
3. 集群中如果使用了虛擬技術(Docker,VM),虛擬節點不能全在同一台物理機中。(你不能保證物理機不會宕機,如果宕機基本上集群是啟動不了的.你不知道關閉順序,你就無法確定啟動順序,並且宕機關閉時間可能RabbitMQ節點都沒有反應過來,無法做一些集群狀態處理。)
2. 如果關閉整個集群節點,必須按照順序逐個關閉,並且最后一個關閉節點務必為磁盤節點。在啟動時倒着順序啟動。(如關閉順序r1,r2,r3.那么啟動順序為r3,r2,r1).
3. 集群中如果使用了虛擬技術(Docker,VM),虛擬節點不能全在同一台物理機中。(你不能保證物理機不會宕機,如果宕機基本上集群是啟動不了的.你不知道關閉順序,你就無法確定啟動順序,並且宕機關閉時間可能RabbitMQ節點都沒有反應過來,無法做一些集群狀態處理。)
參考資料
- RabbitMQ Doc - Clustering Guide
- RabbitMQ Doc - Highly Available Queues
- RabbitMQ 實戰 - 第五章 集群並處理失敗
