使用Docker部署RabbitMQ叢集
概述
本文重點介紹的Docker的使用,以及如何部署RabbitMQ叢集,最基礎的Docker安裝,本文不做過多的描述,讀者可以自行度娘。
Windows10上Docker的安裝
因為本人用的是Windows系統,所有推薦一個不錯的安裝文章,詳見:blog.csdn.net/xiaoping091…
注意:設定阿里雲Docker Hub加速,配置Registry mirrors地址“j0andt2p.mirror.aliyuncs.com/”。
阿里雲的映象市場:dev.aliyun.com/search.html
下載RabbitMQ映象
1.映象地址
RabbitMQ Docker官方認證映象地址:dev.aliyun.com/detail.html…
2.安裝命令
安裝之前,切記把Docker Hub設定為阿里雲的加速,方便安裝。
docker pull rabbitmq:3.6.15-management
注意使用字尾為"-management"的映象版本,是包含網頁控制檯的。
3.檢視安裝
使用命令:docker images檢視下載的映象,如下圖所示:
Docker常用命令
容器停止:docker stop 容器名稱 啟動容器:docker start 容器名稱 刪除容器:docker rm 容器名稱 刪除映象:docker rmi 映象名稱 檢視執行的所有容器:docker ps 檢視所有容器:docker ps -a 容器複製檔案到物理機:docker cp 容器名稱:容器目錄 物理機目錄 物理機複製檔案到容器:docker cp 物理機目錄 容器名稱:容器目錄
進入Docker目錄
簡單的進入Docker容器的方法分為3種:
- 使用attach
- 使用SSH
- 使用exec
1.attach
attach有一個缺點,當連線終止的時候,或者使用exit之後,容器就會退出後臺執行,所以不適合生產環境使用。既然不好用,我們在這裡就不過多的介紹它了。
2.SSH
按照之前我們使用liunx的習慣,使用ssh連線伺服器似乎是一個很誘人的答案,但這樣做並不優雅,也不是最佳的實踐方式,詳情點選檢視:blog.csdn.net/bolg_hero/a…
3.exec
exec無疑是我們現階段最好的實踐方案,一起來看它是怎麼使用的。
進入docker命令:
docker exec -it /bin/bash
其中/bin/bash 也可能是/bin/sh.
使用docker exec --help檢視更多命令,和命令說明。
退出docker:
exit
啟動RabbitMQ
docker run -d --hostname localhost --name myrabbit -p 15672:15672 -p 5672:5672 rabbitmq:3.6.15-management
引數說明:
- -d 後臺程式執行
- hostname RabbitMQ主機名稱
- name 容器名稱
- -p port:port 本地埠:容器埠
- -p 15672:15672 http訪問埠
- -p 5672:5672 amqp訪問埠
啟動完成之後,使用:docker ps 檢視程式執行情況。
使用:http://宿主ip:15672 訪問,使用者名稱密碼使用預設:guest/guest.
啟動多個RabbitMQ
- docker run -d --hostname localhost --name myrabbit -p 15672:15672 -p 5672:5672 rabbitmq:3.6.15-management
- docker run -d --hostname localhost2 --name myrabbit2 -p 15673:15672 -p 5673:5672 rabbitmq:3.6.15-management
這樣我們就可以使用,http://宿主ip:15672 和 http://宿主ip:15673 進行訪問了,預設賬號密碼依舊是guest/guest.
搭建RabbitMQ叢集
步驟一:安裝RabbitMQ;
步驟二:加入RabbitMQ節點到叢集;
步驟一:安裝RabbitMQ
docker run -d --hostname rabbit1 --name myrabbit1 -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.6.15-management
docker run -d --hostname rabbit2 --name myrabbit2 -p 5673:5672 --link myrabbit1:rabbit1 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.6.15-management
docker run -d --hostname rabbit3 --name myrabbit3 -p 5674:5672 --link myrabbit1:rabbit1 --link myrabbit2:rabbit2 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.6.15-management
具體的引數含義,參見上文“啟動RabbitMQ”部分。
注意點:
- 多個容器之間使用“--link”連線,此屬性不能少;
- Erlang Cookie值必須相同,也就是RABBITMQ_ERLANG_COOKIE引數的值必須相同,原因見下文“配置相同Erlang Cookie”部分;
步驟二:加入RabbitMQ節點到叢集
設定節點1:
docker exec -it myrabbit1 bash rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl start_app exit
設定節點2,加入到叢集:
docker exec -it myrabbit2 bash rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl join_cluster --ram rabbit@rabbit1 rabbitmqctl start_app exit
引數“--ram”表示設定為記憶體節點,忽略次引數預設為磁碟節點。
設定節點3,加入到叢集:
docker exec -it myrabbit3 bash rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl join_cluster --ram rabbit@rabbit1 rabbitmqctl start_app exit
設定好之後,使用http://物理機ip:15672 進行訪問了,預設賬號密碼是guest/guest,效果如下圖:
啟動了3個節點,1個磁碟節點和2個記憶體節點。
配置相同Erlang Cookie
有些特殊的情況,比如已經執行了一段時間的幾個單個物理機,我們在之前沒有設定過相同的Erlang Cookie值,現在我們要把單個的物理機部署成叢集,實現我們需要同步Erlang的Cookie值。
1.為什麼要配置相同的erlang cookie?
因為RabbitMQ是用Erlang實現的,Erlang Cookie相當於不同節點之間相互通訊的祕鑰,Erlang節點通過交換Erlang Cookie獲得認證。
2.Erlang Cookie的位置
要想知道Erlang Cookie位置,首先要取得RabbitMQ啟動日誌裡面的home dir路徑,作為根路徑。使用:“docker logs 容器名稱”檢視,如下圖:
所以Erlang Cookie的全部路徑就是“/var/lib/rabbitmq/.erlang.cookie”。
注意:每個人的erlang cookie位置可能不同,一定要檢視自己的home dir路徑。
3.複製Erlang Cookie到其他RabbitMQ節點
獲取到第一個RabbitMQ的Erlang Cookie之後,只需要把這個檔案複製到其他RabbitMQ節點即可。
物理機和容器之間複製命令如下:
- 容器複製檔案到物理機:docker cp 容器名稱:容器目錄 物理機目錄
- 物理機複製檔案到容器:docker cp 物理機目錄 容器名稱:容器目錄
設定Erlang Cookie檔案許可權:“chmod 600 /var/lib/rabbitmq/.erlang.cookie”。
參考資料
長按二維碼,關注作者更多動態