Docker搭建RabbitMq的普通集群和镜像集群的详细操作

目录
  • 一、搭建RabbitMq的运行环境
    • 1.通过search查询rabbitmq镜像
    • 2.通过pull拉取rabbitmq的官方最新镜像
    • 3.创建容器
    • 4.启动管理页面
    • 5.设置erlang cookie
  • 二、普通模式
  • 三、镜像模式

普通集群:多个节点组成的普通集群,消息随机发送到其中一个节点的队列上,其他节点仅保留元数据,各个节点仅有相同的元数据,即队列结构、交换器结构、vhost等。消费者消费消息时,会从各个节点拉取消息,如果保存消息的节点故障,则无法消费消息,如果做了消息持久化,那么得等该节点恢复,然后才可被消费;如果没有持久化的话,就会产生消息丢失的现象。

镜像集群:它是在普通模式的基础上,把需要的队列做成镜像队列,存在于多个节点来实现高可用(HA)。该模式解决了上述问题,Broker会主动地将消息实体在各镜像节点间同步,在consumer取数据时无需临时拉取。该模式带来的副作用也很明显,除了降低系统性能外,如果镜像队列数量过多,加之大量的消息进入,集群内部的网络带宽将会被大量消耗。通常地,对可靠性要求较高的场景建议采用镜像模式。

一、搭建RabbitMq的运行环境

我本机是window10,通过docker搭建两个rabbitmq节点。

1.通过search查询rabbitmq镜像

docker search rabbitmq

2.通过pull拉取rabbitmq的官方最新镜像

这里最好带上tag为management的版本,否则拉最新的latest,web管理页无法显示全,会提示overview:management only mode

docker pull rabbitmq:3.8.25-management

3.创建容器

docker run -d --name rabbitmq1 -p 5672:5672 -p 15672:15672 --hostname myRabbit1 -e RABBITMQ_DEFAULT_VHOST=my_vhost1  -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin a4eb038c2ecb

--name:容器名称

-p:端点映射

--hostname:rabbitmq的节点名称

-e RABBITMQ_DEFAULT_VHOST:虚拟主机名称

-e RABBITMQ_DEFAULT_USER:登录账号

-e RABBITMQ_DEFAULT_PASS:登录密码

a4eb038c2ecb是镜像id,根据自己情况替换。

4.启动管理页面

我们的镜像默认没有开启web管理页面,所以我们通过exec命令进入容器启动,这个镜像的环境是ubuntu的

PS C:\> docker exec -it 639a151c5440 /bin/bash
root@myRabbit:/# rabbitmq-plugins enable rabbitmq_management

浏览器中访问http://localhost:15672/即可打开,另一个rabbitmq如法炮制,区别之处在于更换端口为5673和15673等,并且创建容器时使用--link连接第一个rabbitmq节点(也可创建桥接网络network连接),如下

docker run -d --name rabbitmq2 -p 5673:5672 -p 15673:15672 --hostname myRabbit2 -e RABBITMQ_DEFAULT_VHOST=my_vhost2  -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin --link rabbitmq1:myRabbit1 a4eb038c2ecb

5.设置erlang cookie

erlang cookie原本可以通过run容器时设置参数-e RABBITMQ_ERLANG_COOKIE,但是现在过期弃用了。

我们先通过docker logs命令查看容器的运行日志,寻找home dir参数如下

PS D:\> docker logs rabbitmq1
//.....这里省略
  Starting broker...2021-11-17 02:19:55.859245+00:00 [info] <0.222.0>
2021-11-17 02:19:55.859245+00:00 [info] <0.222.0>  node           : rabbit@myRabbit1
2021-11-17 02:19:55.859245+00:00 [info] <0.222.0>  home dir       : /var/lib/rabbitmq
2021-11-17 02:19:55.859245+00:00 [info] <0.222.0>  config file(s) : /etc/rabbitmq/conf.d/10-default-guest-user.conf
2021-11-17 02:19:55.859245+00:00 [info] <0.222.0>                 : /etc/rabbitmq/conf.d/management_agent.disable_metrics_collector.conf
2021-11-17 02:19:55.859245+00:00 [info] <0.222.0>  cookie hash    : Aed9pjd9vYWw3hng7Gjmkg==
2021-11-17 02:19:55.859245+00:00 [info] <0.222.0>  log(s)         : /var/log/rabbitmq/rabbit@myRabbit1_upgrade.log
2021-11-17 02:19:55.859245+00:00 [info] <0.222.0>                 : <stdout>
2021-11-17 02:19:55.859245+00:00 [info] <0.222.0>  database dir   : /var/lib/rabbitmq/mnesia/rabbit@myRabbit1

