1. 程式人生 > >使用Docker部署RabbitMQ集群

使用Docker部署RabbitMQ集群

運行 缺點 mirrors 市場 reset 不能 docker容器 通過 clu

使用Docker部署RabbitMQ集群

本文重點介紹的Docker的使用,以及如何部署RabbitMQ集群,最基礎的Docker安裝,本文不做過多的描述,讀者可以自行度娘。

Windows10上Docker的安裝

因為本人用的是Windows系統,所有推薦一個不錯的安裝文章,詳見:https://blog.csdn.net/xiaoping0915/article/details/75094857

註意:設置阿裏雲Docker Hub加速,配置Registry mirrors地址“https://j0andt2p.mirror.aliyuncs.com/”。

阿裏雲的鏡像市場:https://dev.aliyun.com/search.html

1.鏡像地址

RabbitMQ Docker官方認證鏡像地址:https://dev.aliyun.com/detail.html?spm=5176.1971733.2.16.6c045aaaDxFoMnrepoId=1256

2.安裝命令

安裝之前,切記把Docker Hub設置為阿裏雲的加速,方便安裝。

docker pull rabbitmq:3.6.15-management

註意使用後綴為-management的鏡像版本,是包含網頁控制臺的。

3.查看安裝

使用命令:docker images查看下載的鏡像,如下圖所示:

技術分享圖片

image

容器停止:docker stop 容器名稱
啟動容器:docker start 容器名稱
刪除容器:docker rm 容器名稱
刪除鏡像:docker rmi 鏡像名稱
查看運行的所有容器:docker ps
查看所有容器:docker ps -a
容器復制文件到物理機:docker cp 容器名稱:容器目錄 物理機目錄
物理機復制文件到容器:docker cp 物理機目錄 容器名稱:容器目錄

簡單的進入Docker容器的方法分為3種:

1.使用attach

2.使用SSH

3.使用exec

attach有一個缺點,當連接終止的時候,或者使用exit之後,容器就會退出後臺運行,所以不適合生產環境使用。既然不好用,我們在這裏就不過多的介紹它了。

按照之前我們使用liunx的習慣,使用ssh連接服務器似乎是一個很誘人的答案,但這樣做並不優雅,也不是最佳的實踐方式,詳情點擊查看:https://blog.csdn.net/bolg_hero/article/details/50267103

exec無疑是我們現階段最好的實踐方案,一起來看它是怎麽使用的。

進入docker命令:

docker exec -it docker-name /bin/bash

其中/bin/bash 也可能是/bin/sh.

使用docker exec --help查看更多命令,和命令說明。

退出docker:

exit

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.

·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節點到集群;

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”部分。

註意點:

1.多個容器之間使用“--link”連接,此屬性不能少;

2.Erlang Cookie值必須相同,也就是RABBITMQ_ERLANG_COOKIE參數的值必須相同,原因見下文“配置相同Erlang Cookie”部分;

設置節點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,效果如下圖:

技術分享圖片

image

啟動了3個節點,1個磁盤節點和2個內存節點。

有些特殊的情況,比如已經運行了一段時間的幾個單個物理機,我們在之前沒有設置過相同的Erlang Cookie值,現在我們要把單個的物理機部署成集群,實現我們需要同步Erlang的Cookie值。

1.為什麽要配置相同的erlang cookie?

因為RabbitMQ是用Erlang實現的,Erlang Cookie相當於不同節點之間相互通訊的秘鑰,Erlang節點通過交換Erlang Cookie獲得認證。

2.Erlang Cookie的位置

要想知道Erlang Cookie位置,首先要取得RabbitMQ啟動日誌裏面的home dir路徑,作為根路徑。使用:“docker logs 容器名稱”查看,如下圖:

技術分享圖片

image

所以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”。

?

使用Docker部署RabbitMQ集群