天天看點

RabbitMQ系列(五)使用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

下載下傳RabbitMQ鏡像

1.鏡像位址

RabbitMQ Docker官方認證鏡像位址:https://dev.aliyun.com/detail.html?spm=5176.1971733.2.16.6c045aaaDxFoMn&repoId=1256

2.安裝指令

安裝之前,切記把Docker Hub設定為阿裡雲的加速,友善安裝。

docker pull rabbitmq:3.6.15-management

注意使用字尾為"-management"的鏡像版本,是包含網頁控制台的。

3.檢視安裝

使用指令:docker images檢視下載下傳的鏡像,如下圖所示:

RabbitMQ系列(五)使用Docker部署RabbitMQ叢集

Docker常用指令

容器停止:docker stop 容器名稱

啟動容器:docker start 容器名稱

删除容器:docker rm 容器名稱

删除鏡像:docker rmi 鏡像名稱

檢視運作的所有容器:docker ps

檢視所有容器:docker ps -a

容器複制檔案到實體機:docker cp 容器名稱:容器目錄 實體機目錄

實體機複制檔案到容器:docker cp 實體機目錄 容器名稱:容器目錄

進入Docker目錄

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

  1. 使用attach
  2. 使用SSH
  3. 使用exec

1.attach

attach有一個缺點,當連接配接終止的時候,或者使用exit之後,容器就會退出背景運作,是以不适合生産環境使用。既然不好用,我們在這裡就不過多的介紹它了。

2.SSH

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

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

注意點:

  1. 多個容器之間使用“--link”連接配接,此屬性不能少;
  2. Erlang Cookie值必須相同,也就是RABBITMQ_ERLANG_COOKIE參數的值必須相同,原因見下文“配置相同Erlang Cookie”部分;

步驟二:加入RabbitMQ節點到叢集

設定節點1:

docker exec -it myrabbit1 bash

rabbitmqctl stop_app

rabbitmqctl reset

rabbitmqctl start_app

設定節點2,加入到叢集:

docker exec -it myrabbit2 bash

rabbitmqctl join_cluster --ram rabbit@rabbit1

參數“--ram”表示設定為記憶體節點,忽略次參數預設為磁盤節點。

設定節點3,加入到叢集:

docker exec -it myrabbit3 bash

設定好之後,使用http://實體機ip:15672 進行通路了,預設賬号密碼是guest/guest,效果如下圖:

RabbitMQ系列(五)使用Docker部署RabbitMQ叢集

啟動了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 容器名稱”檢視,如下圖:

RabbitMQ系列(五)使用Docker部署RabbitMQ叢集

是以Erlang Cookie的全部路徑就是“/var/lib/rabbitmq/.erlang.cookie”。

注意:每個人的erlang cookie位置可能不同,一定要檢視自己的home dir路徑。

3.複制Erlang Cookie到其他RabbitMQ節點

擷取到第一個RabbitMQ的Erlang Cookie之後,隻需要把這個檔案複制到其他RabbitMQ節點即可。

實體機和容器之間複制指令如下:

設定Erlang Cookie檔案權限:“chmod 600 /var/lib/rabbitmq/.erlang.cookie”。

參考資料

https://blog.csdn.net/xiaoping0915/article/details/75094857

https://blog.csdn.net/luosai19910103/article/details/78604692

https://blog.csdn.net/bolg_hero/article/details/50267103

http://ivivisoft.com/2017/03/06/rabbitmq-cluster/

長按二維碼,關注作者更多動态

RabbitMQ系列(五)使用Docker部署RabbitMQ叢集

關注下面二維碼,訂閱更多精彩内容。

RabbitMQ系列(五)使用Docker部署RabbitMQ叢集
RabbitMQ系列(五)使用Docker部署RabbitMQ叢集
RabbitMQ系列(五)使用Docker部署RabbitMQ叢集

關注公衆号(加好友):

RabbitMQ系列(五)使用Docker部署RabbitMQ叢集

作者:

王磊的部落格

出處:

http://vipstone.cnblogs.com/

mq