当前位置: 首页 > news >正文

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

使用Docker部署RabbitMQ集群

概述

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

Windows10上Docker的安装

因为本人用的是Windows系统,所有推荐一个不错的安装文章,详见:blog.csdn.net/xiaoping091…

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

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

下载RabbitMQ镜像

1.镜像地址

RabbitMQ Docker官方认证镜像地址:dev.aliyun.com/detail.html…

2.安装命令

安装之前,切记把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: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值,现在我们要把单个的物理机部署成集群,实现我们需要同步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/…

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

相关文章:

  • 小程序获取用户头像大图 小程序获取用户头像模糊的问题 小程序自定义转发头像模糊 小程序自定义转发分享大图...
  • mysql---表操作之创建表
  • redux-form V.7.4.2学习笔记(六)表单同步校验技术
  • 如何使用Helm更新使用ConfigMap的应用程序
  • 浅谈LVS
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • python开发 *进程数据隔离.守护进程,进程同步工具 * 180725
  • 磁条卡,IC卡,ID卡,信用卡芯片卡,信用卡磁条卡 等等的区别
  • AI时代,APP运营是否会被淘汰
  • 初到湾区
  • android进程防杀套路【转】
  • 老K漫谈区块链的共识(1)——免信任的共识机制
  • 【Oracle】在win10上安装Oracle客户端报错:[INS-13001]环境不满足最低要求
  • Python、Linux与我的缘分
  • NSString 字符串
  • JS 中的深拷贝与浅拷贝
  • 「面试题」如何实现一个圣杯布局?
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • DataBase in Android
  • GitUp, 你不可错过的秀外慧中的git工具
  • Java小白进阶笔记(3)-初级面向对象
  • JS字符串转数字方法总结
  • Spring Cloud中负载均衡器概览
  • SpringBoot几种定时任务的实现方式
  • springMvc学习笔记(2)
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 三分钟教你同步 Visual Studio Code 设置
  • 深度解析利用ES6进行Promise封装总结
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 源码安装memcached和php memcache扩展
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • Linux权限管理(week1_day5)--技术流ken
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • #QT(TCP网络编程-服务端)
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (定时器/计数器)中断系统(详解与使用)
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)visual stdio 书签功能介绍
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .NET 使用 XPath 来读写 XML 文件
  • .NET与 java通用的3DES加密解密方法
  • .net中应用SQL缓存(实例使用)
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • [16/N]论得趣
  • [C# 开发技巧]如何使不符合要求的元素等于离它最近的一个元素
  • [Everyday Mathematics]20150130
  • [Flexbox] Using order to rearrange flexbox children
  • [IE编程] 如何获得IE版本号