3臺物理機使用docker搭建rabbitmq映象叢集
一、準備3臺linux機器
核心版本在3.10以上,三臺機器的IP地址為 10.10.10.1 、10.10.10.2 、10.10.10.3
二、配置三臺機器的hosts
10.10.10.1 dockerrabbitmqhostname1 rabbit1
10.10.10.2 dockerrabbitmqhostname2 rabbit2
10.10.10.3 dockerrabbitmqhostname3 rabbit3
配置hosts命令
sudo vim hosts
配置完hosts需要重啟網路
/etc/init.d/network restart
三、使用docker搭建rabbitmq
1、建立目錄
建立該目錄用途是做docker中rabbitmq目錄對映
/app/rabbitmq
2、在10.10.10.1機器上執行如下
1)執行如下命令啟動映象
需要在3臺linux上都執行,注意 --name 和 --hostname兩個需要修改成對應內容,參照二中配置的hosts
命令執行期間需要輸入 y 並繼續,如果有出現失敗很有可能是網路原因,繼續嘗試即可,如有必要需刪除建立失敗的容器。
sudo docker run -d --net host --name rabbit1 --hostname dockerrabbitmqhostname1 --log-opt max-size=100m --log-opt max-file=1000 -v /app/rabbitmq:/var/lib/rabbitmq -v /app/rabbitmq/rabbitmq:/etc/rabbitmq -e RABBITMQ_DEFAULT_USER=jiaogg -e RABBITMQ_DEFAULT_PASS=jiaogg123 -e RABBITMQ_ERLANG_COOKIE='rabbitcookietest' rabbitmq:3.8.9-management
命令講解:
-d :後臺執行rabbitmq
--net :詳見docker的4種網路模式
--name :容器的名字
--hostname :配置的本機的host的名字
--log-optmax-size=100m :日誌大小分隔限制
--log-opt max-file=1000 :保留1000個日誌檔案
-v /app/rabbitmq:/var/lib/rabbitmq -v /app/rabbitmq/rabbitmq:/etc/rabbitmq :docker中rabbitmq的檔案對映到物理機
-e RABBITMQ_DEFAULT_USER=jiaogg -e RABBITMQ_DEFAULT_PASS=jiaogg123 :指定rabbitmq服務的登陸使用者名稱和密碼
-e RABBITMQ_ERLANG_COOKIE='rabbitcookietest' :指定叢集通訊的cookie,此cookie配置3臺機器必須一模一樣
rabbitmq:3.8.9-management :使用的rabbitmq的版本
命令執行成功後執行如下命令檢視容器列表
docker ps
或者
docker ps -a
-a 可以檢視所有的正在執行和沒有執行的映象列表
通過docker ps -a 命令可以看到如下列表
關鍵列資訊講解:
CONTAINER ID :映象id(比較重要)
IMAGE : 映象資訊
CREATED :建立時長
STATUS : 執行狀態和時長
PORTS :埠號
NAMES :映象名字(比較重要)
2)執行如下命令配置映象
需要在3臺都執行已下命令,注意容器ID,一行一行命令執行
docker exec -it 容器id /bin/bash
rabbitmq-plugins enable rabbitmq_management
以上開啟管理後臺外掛之後需要通過管理頁面建立一個叫 push 的vhost
rabbitmqctl set_policy mirroredpolicy "push.queue$" '{"ha-mode":"all"}' --apply-to queues
rabbitmqctl set_policy mirroredpolicy "push.exchange$" '{"ha-mode":"all"}' --apply-to exchanges
rabbitmqctl set_policy -p push mirroredpolicy "push.queue$" '{"ha-mode":"all"}' --apply-to queues
rabbitmqctl set_policy -p push mirroredpolicy "push.exchange$" '{"ha-mode":"all"}' --apply-to exchanges
exit
命令講解:
docker exec -it 容器id /bin/bash :進入某個ID的容器
rabbitmq-plugins enable rabbitmq_management : 開啟管理後臺外掛
rabbitmqctl set_policy mirroredpolicy "push.queue$" '{"ha-mode":"all"}' --apply-to queues :配置 預設的vhost:“/”中的以“push.queue”結尾的佇列為映象佇列
rabbitmqctl set_policy mirroredpolicy "push.exchanges$" '{"ha-mode":"all"}' --apply-to exchanges :配置 預設的vhost:“/”中的以“push.exchanges”結尾的交換機為映象交換機(可不指定交換機為映象)
rabbitmqctl set_policy -p push mirroredpolicy "push.queue$" '{"ha-mode":"all"}' --apply-to queues:配置 自己建立的vhost:“push”中的以“push.queue”結尾的佇列為映象佇列
rabbitmqctl set_policy -p push mirroredpolicy "push.exchange$" '{"ha-mode":"all"}' --apply-to exchanges:配置 自己建立的vhost:“push”中的以“push.exchanges”結尾的交換機為映象交換機(可不指定交換機為映象)
exit : 退出容器
3)加入叢集
在10.10.10.2機器上執行如下命令
sudo docker exec -it rabbit2 /bin/bash
rabbitmqctl stop_app
rabbitmqctl join_cluster [email protected]
rabbitmqctl start_app
exit
在10.10.10.3機器上執行如下命令
sudo docker exec -it rabbit3 /bin/bash
rabbitmqctl stop_app
rabbitmqctl join_cluster [email protected]
rabbitmqctl start_app
exit
該叢集中機器全部是磁碟節點,如需建立記憶體節點可以使用如下命令
rabbitmqctl join_cluster --ram [email protected]
三、登陸管理後臺
由於三臺機器都開啟了管理後臺外掛,所以三臺機器都登陸,使用者名稱:jiaogg、密碼:jiaogg123,URL:10.10.10.1:17652、10.10.10.2:17652、10.10.10.3:17652
在其中一臺機器上建立交換機和佇列之後可以在其他兩臺機器的管理頁面上也可以看到建立的交換機和佇列
在其中一臺機器上傳送訊息後,在其他兩臺機器上都可以收到訊息