所以.erlang.cookie文件在此路径下,我们进入容器可以看到此文件

root@myRabbit1:~# ls -a /var/lib/rabbitmq
.  ..  .bash_history  .erlang.cookie  mnesia

我们再设置erlang cookie的权限,在容器内运行如下代码,如果权限不够后续操作会报错

chmod 600 /var/lib/rabbitmq/.erlang.cookie

之后我们通过docker cp命令将rabbitmq1中的.erlang.cookie文件拷到物理机上再拷贝到rabbitmq2的容器中,物理机和容器之间复制命令如下:

  • 容器复制文件到物理机:docker cp 容器名称:容器目录
  • 物理机目录物理机复制文件到容器:docker cp 物理机目录 容器名称:容器目录

具体代码如下:

docker cp rabbitmq1:/var/lib/rabbitmq/  d:\workspace\
docker cp d:\workspace\rabbitmq\.erlang.cookie rabbitmq2:/var/lib/rabbitmq/

复制之后需要重启rabbitmq2容器,否则执行rabbitmqctl命令报如下错误:

[error] Cookie file /var/lib/rabbitmq/.erlang.cookie must be accessible by owner only

二、普通模式

重启后进入容器将rabbitmq2的节点加入rabbitmq1中创建普通集群,分别执行如下代码即可:

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@myRabbit1    //myRabbitmq1为rabbitmq1容器中rabbitmq的hostname
rabbitmqctl start_app

之后我们再web管理页可以看到两个节点了。

在任意一个节点创建一个队列,另一个节点也会生成相同的队列。而且可以发现rabbitmq2的vhost从my_vhost2变为了my_vhost1与rabbitmq相同了。

三、镜像模式

镜像模式就是在普通模式的基础上进入rabbitmq1容器输入如下命令即可:

rabbitmqctl set_policy -p my_vhost1 ha-all "^" '{"ha-mode":"all"}' --apply-to all

具体的格式为

rabbitmqctl set_policy [-p Vhost] Name Pattern Definition [Priority]
-p Vhost: 可选参数,针对指定vhost下的queue进行设置
Name: policy的名称
Pattern: queue的匹配模式(正则表达式)
Definition:镜像定义,包括三个部分ha-mode, ha-params, ha-sync-mode
        ha-mode:指明镜像队列的模式,有效值为 all/exactly/nodes
            all:表示在集群中所有的节点上进行镜像
            exactly:表示在指定个数的节点上进行镜像,节点的个数由ha-params指定
            nodes:表示在指定的节点上进行镜像,节点名称通过ha-params指定
        ha-params:作为参数,为ha-mode的补充
        ha-sync-mode:进行队列中消息的同步方式,有效值为automatic和manual
priority:可选参数,policy的优先级

rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}' --apply-to all

或者登录rabbitmq管理页面 ——> Admin ——> Policies ——> Add / update a policy

name:策略名称

Pattern:^ 匹配符,只有一个^代表匹配所有。^message指同步“message”开头的队列名称

Definition:ha-mode=all 为匹配类型,分为3种模式:all(表示所有的queue)

Priority:优先级,首先根据priority排序,值越大的优先级越高;相同priority则根据创建时间排序,越晚创建的优先级越高。

简单说明一下 Operator Policy 和 User Policy 的区别:

  • Operator Policy 是给服务提供商或公司基础设施部门用来设置某些需要强制执行的通用规则
  • User Policy 是给业务应用用来设置的规则

Operator Policy 和 User Policy 会合并后作用于队列,并且为防止 Operator Policy 对队列某些关键属性例如死信队列交换器Dead Letter Exchange的覆盖导致业务应用产生非预期的结果,Operator Policy 只支持expiremessage-ttlmax-lengthmax-length-bytes4个参数。

参考学习:

https://www.cnblogs.com/knowledgesea/p/6535766.html

https://blog.csdn.net/belonghuang157405/article/details/83540148

