前一篇搭建RabbitMQ集群(通用)只是把筆記直接移動過來了,因為我的機器硬盤已經滿了,實在是開不了那么虛擬機。
還好,我的Linux中安裝了Docker,這篇文章就簡單介紹一下Docker中搭建RabbitMQ集群吧。當然,理念還是通用的,包括命令啥的。只是操作方式有所不同而已。
我將在今后的Docker系列文章中介紹Docker的倉庫、鏡像、容器等,這里不做過多的介紹。
我的Docker已經安裝3.7.8-management鏡像 *帶management后綴的鏡像版本,支持網頁控制台。
1)、創建多個RabbitMQ容器
①
docker run -d --hostname rabbit1 --name myrabbit1 -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.7.8-management
②
docker run -d --hostname rabbit2 --name myrabbit2 -p 5673:5672 -p 15673:15672 --link myrabbit1:rabbit1 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.7.8-management
③
docker run -d --hostname rabbit3 --name myrabbit3 -p 5674:5672 -p 15674:15672 --link myrabbit1:rabbit1 --link myrabbit2:rabbit2 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.7.8-management
*
--link 連接多個容器
-d 后台進程運行
--hostname RabbitMQ主機名稱
--name 容器名稱
-p port:port 本地端口:容器端口
-e 參數設置
2)、將RabbitMQ節點加入到集群中
①
docker exec -it myrabbit1 bash rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl start_app exit
②
docker exec -it myrabbit2 bash rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl join_cluster --ram rabbit@rabbit1 rabbitmqctl start_app exit
③
docker exec -it myrabbit3 bash rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl join_cluster --ram rabbit@rabbit1 rabbitmqctl start_app exit
* --ram 表示設置為內存節點,忽略該參數則默認為磁盤節點。
使用http://ip:15672 進行訪問了,賬號密碼默認為guest&guest
補充:
如何將已經運行的多台RabbitMQ部署為集群?
1.同步它們之間的erlang cookie
RabbitMQ是通過Erlang實現的,Erlang Cookie相當於不同節點之間相互通訊的秘鑰,Erlang節點通過交換Erlang Cookie獲得認證。
①通過RabbitMQ容器啟動日志里面的home dir路徑作為根路徑獲取Erlang Cookie所在位置。使用:“docker logs 容器名稱/ID”查看
所以Erlang Cookie的全部路徑就是“/var/lib/rabbitmq/.erlang.cookie”。
②復制Erlang Cookie到其他RabbitMQ節點
獲取到第一個RabbitMQ的Erlang Cookie之后,只需要把這個文件復制到其他RabbitMQ節點即可。
物理機和容器之間復制命令如下:
-
-
- 容器復制文件到物理機:docker cp 容器名稱:容器目錄 物理機目錄
- 物理機復制文件到容器:docker cp 物理機目錄 容器名稱:容器目錄
-
設置Erlang Cookie文件權限:“chmod 600 /var/lib/rabbitmq/.erlang.cookie”。
③將節點加入集群