Docker环境下的前后端分离项目部署与运维(八)使用Docker部署RabbitMQ集群
下载RabbitMQ镜像
- 镜像地址
RabbitMQ Docker官方认证镜像地址:https://hub.docker.com/_/rabbitmq - 安装命令
安装之前,切记把Docker Hub设置为阿里云的加速,方便安装。docker pull rabbitmq:3.7.-management
注意使用后缀为"-management"的镜像版本,是包含网页控制台的。
查看安装
使用命令:docker images查看下载的镜像,如下图所示:

启动RabbitMQ
docker run -d --hostname localhost --name myrabbit -p : -p : rabbitmq:3.7.-management
参数说明:
-d 后台进程运行
--hostname RabbitMQ主机名称
--name 容器名称
-p port:port 本地端口:容器端口
-p : http访问端口
-p : amqp访问端口
启动完成之后,使用:docker ps 查看程序运行情况。
使用:http://宿主ip:15672 访问,用户名密码使用默认:guest/guest.
启动多个RabbitMQ
docker run -d --hostname localhost --name myrabbit -p : -p : rabbitmq:3.7.-management
docker run -d --hostname localhost2 --name myrabbit2 -p : -p : rabbitmq:3.7.-management
这样我们就可以使用,http://宿主ip:15672 和 http://宿主ip:15673 进行访问了,默认账号密码依旧是guest/guest.
搭建RabbitMQ集群
步骤一:安装RabbitMQ
具体的参数含义,参见上文“启动RabbitMQ”部分。
#集群1
docker run -d --hostname rabbit1 --name myrabbit1 -p : -p : -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.7.-management
#集群2
docker run -d --hostname rabbit2 --name myrabbit2 -p : -p : -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' --link myrabbit1:rabbit1 rabbitmq:3.7.-management
#集群3
docker run -d --hostname rabbit3 --name myrabbit3 -p : -p : -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' --link myrabbit1:rabbit1 --link myrabbit2:rabbit2 rabbitmq:3.7.-management
注意点:
- 多个容器之间使用“--link”连接,此属性不能少;
- 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值。
- 为什么要配置相同的erlang cookie?
因为RabbitMQ是用Erlang实现的,Erlang Cookie相当于不同节点之间相互通讯的秘钥,Erlang节点通过交换Erlang Cookie获得认证。 - Erlang Cookie的位置
要想知道Erlang Cookie位置,首先要取得RabbitMQ启动日志里面的home dir路径,作为根路径。使用:“docker logs 容器名称”查看,如下图:
所以Erlang Cookie的全部路径就是“/var/lib/rabbitmq/.erlang.cookie”。
注意:每个人的erlang cookie位置可能不同,一定要查看自己的home dir路径。
- 复制Erlang Cookie到其他RabbitMQ节点
获取到第一个RabbitMQ的Erlang Cookie之后,只需要把这个文件复制到其他RabbitMQ节点即可。
物理机和容器之间复制命令如下:
容器复制文件到物理机:docker cp 容器名称:容器目录 物理机目录
物理机复制文件到容器:docker cp 物理机目录 容器名称:容器目录设置Erlang Cookie文件权限:chmod /var/lib/rabbitmq/.erlang.cookie
Docker环境下的前后端分离项目部署与运维(八)使用Docker部署RabbitMQ集群的更多相关文章
- Docker环境下的前后端分离项目部署与运维
本教程将从零开始部署一个前后端分离的开源项目,利用docker虚拟机的容器技术,采用分布式集群部署,将项目转换成为高性能.高负载.高可用的部署方案.包括了MySQL集群.Redis集群.负载均衡.双机 ...
- Docker环境下的前后端分离项目部署与运维(六)搭建MySQL集群
单节点数据库的弊病 大型互联网程序用户群体庞大,所以架构必须要特殊设计 单节点的数据库无法满足性能上的要求 单节点的数据库没有冗余设计,无法满足高可用 单节点MySQL的性能瓶领颈 2016年春节微信 ...
- Docker环境下的前后端分离项目部署与运维(九)后端项目部署与负载均衡
数据库准备 建立数据库 renren_fast ,然后运行renrenfast项目中的db文件夹内的脚本 -- 菜单 CREATE TABLE `sys_menu` ( `menu_id` bigin ...
- Docker环境下的前后端分离项目部署与运维(七)Redis高速缓存
Redis高速缓存 利用内存保存数据,读写速度远超硬盘:可以减少I/O操作,降低I/O压力. 发红包.抢红包的数据可以存在高速缓存中,加快处理速度,不需要经过数据库 淘宝首页一些优惠活动商品等热数据可 ...
- Docker环境下的前后端分离项目部署与运维(十一)Docker Swarm技术
Docker Swarm技术 docker swarm技术(之前的docker集群都是在 一个虚拟主机上的,但是如果这个主机挂掉了over了,docker技术就是多个虚拟主机形成一个集群) Swarm ...
- Docker环境下的前后端分离项目部署与运维(十二)使用Portainer管理Docker
安装 docker hub地址:https://hub.docker.com/r/portainer/portainer/ # 每台服务器都要安装 docker pull portainer/port ...
- 【Docker】1、 前后端分离项目 下载启动运行
人人开源前后端分离项目下载与配置 文章目录 人人开源前后端分离项目下载与配置 前后端分离框架介绍 后端项目下载与配置 1.renren-fast后台项目介绍 2.开发环境搭建 3.下载后端renren ...
- centos7上用docker搭建简单的前后端分离项目
1. 安装docker Docker 要求 CentOS 系统的内核版本高于 3.10 ,首先验证你的CentOS 版本是否支持 Docker . 通过 uname -r 命令查看你当前的内核版本 使 ...
- Window下,前后端分离项目,登录权限验证中的,Redis相关操作
[1]官网下载Redis(解压版) https://redis.io/download [2]切换到目录下打开DOS,执行指令启动Redis redis-server.exe redis.window ...
随机推荐
- C#安全类型转换基于convert
using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Globalization; n ...
- Python——XPath提取某个标签下所有文本
/text()获取指定标签下的文本内容,//text()获取指定标签下的文本内容,包括子标签下的文本内容,比较简单的是利用字符串相加: room_infos = li.xpath('.//a[@cla ...
- 北理工机器人队RM视觉组学习参考汇总(持续更新中)
欢迎大家有意加入北理工机器人队参与到视觉组的工作中.在大家能够正式作为队员参与到视觉组的准备工作之前,北理机器人队需要对各位进行培训.这篇文章主要面向有志于参加机器人队视觉组的同学.同时,欢迎所有对相 ...
- 2019-08-26 linux
1.question:什么是linux? answer:Linux由林纳斯·托瓦兹开发的一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户.多任务.支持多线程和多CPU ...
- 设计模式之(十三)外观模式(Facade)
外观模式思想 历史上牛人中成功逆袭,实现人生辉煌的人很多,这群人最耀眼的无疑是明太祖朱元璋,从一个放牛讨饭的最低层小屌丝逆袭到人类权力顶峰开国皇帝,确实是我等膜拜的对象.在发不断的发展过程中,其实就在 ...
- Delphi编译/链接过程
下面展示了Delphi是怎样编译源文件,并且把它们链接起来,最终形成可执行文件. 当Delphi编译项目(Project)时,将编译项目源文件.窗体单元和其他相关单元,在这个过程中将会发生好几件事情: ...
- vue 利用路由跨页传参
第一页,点击进入第二页进行传值: <template> <div id="app"> <div><router-link to=" ...
- Linux服务管理之DHCP
1.DHCP服务简介 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作, 主要有两个用途:给内部网络或网络 ...
- nmap指令
-sP 主机发现 -p 端口扫描(可区域) -sV 端口(服务版本信息)-O 操作系统-iL 使用列表里的IP.(快捷方便)-iR 对公网上的随机n个IP.--excludeile ...
- Compute Shader基础
ComputeShader: GPGPU:General Purpose GPU Programming,GPU通用计算,利用GPU的并行特性.大量并行无序数据的少分支逻辑适合GPGPU.平台 ...