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

概述

本文重点介绍的Docker的使用,以及如何部署RabbitMQ集群,最基础的Docker安装,本文不作过多的描述,读者能够自行度娘。html

Windows10上Docker的安装docker

由于本人用的是Windows系统,全部推荐一个不错的安装文章,详见:https://blog.csdn.net/xiaoping0915/article/details/75094857bash

注意:设置阿里云Docker Hub加速,配置Registry mirrors地址“https://j0andt2p.mirror.aliyuncs.com/”。服务器

阿里云的镜像市场:https://dev.aliyun.com/search.htmlcookie

下载RabbitMQ镜像

1.镜像地址app

RabbitMQ Docker官方认证镜像地址:https://dev.aliyun.com/detail.html?spm=5176.1971733.2.16.6c045aaaDxFoMn&repoId=1256ssh

2.安装命令阿里云

安装以前,切记把Docker Hub设置为阿里云的加速,方便安装。.net

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链接服务器彷佛是一个很诱人的答案,但这样作并不优雅,也不是最佳的实践方式,详情点击查看: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 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”部分。

注意点:

  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值。

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

参考资料

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/

长按二维码,关注做者更多动态