RabbitMQ docker集羣 多機器部署

參考
 
ip
port
hostname
192.168.2.201
6041
node1
192.168.2.202
6041
node2
192.168.2.203
6041
node3
1、啓動三個RabbitMQ容器
 
新版本已經不建議通過環境變量設置 Erlang Cookie 了,建議在 home 目錄下新建 .erlang.cookie 文件,在 每個節點的 .erlang.cookie 寫入一致的字符串,注意 .erlang.cookie 文件的權限應該爲 400。
所以爲了便於修改ErlangCookie,啓動容器時要做好容器數據卷的映射。
因爲/var/lib/rabbitmq 是 RabbitMQ home 目錄和 data 目錄,所以需要映射到宿主機
每以機器執行
mkdir -p /data/rabbitmq_cluster/node/{data,conf,log}
chmod -R 777 /data/rabbitmq_cluster/node
cat << EOF >/data/rabbitmq_cluster/node/data/.erlang.cookie
LleLHxuTQBrxgR4VnP03Q7 EOF chmod -R 600 /data/rabbitmq_cluster/node/data/.erlang.cookie

 

 
 
每臺機器分別執行
node1
docker run -d --name rabbitmq --restart=always --hostname node1 \ 
-e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=123456 \
-e RABBITMQ_DEFAULT_VHOST=my_vhost \ --privileged=true \
--add-host node2:192.168.2.202 --add-host node3:192.168.2.203 \
-v /data/rabbitmq_cluster/node/data:/var/lib/rabbitmq -v /data/rabbitmq_cluster/node/conf:/etc/rabbitmq -v /data/rabbitmq_cluster/node/log:/var/log/rabbitmq \
-p 4369:4369 -p 5672:5672 -p 15672:15672 -p 25672:25672 \
rabbitmq:management

 

 
node2
docker run -d --name rabbitmq --restart=always --hostname node2 \ 
-e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=123456 \
-e RABBITMQ_DEFAULT_VHOST=my_vhost \ --privileged=true \
--add-host node1:192.168.2.201 --add-host node3:192.168.2.203 \
-v /data/rabbitmq_cluster/node/data:/var/lib/rabbitmq -v /data/rabbitmq_cluster/node/conf:/etc/rabbitmq -v /data/rabbitmq_cluster/node/log:/var/log/rabbitmq \
-p 4369:4369 -p 5672:5672 -p 15672:15672 -p 25672:25672 \
rabbitmq:management

 

 
node3
docker run -d --name rabbitmq --restart=always --hostname node3 \ 
-e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=123456 \
-e RABBITMQ_DEFAULT_VHOST=my_vhost \ --privileged=true \
--add-host node1:192.168.2.201 --add-host node2:192.168.2.202 \
-v /data/rabbitmq_cluster/node/data:/var/lib/rabbitmq -v /data/rabbitmq_cluster/node/conf:/etc/rabbitmq -v /data/rabbitmq_cluster/node/log:/var/log/rabbitmq \
-p 4369:4369 -p 5672:5672 -p 15672:15672 -p 25672:25672 \
rabbitmq:management

 

 
設置節點1
docker exec -it rabbitmq /bin/bash 
rabbitmq-plugins enable rabbitmq_management # 管理頁面插件 r
abbitmqctl stop_app # (rabbitmqctl stop 會將Erlang 虛擬機關閉,rabbitmqctl stop_app 只關閉 RabbitMQ 服務)
rabbitmqctl reset
rabbitmqctl start_app #(只啓動應用服務)
exit

 

 
設置節點2
docker exec -it rabbitmq bash
rabbitmq-plugins enable rabbitmq_management # 管理頁面插件
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@node1
rabbitmqctl start_app(只啓動應用服務)
exit

 

設置節點3
docker exec -it rabbitmq bash
rabbitmq-plugins enable rabbitmq_management # 管理頁面插件
rabbitmqctl stop_app
rabbitmqctl reset r
abbitmqctl join_cluster rabbit@node1
rabbitmqctl start_app(只啓動應用服務)
exit

 

 
2.5、預覽結果
節點設置完成之後,在瀏覽器訪問192.168.13.100:15673、192.168.13.100:15674和192.168.13.100:15675中任意一個來查看RabbitMQ Management:
0
至此,RabbitMQ集羣搭建完畢。
 
3、配置鏡像隊列
3.1、配置鏡像的原因
如果 RabbitMQ 集羣中只有一個 Broker 節點,那麼該節點的失效將導致整體服務的臨時性不可用,並 且也可能會導致消息的丟失。可以將所有消息都設置爲持久化,並且對應隊列的durable屬性也設置爲true,但 是這樣仍然無法避免由於緩存導致的問題:因爲消息在發送之後和被寫入磁盤井執行刷盤動作之間存在一 個短暫卻會產生問題的時間窗。通過 publisherconfirm(發佈確認) 機制能夠確保客戶端知道哪些消息己經存入磁盤,盡 管如此,一般不希望遇到因單點故障導致的服務不可用。
引入鏡像隊列(Mirror Queue)的機制,可以將隊列鏡像到集羣中的其他 Broker 節點之上,如果集羣中 的一個節點失效了,隊列能自動地切換到鏡像中的另一個節點上以保證服務的可用性。
 
3.2、搭建步驟
啓動三臺集羣節點
隨便找一個節點添加 policy(策略) 要先綁定一個交換機和隊列纔行
 
0
 
 
 
 
說明:
 
Name:新建的策略的名字(按照自己的需求進行設置即可)
Pattern:會按照設置的規則進行鏡像設置(例如本例中設置爲 ^mirror,則會爲開頭是 mirror 的隊列進行鏡像備份)
Pattern: queue的匹配模式(正則表達式)。^表示所有隊列都是鏡像隊列。
Definition: 鏡像定義,包括三個部分ha-sync-mode、ha-mode、ha-params。
ha-mode: 指明鏡像隊列的模式,有效取值範圍爲all/exactly/nodes。
all:表示在集羣所有的代理上進行鏡像。
exactly:表示在指定個數的代理上進行鏡像,代理的個數由ha-params指定。
nodes:表示在指定的代理上進行鏡像,代理名稱通過ha-params指定。
ha-params: ha-mode模式需要用到的參數。
ha-sync-mode: 表示鏡像隊列中消息的同步方式,有效取值範圍爲:automatic,manually。
automatic:表示自動向master同步數據。
manually:表示手動向master同步數據。
Priority: 可選參數, policy的優先級。
 
0
3.在 rabbitmq-node1 上創建一個隊列發送一條消息,隊列存在鏡像隊列
 
0
 
4、停掉 rabbitmq-node1 之後發現 rabbitmq-node2 成爲鏡像隊列
0
 
5、就算整個集羣只剩下一臺機器了 依然能消費隊列裏面的消息 說明隊列裏面的消息被鏡像隊列傳遞到相應機器裏面
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章