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

使用Docker部署RabbitMQ集羣html

概述

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

Windows10上Docker的安裝bash

由於本人用的是Windows系統,全部推薦一個不錯的安裝文章,詳見:blog.csdn.net/xiaoping091…服務器

注意:設置阿里雲Docker Hub加速,配置Registry mirrors地址「j0andt2p.mirror.aliyuncs.com/」。cookie

阿里雲的鏡像市場:dev.aliyun.com/search.htmlapp

下載RabbitMQ鏡像

1.鏡像地址ssh

RabbitMQ Docker官方認證鏡像地址:dev.aliyun.com/detail.html…阿里雲

2.安裝命令.net

安裝以前,切記把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種:

  1. 使用attach
  2. 使用SSH
  3. 使用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:15672http://宿主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 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」。

參考資料

blog.csdn.net/xiaoping091…

blog.csdn.net/luosai19910…

blog.csdn.net/bolg_hero/a…

ivivisoft.com/2017/03/06/…

長按二維碼,關注做者更多動態

相關文章
相關標籤/搜索