到此这篇关于Docker搭建RabbitMq的普通集群和镜像集群的文章就介绍到这了,更多相关Docker搭建RabbitMq集群内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • docker搭建rabbitmq集群环境的方法

    本文主要讲述如何用docker搭建rabbitmq的集群.分享给大家,希望此文章对各位有所帮助. 下载镜像 采用bijukunjummen该镜像. git clone https://github.com/bijukunjummen/docker-rabbitmq-cluster.git 运行 启动集群 cd docker-rabbitmq-cluster/cluster docker-compose up -d ...... Status: Downloaded newer image for

  • 用docker部署RabbitMQ环境的详细介绍

    前置条件: 已经安装好docker 1.查找镜像(有2种方式) ①登录rabbitmq官网找到docker镜像,选择想要的镜像的tag https://www.rabbitmq.com/download.html https://hub.docker.com/_/rabbitmq 如果需要访问web管理页面,就选择tag为management的 ps:带有alpine的是用最小linux镜像构建的,体积最小可以达5M初学者不建议这么折腾,而且 Alpine Linux使用了muslmusl实现的

  • docker安装rabbitmq无法进入管理页面的问题

    1.环境准备 腾讯云服务器 CENTOS 7 版本 安装docker容器 2.开始安装 docker pull rabbitmq:management 说明:为什么不直接安装 docker pull rabbitmq 这个,因为这个安装后,开启对应端口后是不能直接访问它的管理后台,需要额外的命令开启,后面会讲这种情况 容器运行,对应的端口开启 docker run -di --name=mycloud_rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369

  • Docker部署Rabbitmq容器实现过程解析

    1.拉取镜像 首先执行如下命令将镜像下载到本地: 注意:rabbitmq 是官方镜像,该镜像不带控制台.如果想要安装带控制台的镜像,则需要在拉取镜像时附带 tag 标签,例如:rabbitmq:management. docker pull rabbitmq:management 2.创建挂载本地的data目录 mkdir -p /home/rabbitmq/data 3,启动容器 (1)执行如下命令实例化 RabbitMQ 服务: docker run --name rabbitmq -d -

  • docker安装并运行rabbitmq的实例代码

    拉取镜像: [mall@VM_0_7_centos ~]$ sudo docker pull rabbitmq:3.7.15 [sudo] password for mall: 3.7.15: Pulling from library/rabbitmq 5b7339215d1d: Pull complete 14ca88e9f672: Pull complete a31c3b1caad4: Pull complete b054a26005b7: Pull complete eef17c6cb6c

  • Docker安装配置RabbitMQ的实现步骤

    目录 单机部署 在线拉取 查看镜像 创建并运行RabbitMQ 创建并运行MQ容器成功 添加防火墙规则 进入RabbitMQ管理平台的端口 Overview总览 Connections连接 Channels通道 Exchanges交换机 Queues队列 Users用户管理 单机部署 本文将在Centos7系统下演示使用Docker来安装RabbitMQ. 在线拉取 rabbitmq镜像 docker pull rabbitmq:3-management 注:rabbitmq:3-managem

  • docker快速安装rabbitmq的方法步骤

    一.获取镜像 #指定版本,该版本包含了web控制页面 docker pull rabbitmq:management 二.运行镜像 #方式一:默认guest 用户,密码也是 guest docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq:management #方式二:设置用户名和密码 docker run -d --hostname my-rabbit --name rabb

  • Docker部署rabbitmq遇到的两个问题

    1.背景 Docker部署rabbitmq遇到的如下两个问题 问题一:访问交换机时报错 Management API returned status code 500 问题二:访问channel时报错 Stats in management UI are disabled on this node 2.解决方案 [root@ldp03host ~]# clear [root@ldp03host ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED ST

  • docker部署rabbitmq集群的实现方法

    拉取rabbitmq management镜像 docker pull rabbitmq:3.7-rc-management 若不使用Rabbitmq的management功能,可以拉取镜像:rabbitmq:3.7-rc 参考: https://hub.docker.com/_/rabbitmq/ 创建网络 创建rabbitmq私有网络 # docker network create rabbitmqnet # docker network ls NETWORK ID NAME DRIVER

  • Docker搭建RabbitMq的普通集群和镜像集群的详细操作

    目录 一.搭建RabbitMq的运行环境 1.通过search查询rabbitmq镜像 2.通过pull拉取rabbitmq的官方最新镜像 3.创建容器 4.启动管理页面 5.设置erlang cookie 二.普通模式 三.镜像模式 普通集群:多个节点组成的普通集群,消息随机发送到其中一个节点的队列上,其他节点仅保留元数据,各个节点仅有相同的元数据,即队列结构.交换器结构.vhost等.消费者消费消息时,会从各个节点拉取消息,如果保存消息的节点故障,则无法消费消息,如果做了消息持久化,那么得等

  • Docker搭建RabbitMQ集群的方法步骤

    目录 集群模式介绍 1.普通集群的搭建 1.1.普通集群架构介绍 1.2.环境准备 1.3.集群搭建 2.镜像集群的搭建 2.1.配置镜像集群的策略 集群模式介绍 RabbitMQ集群模式有两种:普通模式和镜像模式 普通模式:默认模式,多个节点组成的普通集群,消息随机发送到其中一个节点的队列上,其他节点仅保留元数据,各个节点仅有相同的元数据,即队列结构.交换器结构.交换器与队列绑定关系.vhost.消费者消费消息时,会从各个节点拉取消息,如果保存消息的节点故障,则无法消费消息,如果做了消息持久化

  • docker 搭建hadoop以及hbase集群详解

    要用docker搭建集群,首先需要构造集群所需的docker镜像.构建镜像的一种方式是,利用一个已有的镜像比如简单的linux系统,运行一个容器,在容器中手动的安装集群所需要的软件并进行配置,然后commit容器到新的镜像.另一种方式是,使用Dockerfile来自动化的构造镜像. 下面采用第二种. 1. 创建带ssh服务的ubuntu14.04系统镜像 使用ubuntu14系统来安装hadoop和hbase,由于hadoop集群机器之间通过ssh通信,所以需要在ubuntu14系统中安装ssh

  • 详解docker搭建redis集群的环境搭建

    本文介绍了docker搭建redis集群的环境搭建,分享给大家,废话不多说,具体如下: 下载镜像 docker pull redis 准备配置文件 mkdir /home/docker/redis/ wget https://raw.githubusercontent.com/antirez/redis/3.0/redis.conf -O /home/docker/redis/redis.conf cd /home/docker/redis/ sed -i 's/# slaveof <maste

  • 详解使用docker搭建hadoop分布式集群

    使用Docker搭建部署Hadoop分布式集群 在网上找了很长时间都没有找到使用docker搭建hadoop分布式集群的文档,没办法,只能自己写一个了. 一:环境准备: 1:首先要有一个Centos7操作系统,可以在虚拟机中安装. 2:在centos7中安装docker,docker的版本为1.8.2 安装步骤如下: <1>安装制定版本的docker yum install -y docker-1.8.2-10.el7.centos <2>安装的时候可能会报错,需要删除这个依赖 r

  • ubuntu docker搭建Hadoop集群环境的方法

    spark要配合Hadoop的hdfs使用,然而Hadoop的特点就是分布式,在一台主机上搭建集群有点困难,百度后发现可以使用docker构建搭建,于是开搞: github项目:https://github.com/kiwenlau/hadoop-cluster-docker 参考文章://www.jb51.net/article/109698.htm docker安装 文章中安装的是docker.io 但是我推荐安装docker-ce,docker.io版本太老了,步骤如下: 1.国际惯例更新

  • 使用Docker搭建Redis主从复制的集群

    在主从复制模式的集群里,主节点一般是一个,从节点一般是两个或多个,写入主节点的数据会被复制到从节点上,这样一旦主节点出现故障,应用系统能切换到从节点去读写数据,这样能提升系统的可用性.而且如果再采用主从复制模式里默认的读写分离的机制,更能提升系统的缓存读写性能.所以对性能和实时性不高的系统而言,主从复制模式足以满足一般的性能和安全性方面的需求. 1 概述主从复制模式 在实际应用中,如果有相应的设置,在向一台Redis服务器里写数据后,这个数据可以复制到另外一台(或多台)Redis服务器,这里数据

  • Docker 搭建集群MongoDB的实现步骤

    前言 由于公司业务需要,我们打算自己搭建 MongoDB 的服务,因为 MongoDB 的云数据库好贵,我们这次采用副本集的方式来搭建集群,三台服务器,一主.一副.一仲裁 基本概念 Replica Set 副本集:一个副本集就是一组 MongoDB 实例组成的集群,由一个主(Primary)服务器和多个备份(Secondary)服务器构成 主节点(master):主节点接收所有写入操作.主节点将对其数据集所做的所有更改记录到其 oplog. 副节点(secondary):复制主节点的 oplog

随机推荐